Во время разработки вы обычно используете insmod для загрузки модуля, и ему должен быть указан путь к этому самому модулю:
$ insmod filename [module-options]
Это низкоуровневая форма загрузки модулей, которая является основой для других методов загрузки.
С другой стороны, есть modprobe, который в основном используется сисадминами или в производственной системе.
modprobe – это умная команда, которая анализирует файл modules.dep, чтобы сначала загрузить зависимости, прежде чем загрузить данный модуль.
Она автоматически обрабатывает зависимости модулей, как это делает менеджер пакетов:
$ modprobe module-name
insmod | modprobe |
Загружает модуль, заданный как ‘insmod /path/to/module.ko’. | Загружает модуль только в /lib/modules/$(uname -r). ‘modprobe /home/test/hello.ko’ не будет работать |
Зависимости, если они присутствуют, не загружаются | modprobe вычисляет зависимости, загружает зависимости, а затем основной модуль |
Как modprobe вычисляет зависимости?
Modprobe зависит от инструмента depmod для вычисления зависимостей.
depmod вычисляет зависимости всех модулей, присутствующих в папке /lib/modules/$(uname -r), и помещает информацию о зависимостях в файл /lib/modules/$(uname -r)/modules.dep.
Например, kernel/drivers/net/wireless/admtek/adm8211.ko: kernel/net/mac80211/mac80211.ko kernel/net/wireless/cfg80211.ko kernel/drivers/misc/eeprom/eeprom_93cx6.ko
В этом случае сначала загружается eeprom_93cx6.ko, cfg80211.ko, а затем adm8211.ko.
Модули загружаются справа налево и удаляются слева направо.
Поэтому при удалении удаляется adm8211.ko, затем cfg80211.ko и, наконец, eeprom_93cx6.ko.
Мы можем повторно загрузить файл modules.dep, выполнив команду “depmod -a”.
Заключение
insmod – это команда системного администрирования для загрузки имени файла модуля в ядро.
Более простая, но менее гибкая, чем команда modprobe.
Сообщения об ошибках от insmod могут быть нечеткими, поскольку ядро выполняет операции с модулями внутри ядра и поэтому отправляет информацию об ошибках в журнал ядра вместо стандартного вывода; см. dmesg.
Информация в файлах module.* используется командой modprobe для поиска модуля по имени, а не по полному пути. modprobe имеет много других возможностей, которые описаны в руководстве.
Информация о зависимостях модулей также используется менеджерами устройств, в частности udev.
При обнаружении нового оборудования, например, нового USB-устройства, демон udevd получает предупреждение и передает информацию о производителе, а также считывает с оборудования идентификаторы продукта. udevd сканирует файлы зависимостей модулей в поисках модуля, который зарегистрировал эти идентификаторы.
Если такой модуль найден, он загружается с помощью modprobe.