32位内核增加系统调用
内核版本:2.6.34.15
系统版本:Ubuntu 12.04
系统位数:32位
更细日期:20181102
一.修改系统调用表
在文件arch/x86/kernel/syscall_table_32.S文件末尾处增加:
.long sys_sumextend /* 338 */
二.添加系统调用号
在目录arch/x86/include/asm/
修改文件unistd_32.h文件,在文件中添加自己的系统调用号。
#define __NR_sumextend 338
同时修改接下来的定义:
#define NR_syscalls 339//这个表示的当前系统调用的总数
三.编写系统调用的处理函数
原则上你可以在内核文件的任何位置添加你的处理函数。这里选择在kernel目录下新建一个自己的C文件:sumextend.c
需要修改相关的Makefile文件。修改sumextend.c所在的目录下的Makefile文件
obj-y += groups.o
obj-y += sumextend.o #自己添加
编写sumextend.c代码内容:
#include <linux/kernel.h>
asmlinkage long sys_sumextend(void)
{
printk("sumextend worked!\n");
return 0;
}
在include/linux/syscalls.h中增加头文件声明:
asmlinkage long sys_sumextend(void);
四.编译内核并安装
make clean
make menuconfig
make
make modules
make modules_install
make install
五.编写用户空间测试函数
#include <stdio.h>
#include <sys/syscall.h>
#define SYS_SUMEXTEND 338
int main(void)
{
syscall(SYS_SUMEXTEND);
return 0;
}
运行
gcc syscall_test.c -o syscall_test.o
./syscall_test.o
运行后在命令行中输入dmesg即可看到打印信息