【发布时间】:2010-07-15 01:17:34
【问题描述】:
我想在一个未使用的地方安装一个新的系统调用并等待来自用户空间的指令。我不知道该怎么做。
【问题讨论】:
-
我不是专家,但我很确定如果您告诉我们您正在运行的操作系统会有所帮助。
标签: kernel-module
我想在一个未使用的地方安装一个新的系统调用并等待来自用户空间的指令。我不知道该怎么做。
【问题讨论】:
标签: kernel-module
假设您正在讨论 Linux...
弄乱系统调用表是个坏主意。内核对动态更改有一些安全防御(这是一件好事),因此您必须重新构建整个内核才能进行修改。
这是一种更好的方法,它同样灵活。构建一个模块来创建一个新的块设备并将您的“系统调用”作为该设备上的 ioctl 实现。您不必重新编译内核来实现它,也不必担心接触汇编文件。当您进行迭代开发时,重新编译和重新插入模块可以让您的工作速度比需要重新启动以使更改生效时快得多。
查看Linux Device Drivers, Ch5 了解有关编写 ioctl 的信息。
【讨论】:
sysfs interface > ioctl,就现代内核约定而言。
假设您谈论的是 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/
请注意,您不能在模块中安装系统调用 - 必须重新编译内核映像。
【讨论】: