Я недавно установил поставляемый поставщиком встроенный Linux на аппаратное устройство. Когда я запускал lsmod
в командной строке устройства, ответ был пустым. Я был уверен, что это означает, что драйверы для оборудования, работающего на устройстве, были встроены в ядро, а не в файлы .ko. Мой вопрос таков: как происходит этот процесс?
Постепенно ли интегрируется поддержка ядра в последующие версии в ядро, заменяя таким образом файлы .ko? Файл .ko просто используется для поддержки нового оборудования, которое не имеет встроенной поддержки ядра в момент выпуска? В моих ограниченных знаниях я думал, что все аппаратные драйверы были в форме файлов .ko, но ясно, что это неправильно.
Я немного смущен всем процессом и был бы благодарен за разъяснение, поскольку у меня есть чувство, что я могу смотреть на ситуацию неправильно.
Ответы:
Драйверы ядра, которые считаются критически важными для загрузки ядра, обычно встроены в ядро, тогда как драйверы другого оборудования и т. Д. Создаются в виде модулей или файлов .ko .
В .ko модули обычно хранятся под
/lib
папку на корневом разделе. Чтобы использовать любой из них, ядро должно сначала быть в состоянии обнаружить и получить доступ к базовому устройству хранения, а затем получить доступ к его файловой системе. Поэтому можно предположить, что ядро без встроенной поддержки SATA / SCSI и поддержки ext2 / 3/4 не загрузится;)Вы можете переключить большинство встроенных драйверов ядра в форму модуля. Команда ядра Ubuntu решает, следует ли изменить конфигурацию по умолчанию команды ядра Linux и включить / исключить дополнительные встроенные драйверы для загружаемых стандартных образов ядра.
Если вы собираете свое собственное ядро, вы можете сделать то же самое:
*
обозначает встроенный драйвер, аM
обозначает модуль.источник
При компиляции ядра вы можете настроить, какие компоненты установлены. Не только это, но вы можете выбрать, встроены они в ядро или нет, или они являются модулем .
Например, многие люди используют файловую систему ext2 в своем разделе / boot . Из-за этого ядро должно быть способно читать файловые системы ext2 во время загрузки. Для этого модуль ext2 встроен в само ядро.
Теперь представьте количество доступных модулей. Не имеет смысла встраивать их все в ваше ядро, не так ли? Вот почему вы можете создавать их как отдельные модули .ko и загружать их по желанию.
источник
Это зависит от того, как вы настроили вашу сборку ядра Linux.
В процессе компиляции вы обычно можете:
чтобы понять, что такое файл .ko для /programming/10476990/difference-between-o-and-ko-file
Причина, по которой у вас пустой вывод,
lsmod
заключается в том, что у вас монолитное ядро.Быстрый способ перечисления всех ваших модулей (если они присутствуют) - с помощью этой команды
обратите внимание на использование
less
, вы можете использовать каждый пейджер, который вы хотите, или перенаправить вывод, где вы хотите.источник
.config
файл и измените его, как вам нужно.Смотрите содержимое файла / lib / modules / $ (uname -r) /modules.builtin
например, для поиска определенного модуля
Документация / kbuild / kbuild.txt
источник
Кажется, содержит все встроенные и внешние модули.
Но он также содержит некоторые записи, которые на самом деле не являются модулями: /unix/225706/are-modules-listed-under-sys-module-all-the-loaded-modules
ТОДО: прочитайте исходный код и более точно поймите, что там находится.
Преимущество этого метода в том, что вы не можете найти конфигурацию ядра в
/boot
или/proc/config.gz
.источник