linux 内核模块应该在哪里安装头文件

问题描述 投票:0回答:1

我有一个 out-tree linux 内核模块,它有一个公共头文件。此标头旨在与其他模块共享,因为它声明了模块的导出函数,而不是与用户空间共享。

  • 我的模块应该在哪里安装这个头文件?
  • make target 应该用于这个吗?

我阅读了有关 Kbuild

header-y
变量的信息,但它似乎不再在当前内核中使用。有
header_install
headers_install_all
目标。但这旨在生成放置在
/usr/include
中的用户空间 api 标头? 最后,仅仅将标头放在正常的包含路径中(例如
/usr/include
)是行不通的,因为这不是模块构建期间正常内核包含路径的一部分。

linux linux-kernel linux-device-driver kernel-module kbuild
1个回答
0
投票

经过数周的搜索,似乎就是这样。树外构建模块依赖标头没有预定义的位置。

我目前的解决方案是在导出标题的模块上添加它:

INSTALL_MOD_PATH ?= /
INSTALL_HDR_PATH ?= $(INSTALL_MOD_PATH)/usr/include/
INSTALL_HDR_PATH_KERNEL ?= $(INSTALL_MOD_PATH)/usr/src/include/


header_install:
    install -d $(INSTALL_HDR_PATH)
    install -d $(INSTALL_HDR_PATH_KERNEL)
    install -Dm 0655 ./user.h $(INSTALL_HDR_PATH)/user.h
    install -Dm 0655 ./mod-external.h $(INSTALL_HDR_PATH_KERNEL)/mod-external.h

并在依赖模块中在构建时执行此操作

export KCFLAGS="-I$(INSTALL_MOD_PATH)/usr/src/include/"
make

这将

/usr/src/include
提升为标题交换的文件夹

© www.soinside.com 2019 - 2024. All rights reserved.