Syscall实现内核模块2.6

时间:2011-02-21 20:29:10

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

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

我想要实现的目标如下。

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

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

还有其他办法吗?

干杯, eeknay

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:0)

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