Niedawno zainstalowałem dostarczonego przez producenta wbudowanego linuksa na urządzeniu sprzętowym. Kiedy uruchomiłem lsmod
w linii poleceń urządzenia odpowiedź była pusta. Doprowadzono mnie do przekonania, że oznacza to, że sterowniki sprzętu działającego na urządzeniu zostały wbudowane w jądro, a nie jako pliki .ko. Moje pytanie brzmi: jak przebiega ten proces?
Czy obsługa popularnego sprzętu jest stopniowo integrowana z jądrem w kolejnych wersjach, zastępując w ten sposób pliki .ko? Czy plik .ko jest po prostu używany do obsługi nowego sprzętu, który nie ma obsługi sterowników zintegrowanych z jądrem w momencie wydania? Według mojej ograniczonej wiedzy myślałem, że wszystkie sterowniki sprzętowe mają postać plików .ko, ale najwyraźniej jest to błędne.
Cały proces nieco mnie dezorientuje i byłbym wdzięczny za wyjaśnienia, ponieważ mam wrażenie, że patrzę na sytuację w niewłaściwy sposób.
Odpowiedzi:
Podstawowe sterowniki uważane za krytyczne dla ładowania jądra są zwykle wbudowane w jądro, podczas gdy inne sterowniki sprzętowe itp. Są wbudowane w moduły lub pliki .ko .
W .ko moduły są zwykle przechowywane w
/lib
katalogu na partycji root. Aby użyć któregokolwiek z nich, jądro musi najpierw móc wykryć podstawowe urządzenie pamięci i uzyskać do niego dostęp, a następnie uzyskać dostęp do jego systemu plików. Można więc bezpiecznie założyć, że jądro bez wbudowanej obsługi SATA / SCSI i ext2 / 3/4 tak naprawdę się nie uruchomi;)Możesz przełączyć większość wbudowanych sterowników jądra na moduł. Zespół jądra systemu Ubuntu decyduje, czy zmodyfikować domyślną konfigurację zespołu jądra systemu Linux i uwzględnić / wykluczyć dodatkowe wbudowane sterowniki dla pobranych podstawowych obrazów jądra.
Jeśli zbudujesz własne jądro, możesz zrobić to samo:
*
wskazuje wbudowany sterownik, aM
moduł.źródło
Podczas kompilacji jądra możesz skonfigurować, które komponenty są zainstalowane. Nie tylko, ale możesz zdecydować, czy są one wbudowane w jądro, czy są modułem .
Na przykład wiele osób korzysta z systemu plików ext2 na partycji / boot . Z tego powodu jądro musi być w stanie odczytać systemy plików ext2 podczas rozruchu. Aby to osiągnąć, moduł ext2 jest wbudowany w samo jądro.
Teraz wyobraź sobie liczbę dostępnych modułów. Nie miałoby sensu, aby wszystkie były wbudowane w jądro, prawda? Dlatego możesz zbudować je jako osobne moduły .ko i ładować je do woli.
źródło
Zależy to od tego, jak skonfigurowałeś kompilację jądra Linux.
W ramach procesu kompilacji zazwyczaj możesz:
zrozumieć, co to jest plik .ko dla /programming/10476990/difference-between-o-and-ko-file
Powodem, dla którego masz puste wyjście,
lsmod
jest to, że masz monolityczne jądro.Szybkim sposobem wylistowania wszystkich modułów (jeśli są obecne) jest uruchomienie tego polecenia
zauważ użycie
less
, możesz użyć każdego pagera lub przekierować wyjście tam, gdzie chcesz.źródło
.config
pliku i zmodyfikuj go w razie potrzeby.Zobacz zawartość pliku / lib / modules / $ (uname -r) /modules.builtin
np. aby wyszukać konkretny moduł
Dokumentacja / kbuild / kbuild.txt
źródło
wydaje się zawierać wszystkie wbudowane i zewnętrzne moduły.
Ale wydaje się również, że zawiera niektóre wpisy, które nie są tak naprawdę modułami: /unix/225706/are-modules-listed-under-sys-module-all-the-loaded-modules
DO ZROBIENIA: przeczytaj źródło i lepiej zrozum, co się tam znajduje.
Zaletą tej metody jest to, że nie można polegać na znalezieniu konfiguracji jądra pod
/boot
lub/proc/config.gz
.źródło