如何在内核模块中安装系统调用

问题描述:

我想在未使用的位置安装新的系统调用,并等待来自用户空间的指令。我不知道该怎么做。如何在内核模块中安装系统调用

+1

我不是专家,但我非常确定,如果您告诉我们您正在运行的是什么操作系统,它会有所帮助。 – 2010-07-14 16:41:09

假设你正在谈论Linux 2.6中,你应该看看这个指南: http://www.ibm.com/developerworks/linux/library/l-system-calls/index.html

的更多信息:

http://tldp.org/HOWTO/html_single/Implement-Sys-Call-Linux-2.6-i386/

请注意,您无法安装系统调用的模块中 - 内核图像必须重新编译。

假设你正在讨论的Linux ...

与系统调用表碴是一个坏主意。内核有一些动态修改它的安全防御(这是一件好事),所以你必须重建你的整个内核来进行修改。

这是一个更好的方法,同样灵活。构建一个模块,创建一个新的块设备,并在该设备上实现“系统调用”作为ioctl。你不必重新编译内核来实现这一点,你不必担心接触汇编文件。在进行迭代开发时,重新编译和重新插入模块可使您的工作速度比需要重新启动才能使更改生效更快。

请参阅Linux Device Drivers, Ch5以了解关于编写ioctls的信息。

+1

'sysfs'接口>'ioctl',根据现代内核约定。 – 2010-07-14 20:19:16

+1

是否使用sysfs或ioctls取决于海报试图实现的系统调用的性质。 Sysfs似乎适合显示信息和配置变量。可编程性和可用性在改善ioctl方面有很大提高。尽管如此,ioctls更通用,而且它们更接近实际添加新系统调用所获得的结果。 – Karmastan 2010-07-14 22:12:38