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

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

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

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

14
задан 21.01.2020, 09:48

5 ответов

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

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

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

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

enter image description here

  • На приведенном выше снимке экрана * указывает встроенную в драйвере, а M обозначает модуль.
  • Поддержка устройств с обратной связью, которая часто необходима для загрузки системы, встроена по умолчанию.
  • Низкоскоростной драйвер USB (USB 1.0) также встроен по умолчанию, чтобы позволить вам загружаться с USB-накопителя, но здесь я изменил его на модуль.
10
ответ дан 21.01.2020, 09:48
  • 1
    Спасибо, который помогает много. Я предполагаю, что получу лучшее понимание этого, когда я в конечном счете сделаю сборку ядра с нуля для меня. – Mark Baker 21.01.2020, 09:48

См. Содержимое файла / 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
ответ дан 21.01.2020, 09:49
  • 1
    ??? Не уверенный, что OP, как предполагается, делает. Он, как предполагается, выполняет первую строку в терминале? Это могло быть ответом, но уточните немного? – Usman Tahir 21.01.2020, 09:49
ls /sys/module

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

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

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

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

0
ответ дан 21.01.2020, 09:49

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

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

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

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

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

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

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

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

1
ответ дан 21.01.2020, 09:50
  • 1
    да, в основном необходимо перекомпилировать его из источника, если Вы хотите отредактировать, и/или добавить драйверы необходимо восстановить его, возможно, просто использовать тот же .config файл и изменить его, как Вам нужно. – OddDev 21.01.2020, 09:50
  • 2
    It' s мой опыт, что модули отключены для встроенного Linux для скорости и причин размера, и что ядра для таких устройств часто содержат драйверы из дерева и основаны на некотором случайном employee' s ПК без преимущества управления исходным кодом. Удача с этим. – mel3kings 21.01.2020, 09:50
  • 3
    Таким образом на ядре, настроенном без поддержки модуля (поскольку мой, кажется), я был бы неспособен установить какие-либо драйверы в форме .ko файлов для использования дополнительных аппаратных средств? – user3112014 21.01.2020, 09:51
  • 4
    зависит, если он использовал ядро ванили (без не чего иного как кода первоисточника), Вы соглашаетесь только с .config, и можно воспроизвести то же ядро только с ПК, однако если он использовал ядро ванили + некоторые патчи или модификации, Вам нужно это дополнительная информация, пользовательский Make-файл можно было также рассмотреть как следующую переменную как любые другие модификации к стандартному набору инструментальных средств и в целом к стандартному процессу сборки. – Carlos Espeleta 21.01.2020, 09:51
  • 5
    Таким образом, чтобы сделать это, я должен был бы получить источник ядра от поставщика, скомпилировать его сам с корректными модификациями в .config файл тогда, я буду хорош установить другие драйверы? – Pankaj Shinde 21.01.2020, 09:52

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

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

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

3
ответ дан 21.01.2020, 09:51
  • 1
    Да Ваш последний абзац - то, что мотивировало мой вопрос быть честным. Спасибо за ответ – virus 21.01.2020, 09:51

Теги

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