实施系统调用时,如何将系统调用号公开给用户区?
|
我正在摆弄系统调用.我添加了两个新的,并验证它们使用调用syscall. 我希望系统调用号位于标题中,以便用户空间不必明确知道系统调用号. 在arch / x86 / syscalls / syscall_64.tbl我有:
并且一些grepping表明kbuild已经为新的系统调用自动生成了宏:
文件名表明我不需要手动添加条目,但这与Linux内核文档所说的相反:
好吧,我的系统调用是特定于x86_64的,因为它们只读取和写入仅在英特尔芯片中发现的MSR.所以在此之后,我开始挖掘,看看能否为amd64系统找到特定于拱形的标题. 你会期望它在arch / x86_64下,但在那里根本没有包含.所以我假设x86_64继承自x86.在这种情况下,特定于arch的标头应该是:
如果你打开它,它只是一个基于arch发送的小包装器:
所以这可能是为了获取/usr/include/x86_64-linux-gnu/asm/unistd.h,但这还不包括我的新系统调用号. 我希望headers_install目标能够安装新的头文件(可能),但是它没有. 我糊涂了.我应该手动将新的系统调用添加到文件中吗?如果是这样的文件?如果没有,我如何将自动生成的__NR_ *宏公开给标准位置的用户空间? 谢谢 最佳答案 内核构建过程分配的实际系统调用号是内核构建过程的一部分…因此,您不会获得实际的最终数字,而只能获取已构建的内核.构建内核,您将在构建的头文件中看到实际的分配.我担心你试图在干净的内核源代码中搜索它们,这就是你找不到合适的包含文件的原因.另一方面,隐藏实际的系统调用号是很常见的,它由一些包含上面提到的内核头的包装程序完成,并使用#defined符号来表示使__SYSCAL(…)的调用号.实际通话.这通常是必要的,因为每个系统调用通常都有不同的接口.您使用的所有正常系统调用都在stdlib中包含了它们的包装器,但新的系统调用将不包括在内.这里有两种方法:修补标准C库以包含(并在/usr/include中的某处为函数原型编写标准头文件)或者包含包装文件mySysCall.o(此名称在您方便时)您要使用新系统调用的所有程序. (编辑:武陵站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- iphone 5s什么时候上市 概念机图片视频曝光
- 360奇酷手机怎么装手机卡 奇酷手机sim卡 TF卡安装教程
- 2014把ROOT精灵带回家 马上免费领手机
- 饿了么专享红包怎么获得 饿了么专享红包获得方法
- linux – 如何重命名内核模块名称而不重命名.ko传递给insmo
- HiFi 2.0怎么样 vivo HiFi 2.0解析
- 艺考升怎么报名 艺考升报名图文教程
- linux – 如何使用Amazon EC2命令行界面?
- linux – 使用systemd服务单元的Restartamp;RestartSec或使
- linux – 如何在Google Cloud(Google Compute Engine)上安装

