添加带有内核模块(LKM)的系统调用

Adding a system call with a kernel module(LKM)

所以我看到了一堆关于添加系统调用的问题,但我找不到任何使用 LKM 的示例。我找到了这样的资源:http://tldp.org/LDP/lkmpg/2.6/html/ 这在理论上可行,但无法编译。谁能给我指出一个添加 hello world 系统调用或其他东西的简单示例。像这样的东西: https://tssurya.wordpress.com/2014/08/19/adding-a-hello-world-system-call-to-linux-kernel-3-16-0/ 不需要我重新编译我的内核?

一般来说,强烈建议不要实现一个全新的系统调用。

相反,只实现一个新的 ioctl 并且可能是一些新的块或字符设备。

关于如何那个,看起来已经有另一个question/answer:How do I use ioctl() to manipulate my kernel module?

我不认为你可以用模块做到这一点。系统调用的定义分为两个在运行时无法真正更改的地方(据我所知):系统调用table(为每个体系结构分配数字)和系统调用包含文件(与内核本身一起安装,而不是模块) . (或者至少不会在运行时不搞乱代码重写。)

在这种情况下,您总是需要重新编译内核。但是如果你想有一个快速的 update/try 周期,你可以实现一个系统调用,它只是一个存根,如果它被加载,则将消息传递给正确的模块。它允许您更改实现,但不能更改签名。