2009-01-20 53 views
9

我想添加一个新的系统调用通过LKM,但我不知道如何做到这一点。也就是说,我知道如果我想添加一个全新的系统调用,我可以查看sys_call_table并找到一个sys_ni_syscall并将其替换,但我很好奇是否有可能实际上添加到sys_call_table。我意识到它可能是而不是可能,因为它是一个固定大小的数组,但我想知道是否有其他聪明的方法来添加系统调用而不覆盖未使用的系统调用号码。是否可以通过LKM添加系统调用?

+0

[使用LKM实现Linux系统调用]可能的副本(https://stackoverflow.com/questions/12623066/implementing-linux-system-call-using-lkm) – 2018-01-29 15:26:15

回答

3

下面是一个例子
linux system calls

编辑:
上面的例子显示HOWTO实现系统调用,就实现一个从一个可加载的模块; AFAIK,这是不可能的,除非你在哪里覆盖现有的,因为数组的大小是#define。

请记住,还需要更改用户空间,至少如果您希望能够实际使用新的系统调用。

1

这是一个老问题,但我想提出我的解决方案。实施“类似系统调用”环境的最简单方法是依靠假设备。 特别是,您可以创建一个新的设备驱动程序,它实际上不会驱动任何东西。然而,写上它可能会导致已安装的模块执行所需的操作。 此外,如果您想要提供多项服务,则可以将它们映射到ioctl操作。

相关问题