Какие драйверы устройств встроены в ядро?

Недавно я установил встроенный Linux, поставляемый поставщиком, на аппаратное устройство. Когда я запустил lsmod в командной строке устройства, ответ был пустым. Я был уверен, что это означает, что драйверы для оборудования, работающего на устройстве, были встроены в ядро, а не в файлы .ko. Мой вопрос таков: как происходит этот процесс?

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

Меня слегка смущает весь процесс, и я был бы благодарен за разъяснения, так как у меня есть ощущение, что я могу смотреть на ситуацию неправильно.

14
задан 14 July 2012 в 02:39

5 ответов

При компиляции ядра вы получаете конфигурирование , какие компоненты установлены. Не только это, но вы можете выбрать, встроены они в ядро ​​или нет, или они являются модулем .

Например, многие люди используют файловую систему ext2 в своем разделе / boot . Из-за этого ядро ​​должно быть способно читать файловые системы ext2 во время загрузки. Для этого модуль ext2 встроен в само ядро.

Теперь представьте себе количество доступных модулей. Не имеет смысла встраивать их все в ваше ядро, не так ли? Вот почему вы можете создавать их как отдельные модули .ko и загружать их по желанию.

0
ответ дан 14 July 2012 в 02:39

См. Содержимое файла / lib / modules / $ (uname -r) /modules.builtin

, например. искать определенный модуль

grep <module> /lib/modules/$(uname -r)/modules.builtin

Documentation / kbuild / kbuild.txt

modules.builtin
--------------------------------------------------
This file lists all modules that are built into the kernel. This is used
by modprobe to not fail when trying to load something builtin.
0
ответ дан 14 July 2012 в 02:39

Это зависит от того, как вы настроили сборку ядра Linux.

В процессе компиляции вы обычно можете:

  • скомпилировать ядро ​​с поддержкой модуля или без него (часто это происходит с поддержкой модуля)
  • скомпилировать драйвер как модуль или как встроенное программное обеспечение прямо в ядро ​​

, чтобы понять, что такое файл .ko для https://stackoverflow.com/questions/10476990/difference-between-o-and -ko-file

Причина, по которой у вас пустой вывод на lsmod, заключается в том, что у вас монолитное ядро.

Быстрый способ перечисления всех ваших модулей (если они присутствуют) заключается в запуске этой команды.

find /lib/modules/*/ -type f -iname '*.ko' | less

обратите внимание на использование less, вы можете использовать любой пейджер или перенаправить выведите туда, куда хотите.

0
ответ дан 14 July 2012 в 02:39

Драйверы ядра, которые считаются критическими для загрузки ядра, обычно встроены в ядро, в то время как другие драйверы оборудования и т. Д. Создаются в виде модулей или файлов .ko .

Модули .ko обычно хранятся в каталоге /lib вашего корневого раздела. Чтобы использовать любой из них, ядро ​​должно сначала иметь возможность обнаружить и получить доступ к базовому устройству хранения, а затем получить доступ к его файловой системе. Поэтому можно с уверенностью предположить, что ядро ​​без встроенной поддержки SATA / SCSI и поддержки ext2 / 3/4 в действительности не загрузится;)

Вы можете переключить большинство встроенных драйверов ядра в форму модуля , Команда ядра Ubuntu решает, следует ли изменить конфигурацию по умолчанию команды ядра Linux и включить / исключить дополнительные встроенные драйверы для загружаемых стандартных образов ядра.

Если вы собираете свое собственное ядро, вы можете сделать то же самое:

enter image description here

  • На приведенном выше снимке экрана * указывает встроенную в драйвере, а M обозначает модуль.
  • Поддержка устройств с обратной связью, которая часто необходима для загрузки системы, встроена по умолчанию.
  • Низкоскоростной драйвер USB (USB 1.0) также встроен по умолчанию, чтобы позволить вам загружаться с USB-накопителя, но здесь я изменил его на модуль.
0
ответ дан 14 July 2012 в 02:39
ls /sys/module

, кажется, содержит все встроенные и внешние модули.

Но он также содержит некоторые записи, которые на самом деле не являются модулями: https://unix.stackexchange.com/questions/225706/are-modules-listed-under-sys-module-all-the- Загруженные модули

TODO: прочитайте исходный код и более точно поймите, что там находится.

Преимущество этого метода в том, что вы не можете найти конфигурацию ядра в /boot или /proc/config.gz.

0
ответ дан 14 July 2012 в 02:39

Другие вопросы по тегам:

Похожие вопросы: