Как вывести список всех загружаемых модулей ядра?

66

Я ищу несколько модулей ядра для загрузки i2c-devи i2c-bcm2708. Но modprobeкоманда возвращает:

sudo modprobe i2c-dev
modprobe: module i2c-dev not found in modules.dep

Как я могу перечислить все доступные модули в системе? В каком каталоге они находятся?

UserK
источник
1
Ядро не скомпилировало этот i2c-dev. Вы не нашли этот модуль. Модули ядра расположены в / lib / modules / 'kernel-version' / drivers. Когда вы ищете драйверы Linux.
Вечер
Вы можете проверить / boot / config-'kernel-version 'и прочитать этот файл конфигурации. Вы должны знать, какие модули linux загружены или являются модульными, или во время компиляции ядра модуль i2c-dev не включался.
Вечер

Ответы:

77
  • По умолчанию modprobeзагружает модули из подкаталогов, расположенных в /lib/modules/$(uname -r)каталоге. Обычно все файлы имеют расширение .ko, поэтому вы можете перечислить их с помощью

    find /lib/modules/$(uname -r) -type f -name '*.ko'
    

    или с учетом сжатых файлов:

    find /lib/modules/$(uname -r) -type f -name '*.ko*'
    
  • Однако для успешной загрузки модуля modprobeнужны его зависимости, указанные в файле /lib/modules/$(uname -r)/modules.dep(и соответствующая двоичная версия modules.dep.bin). Если какой-либо модуль присутствует в системе, но отсутствует в списке, вы должны выполнить команду, depmodкоторая сгенерирует такие зависимости и автоматически подключит ваш модуль к modules.depи modules.dep.bin.

  • Кроме того, если модуль успешно загружен, он будет указан в файле /proc/modules(также доступен через команду lsmod).

jimmij
источник
3
Файлы модулей Redhat 7 сжимаются в .xz (не уверен, что это из-за версии ядра или версии ОС ... если кто-то может это мне уточнить?), Поэтому я думаю, что вы не можете найти их с помощью команды jimmij find. Используйте вместо этого find /lib/modules/$(uname -r) -type f -name *.ko*
Pozinux
1
@Pozinux Обнаружил то же самое здесь, в Arch linux в 4.13.10, который имеет окончание.gz
Иоганн
1
@posinux: будьте осторожны: оболочка может расширить ваш файл, *.ko*если у вас в текущем каталоге есть файл, соответствующий ему. лучше избегать его между одинарными кавычками: find /lib/modules/$(uname -r) -type f -name '*.ko*'
Оливье Дюлак
10

Введите modprobeи нажмите вкладку, список автозаполнения должен содержать все загружаемые модули

Мартин Хансен
источник
11
это не работает для некоторых систем
автомат
5

Существует lsmodкоманда kmodпакета в Arch Linux , что перечислено и показывает статус модулей ядра Linux , который содержит другие полезные команды , такие как modinfo, rmmod modprobeтоже.

Для л ист все двоичные файлы , предоставляемые пакетом вы можете ввести:

pacman -Ql kmod | grep /bin/ --color=always

, И вы также можете проверить на O wner пакет двоичного с pacman -Qo lsmod.


Qпереключатель в д uery локально установленные пакеты ( в отличие от Sв ы Синхронизировать, то есть. , чтобы проверить удаленно).


источник
2
Там , где это важно подчеркнуть , что lsmodтолько показывает уже загруженные модули. У автора этого потока возникла проблема с загрузкой модуля, которого не было на карте загружаемых модулей ядра. Кроме того, это решение применимо только к archlinux. Это может быть не распространение автора и не может решить проблему для других.
Akendo
@Akendo lsmodтакже доступен в Ubuntu, по крайней мере. Однако я согласен, что это не решает проблему ОП.
Мелебиус
2

Я предпочитаю использовать depmod. С помощью команды: depmod -av|grep MOD_NAMEваша система сгенерирует файлы modules.dep / map и выполнит через нее grep. Этот -vпараметр важен для многословности и -aдля обеспечения того, чтобы все возможные модули из /lib/modules/использовались для файла modules.dep.

Таким образом, можно убедиться, что запрашиваемый модуль ядра сопоставлен с ядром как загружаемый. Когда модуль ядра желаний не указан в выводе, вы знаете, что ядро ​​его не найдет.

Akendo
источник