在Linux中添加新的系统调用的 步骤
时间:2010-12-12 来源:kevin_neu
首先编写添加到内核中的源程序,即要添加的服务,所用的函数名称应该是新的系统调用名称前面加上sys_标志。例如新加的系统调用为mysyscall(int number),那么就应该在系统的/usr/src/linux/kernel/sys.c文件中添加相应的源代码,如下所示:
asmlinkage int sys_mysyscall(int number) |
2. 添加新的系统调用后,为了从已有的内核程序中添加到新的函数的链接,需要编辑以下2个文件:
(1) /usr/src/linux/include/asm-i386/unistd.h
(2) /usr/src/linux/arch/i386/kernel/syscall_table.S
第一个文件中定义了每个系统调用的中断号,可以打开文件/usr/src/linux/include/asm-i386/unistd.h来查看,该文件中包含了系统调用清单,用来给每个系统调用分配一个唯一的号码,部分内容如下:
#define __NR_add_key 286
#define NR_syscalls 294 |
#define __NR_syscallname N |
例如可以在该文件中这样定义一个系统调用:
#define __NR_mysyscall 294 |
#define NR_syscalls 295 |
.data |
.long sys_mysyscall |
添加好系统调用之后,需要重新编译内核,并且用心的内核来启动,此时,系统调用就添加好了。
4. 测试新的系统调用,编辑程序test_call.c如下:
#include <unistd.h> |
# gcc -o test_call -I/usr/src/linux/include test_call.c # ./test_call
n=10 |