Linux kernel 在Linux内核中向用户空间公开额外的头文件

Linux kernel 在Linux内核中向用户空间公开额外的头文件,linux-kernel,header,Linux Kernel,Header,为了进行一项研究,我一直在维护Linux-4.9内核的本地补丁。该补丁添加了三个系统调用。系统调用不适合上行 到目前为止,我一直使用makedebpkg为我的内核生成Debian包。一旦安装,用户空间可以使用生成过程生成的一个\uuu NR\uu…宏调用新的系统调用 我想解决的问题是:定义系统调用号的头在由make deb pkg生成的libc dev包中。安装自定义libc-dev会对apt-get造成严重破坏(上次我安装自定义libc-dev时,它卸载了所有的llvm和gcc,并使apt-g

为了进行一项研究,我一直在维护Linux-4.9内核的本地补丁。该补丁添加了三个系统调用。系统调用不适合上行

到目前为止,我一直使用
makedebpkg
为我的内核生成Debian包。一旦安装,用户空间可以使用生成过程生成的一个
\uuu NR\uu…
宏调用新的系统调用

我想解决的问题是:定义系统调用号的头在由
make deb pkg
生成的
libc dev
包中。安装自定义
libc-dev
会对
apt-get
造成严重破坏(上次我安装自定义
libc-dev
时,它卸载了所有的llvm和gcc,并使
apt-get
无法使用一些我不理解的奇怪的“保持包”场景(尽管
dpkg--get选择显示没有保持包))

我想做的是用内核头提供一个我自己制作的头,这样就完全避免了可怕的
libcdev

我的补丁将
krun
目录添加到内核源目录的顶层:

$ find krun
krun
krun/test_prog
krun/Makefile
krun/test_prog.c
krun/krun_reg.h
krun/.gitignore
krun/krun-kernel.h
krun/krun.c
通过阅读本文,我似乎应该能够使用
header-y
公开
krun kernel.h

所以
krun/Makefile
看起来像这样:

obj-y := krun.o
header-y += krun-kernel.h

test_prog: test_prog.c
        ${CC} ${CFLAGS} ${LDFLAGS} -Wall -Wextra -o $@ $<
clean:
        rm -f test_prog
但是,如果我运行:

$ make headers_install INSTALL_HDR_PATH=./tmp_hdrs
tmp\u hdrs
下看不到我的标题


这有可能吗?谢谢。

我将尝试回答我自己的问题

使用Kbuild,您似乎可以在WRT头上做两件事:

  • 将它们暴露于用户空间,并将它们打包到
    libc dev
  • 将它们作为内核头安装,用户空间不能包含这些头
因此,我所要求的无法实现


对我来说,最好的解决方案是(遗憾的是)手动将头复制到系统的include目录中

如果我把我的头放在
include/uapi/linux
中,并在该目录下的
Kbuild
文件中添加一个条目,它就会起作用。可能您无法从不在
include
下的目录安装头。
$ make headers_install INSTALL_HDR_PATH=./tmp_hdrs