【问题标题】:How to install a system call in a kernel module如何在内核模块中安装系统调用
【发布时间】:2010-07-15 01:17:34
【问题描述】:

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

【问题讨论】:

  • 我不是专家,但我很确定如果您告诉我们您正在运行的操作系统会有所帮助。

标签: kernel-module


【解决方案1】:

假设您正在讨论 Linux...

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

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

查看Linux Device Drivers, Ch5 了解有关编写 ioctl 的信息。

【讨论】:

  • sysfs interface > ioctl,就现代内核约定而言。
  • 是否使用 sysfs 或 ioctls 将取决于发布者试图实现的系统调用的性质。 Sysfs 似乎适合显示信息和配置变量。与让 ioctl 这样做相比,它在可编程性和可用性方面有了很好的改进。尽管如此,ioctl 更通用,它们更接近于您通过实际添加新系统调用所获得的结果。
  • 非常好的答案,激励你走正确的路,而不是使用不稳定的黑客。
【解决方案2】:

假设您谈论的是 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/

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 2016-08-26
    • 2012-03-10
    • 2019-04-21
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多