树外Linux内核模块公共头文件的安装位置与Make目标咨询
树外内核模块共享头文件的安装方案
1. 头文件的安装位置
应该安装到对应内核版本的头文件目录下的专属子目录,常用路径有两类:
- 优先选择:
/lib/modules/$(uname -r)/build/include/linux/[你的模块名]/,这里的/lib/modules/$(uname -r)/build是指向当前内核头文件的符号链接,属于模块构建时的标准搜索路径,其他模块无需额外指定-I参数就能找到头文件。 - 等效路径:
/usr/src/linux-headers-$(uname -r)/include/linux/[你的模块名]/,这是内核头文件的实际存放目录,和上述路径功能一致。
如果不想占用内核默认的linux/子目录,也可以放在/usr/local/include/linux/[你的模块名]/,但这种情况其他模块构建时需要手动添加-I/usr/local/include参数才能定位到该头文件。
2. 用于安装的Make目标
内核自带的header_install、headers_install_all确实是为用户空间API头文件设计的,不适合树外模块的内核态共享头文件。你需要在模块的Makefile里自定义安装目标,比如命名为install_headers,示例代码如下:
# 定义头文件安装路径,默认指向当前内核的build目录 INSTALL_HDR_PATH ?= /lib/modules/$(shell uname -r)/build/include # 头文件要放到的专属子目录 MODULE_HDR_DIR = $(INSTALL_HDR_PATH)/linux/your_module_name # 自定义安装目标 install_headers: @mkdir -p $(MODULE_HDR_DIR) # 复制头文件并设置合理权限 install -m 644 your_public_header.h $(MODULE_HDR_DIR)/
执行make install_headers即可完成头文件的安装。
内容的提问来源于stack exchange,提问作者eddy
相关产品推荐
相关产品推荐

