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

fjnneemd  于 2023-05-16  发布在  Linux
关注(0)|答案(1)|浏览(160)

我有一个树外的Linux内核模块,有一个公共头。这个头是用来与其他模块共享的,因为它声明了模块的导出函数,而不是用户空间。

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

我读到了Kbuild header-y变量,但它似乎不再在当前内核中使用。有header_installheaders_install_all目标。但这是为了生成放置在/usr/include中的用户空间API头吗?最后,只需将标头放置在正常的includepath中(例如/usr/include)将无法工作,因为这不是模块构建期间正常内核includepath的一部分。

0sgqnhkj

0sgqnhkj1#

所以经过几周的搜寻,似乎就是这里了不存在用于树外构建模块依赖性报头的预定义位置。
我目前的解决方案是在导出头的模块上添加此:

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

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

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

这会将/usr/src/include提升为用于头交换的文件夹

相关问题