1

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

我想要实现的东西如下。

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

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

还有另一种方法可以做到这一点吗?

干杯,eeknay

4

2 回答 2

5

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

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

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

于 2011-02-21T20:40:42.873 回答
0

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

于 2011-02-21T22:18:22.130 回答