使用内核模块(LKM)添加系统调用

时间:2016-04-01 03:07:12

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

所以我看到了一些关于添加系统调用的问题,但我找不到任何一个使用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/不需要我重新编译我的内核?

2 个答案:

答案 0 :(得分:1)

通常,强烈建议实施全新的系统调用。

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

如何那个,看起来还有另一个问题/答案:How do I use ioctl() to manipulate my kernel module?

答案 1 :(得分:0)

我认为你不能用模块做到这一点。系统调用的定义分为两个地方,在运行时无法真正改变(据我所知):syscall表(为每个架构分配数字)和syscalls包含文件(安装内核本身,而不是模块)。 (或者至少在运行时没有弄乱代码重写。)

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