Które sterowniki urządzeń są wbudowane w jądro?

14

Niedawno zainstalowałem dostarczonego przez producenta wbudowanego linuksa na urządzeniu sprzętowym. Kiedy uruchomiłem lsmodw 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.

matematyk 1975
źródło
superuser.com/questions/287371/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

10

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 /libkatalogu 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:

wprowadź opis zdjęcia tutaj

  • Na powyższym zrzucie ekranu *wskazuje wbudowany sterownik, a Mmoduł.
  • Obsługa urządzeń sprzężenia zwrotnego, często niezbędna do uruchomienia systemu, jest domyślnie wbudowana.
  • Sterownik USB o niskiej prędkości (USB 1.0) jest również domyślnie wbudowany, aby umożliwić rozruch z pamięci USB, ale tutaj zmieniłem go na moduł.
ish
źródło
Dzięki, to bardzo pomaga. Wydaje mi się, że lepiej to zrozumiem, kiedy w końcu sami zbuduję jądro od zera.
matematyk
3

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.

EarthmeLon
źródło
1
Tak, twój ostatni akapit motywował moje pytanie do bycia szczerym. Dzięki za odpowiedź
matematyk
1

Zależy to od tego, jak skonfigurowałeś kompilację jądra Linux.

W ramach procesu kompilacji zazwyczaj możesz:

  • skompiluj jądro ze wsparciem dla modułu lub bez (często zawiera wsparcie dla modułu)
  • skompiluj sterownik jako moduł lub jako wbudowane oprogramowanie bezpośrednio do jądra

zrozumieć, co to jest plik .ko dla /programming/10476990/difference-between-o-and-ko-file

Powodem, dla którego masz puste wyjście, lsmodjest to, że masz monolityczne jądro.

Szybkim sposobem wylistowania wszystkich modułów (jeśli są obecne) jest uruchomienie tego polecenia

find /lib/modules/*/ -type f -iname '*.ko' | less

zauważ użycie less, możesz użyć każdego pagera lub przekierować wyjście tam, gdzie chcesz.

użytkownik827992
źródło
Więc w jądrze skonfigurowanym bez obsługi modułu (jak wydaje się moje) nie byłbym w stanie zainstalować żadnych sterowników w postaci plików .ko, aby użyć dodatkowego sprzętu?
matematyk
tak, w zasadzie musisz go ponownie skompilować ze źródła, jeśli chcesz edytować i / lub dodać sterowniki, musisz go odbudować, być może po prostu użyj tego samego .configpliku i zmodyfikuj go w razie potrzeby.
user827992,
Aby to zrobić, musiałbym pobrać źródło jądra od dostawcy, samemu skompilować z poprawnymi modyfikacjami pliku .config, czy będę mógł zainstalować inne sterowniki?
matematyk
zależy, jeśli użył jądra wanilii (bez oryginalnego kodu źródłowego), jesteś w porządku tylko z .config i możesz odtworzyć to samo jądro tylko z komputerem, jednak jeśli użył jądra wanilii + kilka poprawek lub modyfikacji potrzebujesz tych dodatkowych informacji, niestandardowy plik Makefile można również uznać za odpowiednią zmienną, podobnie jak wszelkie inne modyfikacje standardowego łańcucha narzędzi i ogólnie standardowego procesu kompilacji.
user827992,
Z mojego doświadczenia wynika, że ​​moduły są wyłączone dla osadzonego Linuksa, ze względu na szybkość i rozmiar, oraz że jądra takich urządzeń często zawierają sterowniki spoza drzewa i są budowane na komputerach losowych pracowników bez kontroli źródła. Powodzenia z tym.
Stephen M. Webb,
0

Zobacz zawartość pliku / lib / modules / $ (uname -r) /modules.builtin

np. aby wyszukać konkretny moduł

grep <module> /lib/modules/$(uname -r)/modules.builtin

Dokumentacja / kbuild / kbuild.txt

modules.builtin
--------------------------------------------------
This file lists all modules that are built into the kernel. This is used
by modprobe to not fail when trying to load something builtin.
Andrzej
źródło
??? Nie jestem pewien, co powinien zrobić PO. Czy powinien uruchomić pierwszą linię w terminalu? To może być odpowiedź, ale czy mógłbyś rozwinąć tę kwestię?
anonimowy2
0
ls /sys/module

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 /bootlub /proc/config.gz.

Ciro Santilli
źródło