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

Ответы:

28

За man insmod:

Большинство пользователей захотят использовать вместо этого modprobe, который является более умным и может обрабатывать зависимости модулей.

8128
источник
2
ах извините, пропустил эту строчку.
РЭШ
39

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).

Lekensteyn
источник
3

modprobeэто интеллектуальная команда, она ищет зависимости при загрузке модуля. Предположим, если я загрузил модуль, в котором есть символы, определенные в каком-то другом модуле (этот путь к модулю указан внутри основного модуля). Итак, modprobeзагружается основной модуль и зависимый модуль.

Но если insmodон используется, он не будет загружать зависимость, и, следовательно, он выдаст ошибки компиляции, такие как Unresolved symbols. В этом случае мы должны вручную искать зависимые модули и загружать их для устранения ошибок.

Шалини Гулерия
источник
0

Полезно упомянуть утилиту modprobe. modprobe, как и insmod, загружает модуль в ядро. Он отличается тем, что смотрит на загружаемый модуль, чтобы увидеть, ссылается ли он на какие-либо символы, которые в данный момент не определены в ядре. Если такие ссылки найдены, modprobe ищет другие модули в текущем пути поиска модулей, которые определяют соответствующие символы. Когда modprobe находит эти модули (которые нужны загружаемому модулю), он также загружает их в ядро. Если вместо этого вы используете insmod в этой ситуации, команда завершится неудачно с сообщением «неразрешенные символы», оставленным в системном журнале

user487054
источник