Компиляция драйвера как части ядра, а не как модуля - PullRequest
8 голосов
/ 08 декабря 2011

Я пытаюсь создать минималистичный Linux для встроенного устройства.Это означает необходимость компиляции ядра и драйверов.Один драйвер написан непосредственно для платы устройства его создателем, поэтому это не репозиторий.Он может быть скомпилирован как модуль ядра.

Однако из-за неизменной природы Linux и необходимости крайне малого использования памяти я не хочу использовать модули.Я хочу, чтобы все драйверы были встроены в ядро.И все драйверы, поставляемые с ядром, я установил таким образом.

Так что моя проблема в том, как скомпилировать этот специальный драйвер для ядра?

Все поиски не дали мне решения - всетолько о компиляции в виде модулей.

Спасибо за любую помощь.

1 Ответ

7 голосов
/ 08 декабря 2011

Вы определенно должны будете поместить исходный код драйвера в дерево исходных текстов ядра и обновить make-файл, чтобы включить его.Вы можете увидеть, как это работает в шагах с 1.1 по 1.3 здесь .

Если программное обеспечение уровня пользователя общается с драйвером устройства, оно, вероятно, делает это с помощью системных вызовов.Выполните поиск по источнику драйвера, ищущего asmlinkage, если вы найдете какой-либо из них, тогда вы ищете добавление некоторых системных вызовов.В оставшейся части вышеприведенного документа объясняется, как их настроить.Вам придется изменить как минимум два файла (и они могут немного отличаться в зависимости от версии вашего ядра).

Если драйвер устройства общается с ядром напрямую, мы имеем дело с прерываниями, отображением памятиI / O или DMA.Если честно, я не знаю, могут ли они быть обработаны в исходном файле для вашего драйвера (в этом случае вы хорошо работаете), или же они требуют изменения других файлов в дереве исходных текстов. Руководство по программированию модуля ядра Linux - хороший ресурс для таких вещей.

Удачи

...