Правильно экспортировать заголовки Linux, модули - PullRequest
7 голосов
/ 20 сентября 2011

При сборке драйвера ядра из дерева я запускаю make как этот в каталоге драйверов, где KERNELDIR - это либо путь к источнику ядра, либо к заголовкам.

make -C $(KERNELDIR) M=$(PWD) modules

когдапытаясь собрать заголовки самостоятельно, используя:

make headers_install ARCH=i386 INSTALL_HDR_PATH=$(HEADERSDIR)

Я считаю, что экспорт не подходит для сборки модулей (без полного дерева исходного кода ядра). Кажется, что отсутствуют некоторые файлы и папки, такие как Makefile, scripts, include/generated/autoconf.h или include/config/auto.conf и т. д.

Debian делает все в удобной для использования форме, как описано в rules.real, хотя и делает больше, чем описано в Documentation/make/headers_install.txt, что, похоже, не является "стандартным" способом.

Вкратце: как правильно экспортировать заголовки linux, чтобы я мог создавать внешние модули для него?

Ответы [ 2 ]

5 голосов
/ 20 сентября 2011

headers_install предназначен для экспорта набора файлов заголовков, подходящих для использования с точки зрения пространства пользователя. Это пользовательское пространство API ядра. Допустим, вы создаете замечательный новый ioctl со стандартной структурой данных. Это та информация, которую вы не хотите знать в пользовательском пространстве, чтобы программа в пользовательском пространстве могла использовать ваш новый замечательный ioctl.

Но все, что не видно из пользовательского пространства, то есть "приватно" для ядра или, другими словами, внутреннего API, не предоставляется пользовательскому пространству.

Таким образом, чтобы построить модуль из дерева, вам нужно либо полностью сконфигурированное дерево исходников, либо заголовки ядра, упакованные вашим дистрибутивом. Ищите заголовки linux или заголовки linux-kernel пакет на Ubuntu / Debian, например.

2 голосов
/ 20 сентября 2011

Я считаю, что ядро ​​make file target для headers_install предназначено для создания заголовка Linux для производства библиотеки C и цепочки инструментов, а не для того, чтобы позволить собирать из модулей ядра дерева без полностью настроенного исходного кода ядра.

На самом деле, я предполагаю, что построение модулей ядра из дерева без полного исходного кода ядра не поддерживается и фактически является "хаком", создаваемым дистрибутивами.

...