8.4. 如何添加系统调用

我们已经看到了一个系统调用相关的文件,那么让我们添加一个自己的系统调用。
1) 在syscalls.h中定义系统调用的原型
asmlinkage long sys_mycall (unsigned long myid);
2) 在sys_call_table末尾添加新的系统调用入口
PTR sys_mycall 
3) 在unistd.h中添加新系统调用的声明
#define __NR_mycall 245
__SYSCALL(__NR_mycall, sys_mycall)
3) 定义具体实现,
mycall.c:
SYSCALL_DEFINE1(mycall, unsigned long, myid)
{
    printk(KERN_INFO "fuck id %d\n", myid);    
}
4) 将其纳入内核编译中,比如放在fs子系统下
Makefile:
obj-$(CONFIG_MY_CALL) := mycall.o
5) 添加配置选项
Kconfig:
config MY_CALL
    bool
    default y
    help
        just for fun!!
6)编译
make menuconfig && make

注意:一般不建议添加系统调用,这里我们假设了CN56XX的MIPS64平台,只修改了相关文件,但是Linux支持多平台,相应的每个平台的文件都要修改保证系统调用的一致性,并且一旦系统调用号和原型确定将很难修改。