我正在尝试添加一个新的helloworld系统调用到一个新版本的Linux Ubuntu内核。 我一直在浏览网页,但我无法find一个一致的例子来显示我将不得不修改的文件,以便将一个helloworld系统调用添加到内核中。
我已经尝试了很多,编译错误已经发生。 我知道如何编译内核,但是我不知道在哪里添加我的C程序系统调用,以及将此调用添加到系统调用表以及其他任何我必须做的事情。
我正在研究最新的Linux Ubuntu内核。
我编译了内核,引入了一个新的系统调用,一个简单的调用叫做mycall,现在我的应用程序的头文件中会收到编译错误,它会testing调用,下面是我的头文件
#include<linux/unistd.h> #define __NR_mycall 317 _syscall1(long, mycall, int, i)
这是我得到的语法错误
stef@ubuntu:~$ gcc -o testmycall testmycall.c In file included from testmycall.c:3: testmycall.h:7: error: expected declaration specifiers or '...' before 'mycall' testmycall.h:7: error: expected declaration specifiers or '...' before 'i' testmycall.c: In function '_syscall1': testmycall.c:7: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token testmycall.h:7: error: parameter name omitted testmycall.h:7: error: parameter name omitted testmycall.c:11: error: expected '{' at end of in
我从Nikolai N Fetissov的下面链接得到了很多帮助
您正在使用的“_syscall1”宏已经过时。 改用syscall(2)。
例:
#include <stdio.h> #include <linux/unistd.h> #include <sys/syscall.h> #define __NR_mysyscall 317 int main(void) { long return_value; return_value = syscall(__NR_syscall); printf("The return value is %ld.\n", return_value); return 0; }
操作系统原理-Gervin。 直截了当的程序。