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

14

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

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

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

mathematician1975
источник
superuser.com/questions/287371/…
Сиро Сантилли 新疆 16 中心 法轮功 六四 事件

Ответы:

10

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

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

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

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

введите описание изображения здесь

  • На приведенном выше снимке экрана *обозначает встроенный драйвер, а Mобозначает модуль.
  • Поддержка устройств с обратной связью, которая часто необходима для загрузки системы, встроена по умолчанию.
  • Низкоскоростной драйвер USB (USB 1.0) также встроен по умолчанию, что позволяет загружаться с USB-накопителя, но здесь я изменил его на модуль.
иш
источник
Спасибо, что очень помогает. Думаю, я лучше пойму это, когда в конце концов сделаю сборку ядра для себя.
mathematician1975
3

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

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

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

earthmeLon
источник
1
Да, ваш последний абзац мотивировал мой вопрос быть честным. Спасибо за ответ
mathematician1975
1

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

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

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

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

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

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

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

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

user827992
источник
Таким образом, в ядре, настроенном без поддержки модулей (как, кажется, у меня), я не смог бы установить какие-либо драйверы в виде файлов .ko для использования дополнительного оборудования?
mathematician1975
да, в основном вам нужно перекомпилировать его из исходного кода, если вы хотите отредактировать и / или добавить драйверы, вы должны перестроить его, возможно, просто используйте тот же .configфайл и измените его, как вам нужно.
user827992
Поэтому, чтобы сделать это, мне нужно получить исходный код ядра у поставщика, скомпилировать его самостоятельно с правильными изменениями в файле .config, тогда я буду хорошо устанавливать другие драйверы?
mathematician1975
зависит, если он использовал ядро ​​vanilla (не более, чем исходный код), у вас все в порядке с .config, и вы можете воспроизвести то же самое ядро ​​только на вашем компьютере, однако, если он использовал ядро ​​vanilla + некоторые исправления или модификации вам нужна эта дополнительная информация, пользовательский Makefile также может рассматриваться как релевантная переменная, как и любые другие модификации стандартного набора инструментов и в целом стандартного процесса сборки.
user827992
По моему опыту, модули для встроенного Linux отключены по соображениям скорости и размера, и что ядра для таких устройств часто содержат драйверы из дерева и построены на компьютере какого-то случайного сотрудника без контроля исходного кода. Удачи с этим.
Стивен М. Уэбб
0

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

например, для поиска определенного модуля

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

Документация / 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.
Андрей
источник
??? Не уверен, что ОП должен делать. Он должен запустить первую линию в терминале? Это может быть ответом, но не могли бы вы уточнить немного?
anonymous2
0
ls /sys/module

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

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

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

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

Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件
источник