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

Kernel module 如何在内核模块中安装系统调用,kernel-module,Kernel Module,我想在一个未使用的系统调用的地方安装一个新的系统调用,并等待用户空间的指示。我不知道怎么做。假设您正在谈论Linux 2.6,您应该看看以下指南: 更多信息: 请注意,您不能在模块中安装系统调用-必须重新编译内核映像。假设您正在讨论Linux 弄乱系统调用表是个坏主意。内核有一些防止动态更改的安全防御(这是一件好事),因此您必须重建整个内核以进行修改 这里有一个更好的方法,它同样灵活。构建一个模块,创建一个新的块设备,并将“系统调用”作为ioctl在该设备上实现。您不必重新编译内核来实现这一

我想在一个未使用的系统调用的地方安装一个新的系统调用,并等待用户空间的指示。我不知道怎么做。

假设您正在谈论Linux 2.6,您应该看看以下指南:

更多信息:

请注意,您不能在模块中安装系统调用-必须重新编译内核映像。

假设您正在讨论Linux

弄乱系统调用表是个坏主意。内核有一些防止动态更改的安全防御(这是一件好事),因此您必须重建整个内核以进行修改

这里有一个更好的方法,它同样灵活。构建一个模块,创建一个新的块设备,并将“系统调用”作为ioctl在该设备上实现。您不必重新编译内核来实现这一点,也不必担心会碰到程序集文件。当您进行迭代开发时,重新编译和重新插入模块可以让您比需要重新启动以使更改生效时更快地工作


查看有关编写ioctl的信息。

我不是专家,但我非常确信,如果您告诉我们您正在运行的操作系统,这会有所帮助。
sysfs
interface>
ioctl
,根据现代内核约定。使用sysfs还是ioctl取决于海报试图实现的系统调用的性质。Sysfs似乎适合显示信息和配置变量。与IOCTL相比,它在可编程性和可用性方面有了很好的改进。尽管如此,IOCTL更为通用,它们更接近于通过实际添加新的系统调用所得到的结果。这是一个非常好的答案,它激励我们走正确的道路,而不是使用不稳定的黑客。