1. 修改内核
1.1 修改内核源代码
1.2 重新编译内核
make /usr/src/linux-x.x/bzImage --重新编译
1.3 重新配置grub
cp /usr/src/linux-x.x/arch/i386/boot/bzImage /boot/vmlinuz
cp /usr/src/linux-x.x/System.map /boot/System.map
vi /boot/grub/menu.lst --添加kernel和root项,kernel指向新的vmlinuz
1.4 reboot
2. 添加系统调用
2.1 在/usr/src/linux-x.x/kernel/sys.c中添加系统调用源代码
asmlinkage return_type fun_name(){}
2.2 在/usr/src/linux-x.x/include/asm-i386/unistd.h中添加系统调用号并修改系统调用总数
#define __NR_fun num//系统调用号
#define NR_syscalls num+1//系统调用总数
2.3 在/usr/src/linux-x.x/arch/i386/kernel/syscall_table.S添加相应的项
.return_type fun_name()
2.4 在/usr/src/linux-x.x/include/linux/syscalls.h添加函数声明
asmlinkage return_type fun_name();
3. 使用新的系统调用
3.1 重新编译内核
3.2 调用代码包含头文件<linux/unistd.h>和<sys/type.h>
3.3 调用syscall(系统调用号)访问添加的系统调用