Загрузка встроенного драйвера Linux

Я разрабатываю драйвер устройства для встроенного Linux (ARM). Как я могу скомпилировать KO-файл, созданный как часть ядра, таким образом, чтобы модуль загружался при загрузке?

это первый раз, когда мне нужно скомпилировать драйвер в ядро, а не как загружаемый модуль. поэтому я не знаю, как это сделать.

Спасибо, Рамон.


person stdcall    schedule 10.08.2011    source источник
comment
Вы строите вне дерева ядра, как описано в главе 2 Драйверы устройств Linux 3ed? Если вам не нужен статически связанный драйвер, вы можете посмотреть на modprobe для автоматической загрузки вашего модуля при загрузке, см .: modprobe(8) и modprobe.conf(5) страницы руководства.   -  person Marc Butler    schedule 11.08.2011
comment
Я строю внутри дерева ядра. Я не хочу загружать его как модуль с помощью сценария, я хочу, чтобы он был статическим с ядром, как и другие поддерживаемые драйверы (например, USB, ETHERNET)   -  person stdcall    schedule 11.08.2011


Ответы (2)


Что касается вашего первого вопроса, я предполагаю, что вы хотите статически встроить драйвер в образ ядра (а не как модуль). Сначала вы выбираете каталог в каталоге драйверов, в который вы хотите поместить файлы драйверов. Предположим, вы хотите поместить свои файлы в drivers/char/. Скопируйте свои файлы в этот каталог. В каталоге drivers/char/ будет файл Kconfig, откройте его и добавьте такую ​​запись перед endmenu.

config MYDRIVER
    bool "This is a driver for something"
    default n
    help
      This is a test driver.

Сохраните файл и откройте Makefile в том же каталоге. Перейдите в конец файла и добавьте следующую запись.

     obj-$(CONFIG_MYDRIVER)            += mydriver.o

Вот и все, что вы добавили файл в дерево ядра. Теперь, как обычно, сделайте make menuconfig и выберите MYDRIVER.

Дополнительную информацию см. В этой статье о компиляции ядра.

person rulingminds    schedule 11.08.2011
comment
Обратите внимание, что ссылка ведет на собственный сайт автора (хотя, похоже, это хорошая статья). - person agf; 12.08.2011
comment
Ссылка на статью о компиляции ядра теперь находится на другой странице. Есть ли обновленная ссылка? - person Rich; 23.10.2012

Вам необходимо собрать драйвер устройства как встроенный. Вы можете вручную отредактировать файл ядра .config и заменить "= m" на "= y" для параметра CONFIG, принадлежащего вашему модулю, или использовать make menuconfig для измените <M> на <*> для вашего драйвера устройства.

before -> <M> Your Device Driver Name Here
after  -> <*> Your Device Driver Name Here
person Jason Young    schedule 10.08.2011
comment
Это то, что я думал, но я не знал, был ли это способ сделать это. - person stdcall; 11.08.2011
comment
Еще один небольшой вопрос ... Если мне удалось статически связать модуль с ядром, могу ли я узнать, в каком порядке он инициализирован (до и после каких модулей ...)? - person stdcall; 11.08.2011
comment
stackoverflow.com / questions / 5669647 / кажется имеющим отношение к вашему вопросу. Короче говоря, порядок инициализации модуля определяется 1) порядком связывания модулей при сборке ядра и 2) типом initcall, используемым для модуля (см. Inlude / linux / init.h). - person Jason Young; 11.08.2011