没有find新的系统调用(Linux内核3.0.0)我应该从哪里开始寻找?

我创build了两个新的系统调用,但是当我尝试testing它们时,出现以下错误:

matt@ubuntu:~/test$ gcc test.c test.c: In function 'newcall': test.c:6:17: error: 'sys_get_slob_amnt_free' undeclared (first use in this function) test.c:6:17: note: each undeclared identifier is reported only once for each function it appears in matt@ubuntu:~/test$ 

我也试过这与syscall(sys_get_slob_amnt_free)具有相同的结果。

这里是testing代码:

 #include <unistd.h> #include <stdio.h> unsigned long newcall() { return syscall(__NR_get_slob_amnt_free); } int main() { printf("%d\n", newcall()); return 0; } 

为了添加这些我把它们放在系统调用表(/usr/src/linux-3.0/include/asm-generic/unistd.h)

 #define __NR_sendmmsg 269 __SC_COMP(__NR_sendmmsg, sys_ sendmmsg, compat_sys_sendmmsg) /** my changes here **/ #define __NR_get_slob_amnt_free 270 __SYSCALL(__NR__get_slob_amnt_free, sys_get_slob_amnt_free) #define __NR_get_slob_amnt_claimed 271) __SYSCALL(__NR_get_slob_amnt_claimed, sys_get_slob_amnt_claimed) /** /my changes **/ #undef __NR_syscalls #define __NR_syscalls 272 

这里是调用自己的代码(../linux-3.0/mm/slob.c)

 asmlinkage unsigned int sys_get_slob_amnt_claimed() { return memClaimed; } asmlinkage unsigned int sys_get_slob_amnt_free() { return memClaimed - memUsed; } 

我试图弄清楚我是否搞错了testing代码(也许我需要包括更多的东西或链接的东西?)或者如果我忽略了一些添加系统调用的东西。 有了重新编译内核所需的时间,这真的会帮助我知道从哪里开始寻找。

无可否认,这与家庭作业有关。 该任务是关于修改slob.c,我有一个很好的处理。 我只是这样做来看看目前为止我所做的修改是否正在进行。 我感谢您可以给的任何指导。 谢谢!

编辑:解决 (或至less解决了我)。

非常感谢bdonlan! 尽pipesyscall(270)没有直接执行,但它慢慢地记住了我的记忆 – 还有一组我完全忽略的相关数字。 文件/linux-3.0/arch/x86/kernel/syscall_table_32.c需要修改,以便正确添加系统调用

一旦我添加.long sys_get_slob_amnt_free.long sys_get_slob_amnt_claimed到该文件并重build内核,我可以通过使用syscall(###)来打我的系统调用,其中###是syscall_table_32.c中的编号(不是unistd.h中的编号)。 我觉得他们应该匹配 – 但因为这只是荣耀的debugging信息,我想我会离开这个神秘的另一次,只是把它称为好。

Solutions Collecting From Web of "没有find新的系统调用(Linux内核3.0.0)我应该从哪里开始寻找?"

还有一组相关的数字,我需要添加。 文件/linux-3.0/arch/x86/kernel/syscall_table_32.c也需要修改,以便正确添加系统调用。

一旦我添加.long sys_get_slob_amnt_free.long sys_get_slob_amnt_claimed到该文件并重建内核,我可以通过使用syscall(###)来打我的系统调用,其中###是syscall_table_32.c中的编号(不是unistd.h中的编号)