我们之前学习的各种内核态与用户态数据交换时都需要系统调用,只是我们没感受到,而这次我们向内核添加一个自己的syscall,来感受下这一功能的特殊魅力。
下面说明在Kernel源码里如何添加一个syscall:
1.在include/linux/syscalls.h文件里最后一行的#endif前添加自己的系统调用函数声明,内容如下:
asmlinkage long sys_slam(void);
2.在kernel/sys.c文件中,我们在SYSCALL_DEFINE0(getegid) 定义后面添加上面函数的定义,内容如下:
SYSCALL_DEFINE0(slam)
{
printk("Hello slam call!\n");
return THREAD_SIZE;
}
这里的 SYSCALL_DEFINE0宏表示我们的系统调用是无参的,该宏在上面syscalls.h头文件中定义。
3.添加系统调用向量,在arch/x86/syscalls/syscall_64.tbl文件中添加系统调用号和系统调用服务程序入口(如果是32位系统,则修改sysc