linux-kernel - 在 Linux 内核中向用户空间公开一个额外的标头
问题描述
我一直在维护 Linux-4.9 内核的本地补丁以进行一项研究。该补丁添加了三个系统调用。系统调用不适合上游。
到目前为止,我已经习惯make deb-pkg
为我的内核生成 Debian 软件包。安装后,用户空间可以使用构建过程生成的宏syscall(2)
之一来调用新的系统调用。__NR_...
我要解决的问题是:定义系统调用编号的标头位于libc-dev
由make deb-pkg
. 安装 customlibc-dev
会造成严重破坏apt-get
(上次我安装 customlibc-dev
时,它卸载了所有 llvm 和 gcc,并且apt-get
在我不理解的一些奇怪的“持有包”场景中无法使用(尽管dpkg --get-selections
没有显示持有包))。
我想做的是用内核头文件发送我自己制作的头文件,从而libc-dev
完全避免可怕的包。
我的补丁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
从阅读Linux-4.9 Kernel Docs看来我应该能够krun-kernel.h
使用header-y
.
所以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
在顶级 Makefile 中,我有:
core-y += krun/
header-y += krun/
但是,如果我运行:
$ make headers_install INSTALL_HDR_PATH=./tmp_hdrs
我的标题在tmp_hdrs
.
这有可能吗?谢谢。
解决方案
我将尝试回答我自己的问题。
使用 Kbuild,您似乎可以做两件事 WRT 标头:
- 将它们暴露给用户空间并将它们打包到
libc-dev
. - 将它们安装为内核头文件,用户空间不能包含这些头文件。
所以我所要求的无法完成。
对我来说最好的解决方案是(可悲地)手动将标题复制到系统的包含目录中。
推荐阅读
- wordpress - Wordpress 主题与预览显示不同
- python - 为什么 pyglet 无法显示我的图像?
- reactjs - Reactjs 钩子设置活动按钮
- php - PHP如何包含饼图
- oracle - 向 oracle 表添加参考分区
- python-3.x - 如何在 Python 中使用 Selenium Webdriver 在一个页面中处理具有相同类的更多元素
- http - 如何在颤动中使用 DIO 将多个文件、文件列表发布到服务器
- java - 未能执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.8.1
- python - Python text out of TD error 'NoneType' object has no attribute 'text' 为什么?
- amazon-iam - 从命令行获取 AWS 访问密钥