Создание пакета DKMS для модуля ядра, зависимость от заголовка ядра
Фон
Я разработал драйвер устройства Linux (ASoC). Теперь я хотел бы выпустить его как пакет DKMS. Целевой машиной является Raspberry Pi с Raspbian.
проблема
Мой исходный код зависит от заголовочного файла из Linux /sound/soc/codecs/
каталог. Этот файл не существует на целевой машине.
Обходной путь 1
Я мог бы добавить требуемый заголовочный файл в мой пакет DKMS. Но это не так, потому что я думаю, что я должен использовать заголовочный файл из исходного кода ядра, для которого создается модуль (например, 4.6, 4.7 ...).
Обходной путь 2
Я мог бы сказать конечному пользователю загрузить весь исходный код ядра (apt-get source ...
) до сборки модуля. Но установка более 700 МБ только из-за одного заголовочного файла тоже не подходит. Посылка kernel-headers-
не содержит файл, который мне нужен.
Вопрос
Есть ли лучшее решение, чем два обходных пути? Что ты предлагаешь?
1 ответ
Поскольку заголовок содержит объявления, которые не коррелируют с внутренними компонентами ядра, вы можете безопасно взять заголовок из одной версии ядра, скопировать его в свой пакет и использовать для сборки против любой версии ядра. Нет необходимости в дополнительном требовании от пользователя иметь этот заголовок на своем компьютере.
Конечно, лучше сохранить атрибуты для этого заголовка, но, поскольку вы используете DKMS, ваш проект, вероятно, совместим с лицензией ядра Linux (GPL).
Другой подход - использовать заголовок из ядра, для которого вы строите, - более сложен с точки зрения пользователя. Поэтому его следует использовать только тогда, когда это действительно необходимо. Например, когда заголовок в вопросе описывает некоторые внутренние компоненты ядра, которые вы используете в своем модуле. В этом случае вы не можете использовать один (предварительно скопированный) файл для всех целевых ядер.