Odpowiedzi:
modprobe
odczytuje moduły z /lib/modules/$(uname -r)/modules.dep.bin
(lub bez .bin
przyrostka, jeśli inny plik nie jest dostępny). Z tego samego pliku ładowane są zależności.
modprobe
akceptuje nazwę .ko
pliku w /lib/modules/$(uname -r)
(np. nvidia-current
dla pliku dkms/nvidia-current.ko
) i aliasy ( modules.alias.bin
). Wbudowane ( modules.alias.bin
) również są rozpoznawane, ale ponieważ te moduły są ładowane domyślnie, nie ma sensu modprobowanie tego rodzaju modułów.
insmod
z drugiej strony akceptuje ścieżki do plików. Moduł nie musi rezydować /lib/modules/$(uname -r)
, ale zależności nie są ładowane automatycznie. Jest to niższy program używany modprobe
do ładowania modułów.
Inne programy związane z modułami to rmmod
i modinfo
.
rmmod
usuwa nazwę jądra na podstawie nazwy z /proc/modules
. Ta nazwa niekoniecznie musi być taka sama jak nazwa przekazana modprobe
(na przykład dla nvidia-current
pliku nvidia
).
modinfo
akceptuje nazwę pliku lub nazwę pliku bez .ko
przyrostka /lib/modules/$(uname -r)
.
modprobe
to inteligentne polecenie, szuka zależności podczas ładowania modułu. Załóżmy, że jeśli załadowałem moduł, który ma symbole zdefiniowane w innym module (ta ścieżka modułu jest podana w module głównym). Tak więc modprobe
ładuje moduł główny i moduł zależny.
Ale jeśli insmod
zostanie użyty, nie załaduje zależności, a zatem spowoduje błędy kompilacji takie jak Unresolved symbols
. W takim przypadku musimy ręcznie poszukać modułu zależnego i musimy go załadować, aby usunąć błędy.
Warto wspomnieć o narzędziu modprobe. Modprobe, podobnie jak insmod, ładuje moduł do jądra. Różni się tym, że sprawdzi moduł, który ma zostać załadowany, aby sprawdzić, czy odwołuje się do symboli, które nie są obecnie zdefiniowane w jądrze. Jeśli zostaną znalezione takie odniesienia, modprobe szuka innych modułów w bieżącej ścieżce wyszukiwania modułów, które definiują odpowiednie symbole. Kiedy modprobe znajdzie te moduły (potrzebne do załadowanego modułu), ładuje je również do jądra. Jeśli zamiast tego użyjesz insmod w tej sytuacji, polecenie zakończy się niepowodzeniem z komunikatem „nierozwiązane symbole” w pliku dziennika systemu