Які драйвери пристроїв вбудовані в ядро?


14

Нещодавно я встановив постачальник вбудованого Linux на апаратний пристрій. Коли я побіг lsmodна командному рядку пристрою, відповідь була порожньою. Мене вважають, що це означає, що драйвери для апаратного забезпечення, що працює на пристрої, були вбудовані в ядро, а не як .ko файли. Моє запитання таке: як цей процес відбувається?

Чи поступово підтримка популярного обладнання вставляється в ядро ​​в наступних версіях, таким чином, замінюючи файли .ko? Чи просто файл .ko використовується для підтримки нового обладнання, яке не має інтегрованої підтримки драйверів ядра на момент випуску? З моїх обмежених знань я вважав, що всі драйвери апаратних засобів мають форму .ko файлів, але явно це неправильно.

Я трохи збентежений цілим процесом і буду вдячний за роз’яснення, оскільки маю відчуття, що, можливо, я дивлюсь на ситуацію не так.


Відповіді:


10

Основні драйвери, які вважаються критичними для завантаження ядра, зазвичай вбудовуються в ядро, тоді як інші драйвери апаратного забезпечення тощо будуються як модулі або .ko файли.

У .ko модулі зазвичай зберігаються під /libпапку на кореневому розділі. Для використання будь-якого з них ядро ​​спочатку має змогу виявити та отримати доступ до базового пристрою зберігання даних, а потім отримати доступ до його файлової системи. Тож можна припустити, що ядро ​​без вбудованої в нього підтримки SATA / SCSI та ext2 / 3/4 насправді не завантажиться;)

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

Якщо ви створюєте власне ядро, ви можете зробити те ж саме:

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

  • На наведеному вище скріншоті *вказується вбудований драйвер, а Mвказується модуль.
  • Підтримка пристроїв циклічного зворотного зв’язку, яка часто важлива для завантаження системи, за замовчуванням вбудована.
  • Низькошвидкісний USB-драйвер (USB 1.0) також вбудований за замовчуванням, щоб ви могли завантажувати USB-накопичувач, але тут я змінив його на модуль.

Дякую, що дуже допомагає. Я думаю, я краще зрозумію це, коли в кінцевому підсумку буду будувати ядро ​​з нуля для себе.
математик1975

3

Складаючи ядро , ви налаштовуєте, які компоненти встановлені. Мало того, але ви можете вибрати, чи вони вбудовані в ядро ​​чи не є модулем .

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

А тепер уявіть кількість доступних модулів. Не було б сенсу, щоб усі вони були вбудовані у ваше ядро, чи не так? Ось чому ви можете створювати їх як окремі модулі .ko і завантажувати їх за бажанням.


1
Так, ваш останній параграф - це те, що мотивувало моє запитання бути чесним. Дякую за відповідь
математик1975

1

Це залежить від того, як ви налаштували свою збірку ядра Linux.

У процесі компіляції зазвичай ви можете:

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

щоб зрозуміти, що таке .ko файл для /programming/10476990/difference-between-o-and-ko-file

Причина, чому у вас порожній вихідний сигнал, lsmodполягає в тому, що у вас є монолітне ядро.

Швидкий спосіб перерахувати всі ваші модулі (якщо вони є) - запустити цю команду

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

Зауважте про використання less, ви можете використовувати кожен пейджер, який ви хочете, або перенаправити вихід, куди ви хочете.


Отже, на ядрі, налаштованому без підтримки модулів (як здається, у мене), я не зможу встановити жодних драйверів у вигляді .ko файлів, щоб використовувати додаткове обладнання?
математик1975

так, в основному вам потрібно перекомпілювати його з джерела, якщо ви хочете відредагувати та / або додати драйвери, вам доведеться його відновити, можливо, просто використовуйте той самий .configфайл і змініть його, як вам потрібно.
користувач827992

Тому для цього мені потрібно буде отримати джерело ядра від постачальника, скомпілювати його з правильними модифікаціями у файл .config, тоді мені буде добре встановити інші драйвери?
математик1975

залежить, якщо він використовував ядро ​​ванілі (без нічого більшого, ніж оригінальний вихідний код), ви все в порядку з просто .config, і ви зможете відтворити те саме ядро ​​тільки з ПК, однак якщо він використовував ванільне ядро ​​+ деякі патчі або модифікації вам потрібна додаткова інформація, користувацький Makefile може також розглядатися як відповідна змінна, як і будь-які інші модифікації стандартної ланцюжка інструментів і взагалі до стандартного процесу збирання.
user827992

Мій досвід вважає, що модулі вимкнено для вбудованого Linux з міркувань швидкості та розміру, а також, що ядра таких пристроїв часто містять нестандартні драйвери та будуються на ПК з випадковими працівниками без переваги контролю джерел. Удачі в цьому.
Стівен М. Уебб

0

Перегляньте вміст файлу / lib / module / $ / unme -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.

??? Не впевнений, що має робити ОП. Він повинен запускати першу лінію в терміналі? Це може бути відповіддю, але ви хочете трохи детальніше розглянути?
анонімний2

0
ls /sys/module

схоже, містить усі вбудовані та зовнішні модулі.

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

TODO: прочитайте джерело і зрозумійте, що саме там поміщається.

Перевага цього методу полягає в тому, що ви не покладаєтесь на те, що зможете знайти конфігурацію ядра під /bootабо /proc/config.gz.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.