是否可以通过LKM添加系统调用?

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

这是一个例子
linux系统调用

编辑:
上面的例子展示了如何实现一个系统调用,只要从一个可加载的模块中实现一个; AFAIK,这是不可能的,除非你在哪里覆盖现有的因为数组的大小是#定义。

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

检查Linux文档项目网站的“Linux内核模块编程指南”( http://www.tldp.org/LDP/lkmpg/2.6/html/index.html )。 具体来说,看看这里的系统调用: http : //www.tldp.org/LDP/lkmpg/2.6/html/x978.html 。 至少应该给你一个开始。

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