🐧 В чем разница между insmod и modprobe |

🐧 В чем разница между insmod и modprobe

Статьи

Во время разработки вы обычно используете 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.

 

Добавить комментарий