
Есть ли различия между insmod и modprobe?
решение1
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
) также распознаются, но поскольку эти модули загружаются по умолчанию, нет смысла в modprobing такого рода модулей.
insmod
с другой стороны принимает пути к файлам. Модуль не обязательно должен находиться в /lib/modules/$(uname -r)
, но зависимости не загружаются автоматически. Это нижняя программа, используемая modprobe
для загрузки модулей.
Другие программы, связанные с модулями: rmmod
и modinfo
.
rmmod
удаляет имя ядра на основе имени из /proc/modules
. Это имя не обязательно должно совпадать с переданным modprobe
(для nvidia-current
файла это, nvidia
например).
modinfo
принимает имя файла или имя файла без .ko
суффикса в формате /lib/modules/$(uname -r)
.
решение2
За man insmod
:
Большинству пользователей вместо этого придется использовать modprobe, который более умен и может обрабатывать зависимости модулей.
решение3
modprobe
— интеллектуальная команда, она ищет зависимости при загрузке модуля. Предположим, если я загрузил модуль, в котором есть символы, определенные в каком-то другом модуле (этот путь к модулю указан внутри основного модуля). Итак, modprobe
загружает основной модуль и зависимый модуль.
Но если insmod
используется, то зависимость не будет загружена, и, следовательно, будут выдаваться ошибки компиляции, такие как Unresolved symbols
. В этом случае нам придется вручную искать зависимые модули и загружать их, чтобы устранить ошибки.
решение4
Команда modprobe предлагает больше возможностей, чем более базовые утилиты insmod и rmmod. modprobe разумно добавляет или удаляет модуль из ядра Linux. Обратите внимание, что для удобства нет разницы между _ и - в именах модулей (выполняется автоматическое преобразование подчеркивания). modprobe ищет в каталоге модулей /lib/modules/ uname -r
все модули и другие файлы, за исключением дополнительных файлов конфигурации в каталоге /etc/modprobe.d (некоторые дистрибутивы используют вместо этого файл /etc/modprobe.conf).