我在kbuild模块文档中找不到关于这一点的任何信息,只有headers_install文档中的间接引用(暗示这是可能的)。
"make headers_install"命令可以在目录的顶层目录下运行内核源代码(或使用标准的树外构建)。
我有一个树外内核模块和一个相关的头文件(我有一个IOCTL的#定义),我想提供这个头文件作为模块安装的一部分。内核模块提供头文件(供用户空间使用)的树内方式似乎是将它们放置在include/linux/中。我要怎么做才能使它在树外有效呢?
好吧,这似乎是另一个我没有阅读所有手册的情况…所需的手册是kbuild的makefiles文档…
内核包含一组导出到用户空间的头文件。许多头文件可以按原样导出,但其他头文件需要一个在为用户空间做好准备之前进行最少的预处理。预处理完成:
- 删除特定于内核的注释
删除编译器的编译包- 删除所有内核内部的section(由ifdef kernel 保护)
每个相关目录包含一个文件名"Kbuild",该文件名指定要导出的头文件。关于Kbuild文件的语法,请参见后面的章节。
——7.1 header-y
header-y指定导出的头文件。
Example: #include/linux/Kbuild header-y += usb/ header-y += aio_abi.h
这似乎是不赞成的。headers_install
目标不存在于树外模块构建中(参见此回答)。