Відповіді:
modprobe
читає модулі з /lib/modules/$(uname -r)/modules.dep.bin
(або без .bin
суфікса, якщо інший файл недоступний). З цього ж файлу завантажуються залежності.
modprobe
приймає ім'я .ko
файлу в /lib/modules/$(uname -r)
(наприклад, nvidia-current
для файлу dkms/nvidia-current.ko
) та псевдонімів ( modules.alias.bin
). Вбудовані ( modules.alias.bin
) також розпізнаються, але оскільки ці модулі завантажуються за замовчуванням, немає сенсу в моделюванні такого типу модулів.
insmod
з іншого боку, приймає шляхи до файлів. Модуль не повинен проживати /lib/modules/$(uname -r)
, але залежності не завантажуються автоматично. Це нижча програма, яку використовують modprobe
для завантаження модулів.
Інші програми, пов'язані з модулями, є rmmod
і modinfo
.
rmmod
видаляє ім'я ядра на основі імені з /proc/modules
. Це ім'я не обов’язково повинно бути таким самим, як ім'я, передане modprobe
(для nvidia-current
файлу, nvidia
наприклад, це).
modinfo
приймає ім'я файлу або ім'я без .ko
суфікса в /lib/modules/$(uname -r)
.
modprobe
це інтелектуальна команда, вона шукає залежності під час завантаження модуля. Припустимо, якщо я завантажував модуль, у якого символи визначені в якомусь іншому модулі (цей шлях модуля задається всередині основного модуля). Отже, modprobe
завантажує основний модуль і залежний модуль.
Але якщо insmod
він використовується, він не завантажує залежність, а значить, і надасть помилки компіляції, як-от Unresolved symbols
. У цьому випадку нам доведеться вручну шукати залежний модуль і потрібно їх завантажувати, щоб усунути помилки.
Програму modprobe варто швидко згадати. modprobe, як і insmod, завантажує модуль у ядро. Він відрізняється тим, що він буде дивитись на завантажений модуль, щоб побачити, чи посилається на якісь символи, які не визначені на даний момент у ядрі. Якщо такі посилання знайдені, modprobe шукає інші модулі в поточному шляху пошуку модулів, які визначають відповідні символи. Коли modprobe знаходить ті модулі (які потрібні для завантаження модуля), він також завантажує їх у ядро. Якщо ви використовуєте insmod в цій ситуації, команда не працює з повідомленням "невирішені символи", залишеним у файловому журналі системи