Могу ли я определить, было ли мое специально созданное ядро ​​собрано с поддержкой модулей?

Могу ли я определить, было ли мое специально созданное ядро ​​собрано с поддержкой модулей?

Мне предоставили минимальную установку Linux от поставщика. Из ответа на предыдущий вопрос я узнал, что можно собрать ядро ​​с поддержкой модулей или без нее. У меня есть устройство CANBUS, которое мне нужно подключить, и которое поставляется с драйверами в виде файлов .ko. Я хотел бы иметь возможность установить их с помощью предоставленных скриптов установки, но сначала мне нужно узнать, было ли мое ядро ​​собрано с поддержкой модулей — возможно ли это определить из командной строки??

При запуске lsmodон ничего не возвращает, поэтому я знаю, что на данный момент там нет файлов .ko, но означает ли это, что ядро ​​не позволит мне установить файл .ko?

решение1

Если у вас есть /procфайловая система, файл /proc/modulesсуществует тогда и только тогда, когда ядро ​​скомпилировано с поддержкой модулей. Если файл существует, но пуст, ваше ядро ​​поддерживает модули, но в данный момент ни один из них не загружен. Если файл не существует, ваше ядро ​​не может загрузить ни один модуль.

Технически возможно иметь поддержку загружаемого модуля без /proc. Вы можете проверить наличие системных вызовов init_moduleи delete_moduleв двоичном файле ядра. Это может быть нелегко, если у вас есть только сжатый двоичный файл (например, vmlinuzили uImage). СмотритеКак распаковать vmlinuz в vmlinux?для vmlinuz. После того, как вам удалось распаковать большую часть ядра, найдите строку sys_init_module.

Обратите внимание, что если модули поддерживаются, вам в любом случае понадобятся дополнительные файлы для компиляции собственных модулей:заголовки ядра. Это заголовочные файлы C ( *.h), некоторые из которых генерируются при компиляции ядра (поэтому вы не можете просто взять их из исходного кода ядра). СмотритеЧто содержит дерево исходников ядра? Связано ли это с заголовками ядра Linux?

решение2

Большинство дистрибутивов хранят текстовый файл с конфигурацией ядра где-то. В системе Debian вы найдете его в /boot/config-<kernel_version>.

Затем вы можете просто запустить grepэтот файл:

grep CONFIG_MODULES /boot/config-<kernel_version>

Связанный контент