【问题标题】:Syscall implementation kernel module 2.6Syscall实现内核模块2.6
【发布时间】:2011-07-01 13:15:15
【问题描述】:

在阅读了一些资料后,我了解到通过 LKM 添加新的系统调用在 2.6 中变得更加困难。似乎系统调用表不再导出,因此(不可能?)在运行时插入新调用。

我想要实现的东西如下。

我有一个内核模块正在执行特定任务。 此任务取决于应由用户登陆进程提供的输入。 此信息需要到达模块。 为此,我将介绍一个新的系统调用,该系统调用在内核模块中实现并可从用户态进程调用。

如果我必须重新编译内核以添加我的新系统调用,我还需要在内核模块之外编写实际的系统调用逻辑,对吗?

还有其他方法吗?

干杯, 哎呀

【问题讨论】:

    标签: linux-kernel kernel-module system-calls


    【解决方案1】:

    系统调用不是此类工作的正确接口。至少,这就是内核开发人员难以添加系统调用的原因。

    在用户空间和内核模块之间移动数据有很多不同的方法:procsysfs 伪文件系统、字符设备接口(使用读或写或 ioctl)或本地伪网络接口netlink.

    您选择哪一种取决于您要发送的数据类型的数量。如果您打算只传递少量数据,您可能应该只使用 proc/sysfs;对于大批量传输,char 设备或 netlink 更适合。

    【讨论】:

    • netlink ?至少从 2.2 内核系列开始,它就已经存在了,现在已经很长了。
    • 如果您添加的语义类似于系统调用,您可能应该使用 ioctl。 ioctl 就像设备特定的系统调用。但是你需要告诉我们你想做什么。
    • @caf 好点。直到2.6我才听说过。我的印象是直到最近它才被视为通用内核用户界面。
    【解决方案2】:

    不可能——不。 AV 模块和 rootkit 一直都在这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 2021-12-24
      • 1970-01-01
      • 2023-03-14
      相关资源
      最近更新 更多