Mam błąd w module jądra Linuksa, który powoduje, że standardowe jądro Ubuntu 14.04 przestaje działać (awaria).
Dlatego chcę edytować / łatać źródło tylko tego jednego modułu jądra, aby dodać dodatkowe wyjście debugowania. Omawiany moduł jądra mvsas
nie jest konieczny do uruchomienia. Z tego powodu nie widzę potrzeby aktualizowania żadnych obrazów initrd.
Przeczytałem wiele informacji (jak pokazano poniżej) i znalazłem zamieszanie w procesie konfiguracji i kompilacji. Potrzebuję dwóch przepisów:
- aby raz skonfigurować / skonfigurować środowisko kompilacji
- kroki, które należy wykonać po edycji dowolnego pliku źródłowego tego modułu jądra (
.c
i.h
) i przekonwertowaniu tej edycji na nowy moduł jądra (.ko
)
Użyte źródła to:
- zbuduj jeden moduł jądra - wyszukiwarka Google
- http://www.linuxquestions.org/questions/linux-kernel-70/rebuilding-a-single-kernel-module-595116/
- https://stackoverflow.com/questions/8744087/how-to-recompile-just-a-single-kernel-module
- http://www.pixelbeat.org/docs/rebuild_kernel_module.html
- Jak zbudować pojedynczy moduł jądra w drzewie?
- http://ubuntuforums.org/showthread.php?t=1153067
- http://ubuntuforums.org/showthread.php?t=2112166
- http://ubuntuforums.org/showthread.php?t=1115593
- zbuduj jeden moduł jądra ubuntu - wyszukiwarka Google
- „make + single + kernel + module” - Zapytaj Ubuntu
- „make + kernel + module” - Zapytaj Ubuntu
- Mój plik makefile powoduje: Brak potrzeby, aby docelowy `arch / x86 / tools / relocs.c 'był potrzebny
- „Niepoprawny format modułu” - Zapytaj Ubuntu
- Instalacja sterownika: kompilowanie kodu źródłowego dla nowszego jądra
- Modprobe: „Nieprawidłowy format guzka”, ale działa po insmod
- „Zrzut wersji symbolu” „Brak” - wyszukiwarka Google
- https://stackoverflow.com/questions/9425523/should-i-care-that-the-symbol-version-dump-is-missing-how-do-i-get-one
- https://askubuntu.com/questions/369051/where-can-i-find-the-corresponding-module-symvers-and-config-files-for-ubutunu
- „brak wersji symbolu dla module_layout” podczas próby załadowania usbhid.ko
- Uszkodzone łącza w folderze plików nagłówkowych systemu Linux
- „make modules_install” - Zapytaj Ubuntu
- „modules_install” - Zapytaj Ubuntu
- Pusty katalog kompilacji w niestandardowo skompilowanym jądrze
- https://askubuntu.com/questions/444345/not-able-to-see-pr-info-output
- https://askubuntu.com/questions/472496/in-which-directory-are-the-kernel-source-files-and-how-can-i-recompile-it
- Jak mogę skompilować i zainstalować ten załatany plik libata-eh.c?
- „modules_install + depmod” - Zapytaj Ubuntu
- module_install depmod - wyszukiwarka Google
- „make modules_install” - wyszukiwarka Google
- http://www.csee.umbc.edu/courses/undergraduate/CMSC421/fall02/burt/projects/howto_build_kernel.html
- https://unix.stackexchange.com/questions/20864/what-happens-in-each-step-of-the-linux-kernel-building-process
- https://wiki.ubuntu.com/KernelCustomBuild
- http://www.cyberciti.biz/tips/build-linux-kernel-module-against-installed-kernel-source-tree.html
- http://www.linuxforums.org/forum/kernel/170617-solved-make-modules_install-different-path.html
- „przygotuj się” - wyszukiwarka Google
- „make przygotuj” ”skrypty / kconfig / conf --silentoldconfig Kconfig” - wyszukiwarka Google
- http://ubuntuforums.org/showthread.php?t=1963515
- wersja ubuntu „przygotuj” - wyszukiwarka Google
- https://stackoverflow.com/questions/8276245/how-to-compile-a-kernel-module-against-a-new-source
- https://help.ubuntu.com/community/Kernel/Compile
- Jak skompilować moduł jądra?
- Jak dodać niestandardowy sterownik do mojego jądra?
- https://askubuntu.com/questions/426549/compile-and-loading-kernel-module-without-compiling-the-kernel
Odpowiedzi:
Przepis na zbudowanie niestandardowego modułu może wymagać podzielenia na trzy sekcje.
Skonfiguruj raz
Jestem zbyt leniwy, aby skopiować pliki źródłowe sterowników specyficzne dla mvsas; po prostu skopiuj je wszystkie do bieżącego katalogu roboczego. Jeśli pojawi
apt-get
się komunikat o błędzie dotyczący brakujących źródłowych identyfikatorów URI, patrz uwaga 4 na dole.Spowoduje to przygotowanie niektórych plików niezbędnych do zbudowania modułu jądra.
Każda wersja jądra
Spowoduje to zainstalowanie nagłówków i pliku konfiguracyjnego jądra Ubuntu dla tej wersji jądra w / lib / modules.
Zapobiega to pojawieniu się komunikatu „ brak wersji symbolu dla modułu_głównego ” podczas ładowania modułu z insmod lub modprobe.
Spowoduje to zmianę nazwy oryginalnego modułu jądra (kompilacji Ubuntu), aby mieć pewność, że załadowany zostanie niestandardowy poprawiony.
Każda edycja
Są do edycji.
Spowoduje to skompilowanie i skompilowanie
.ko
pliku modułu jądra przy użyciu konfiguracji jądra z twojej podstawowej dystrybucji Ubuntu w postaci przechowywanej w/lib/modules/$(uname -r)/
.Spowoduje to zainstalowanie modułu jądra
/lib/modules/$(uname -r)/extra/
, nie nadpisując modułu dystrybucji w przypadku, gdy nie zmienisz nazwy pliku modułu jądra dystrybucji. W tym przypadku mvsas będzie również działał depmod .Jeśli spowoduje to jakiekolwiek wyjście, moduł mvsas wymaga
modprobe -r mvsas
najpierw rozładowania za pomocą ( ).To powinno załadować nowy moduł jądra.
Sprawdź dane wyjściowe, aby sprawdzić, czy
/lib/modules/.../extra/mvsas.ko
jest ładowany.Błąd Modprobe: nie można wstawić
W niektórych przypadkach może pojawić się jakiś
modprobe: ERROR: could not insert 'xyz': Unknown symbol in module, or unknown parameter (see dmesg)
czas na pełnym wyjściu modprobe, który widzi, żeinsmod
próbuje załadować moduł z domyślnej lokalizacji jądra. Na przykład:W takim przypadku musisz ręcznie uruchomić depmod i spróbować ponownie załadować moduł:
Notatki
.ko
pliki modułów są znacznie (na przykład 20 razy) większe niż oryginalne pliki modułów rozpowszechniane przez Ubuntu; w takim przypadkumake prepare
krok mógł spowodować utworzenie pliku konfiguracyjnego jądra dla deweloperów systemu Linux, a ty budujesz z katalogu źródłowego. Twój-C
parametr może nie działać zgodnie z oczekiwaniami.make modules_prepare
imake M=scripts/mod
, ale nie sądzę, są one niezbędne do tego przypadku.-C /lib/modules/$(uname -r)/build
ją-C /usr/src/linux-headers-$(uname -r)
apt-get source linux-sources
zwróci błądE: You must put some 'source' URIs in your sources.list
. Aby rozwiązać ten problem, możesz zmodyfikować plik/etc/apt/sources.list
, odznaczając (usuwając wiodący#
z) pierwszydeb-src
wiersz. Przykład Ubuntu 17.10:deb-src http://ie.archive.ubuntu.com/ubuntu/ artful main restricted
. uruchomsudo apt-get update
, a następnie polecenie dostarczy Ci źródła. Zobacz także to pytanie, w którym opisano również metodę GUI do tego celu.źródło
$(uname-r)
jest najwyraźniej nie tak ... Musisz zadzwonić doshell
wbudowanego:$(shell uname -r)
$(shell uname -r)
nie działa . Dlaczego$(uname -r)
tak pozornie się mylisz?echo "search extra built-in" | sudo tee /etc/depmod.d/00-extra.conf
aby zobaczyćdepmod
nowo zaktualizowany plik w.../extra
.