1.下载内核
在下载linux-2.6.38,
你可以选择稳定版或者新的测试版,但一定要下载Full source版。
2、解压内核 cd /usr/srctar -jxvf linux-source-2.6.38.tar.bz2 将内核解压到/usr/src 3、修改文件 a)/usr/src/linux-source-2.6.38/kernel/sys.c 可以用右键管理员打开或者gedit /usr/src/linux-source-2.6.38/kernel/sys.c
在文件最后添加asmlinkage int sys_mycall(int number){printk(“This is my first system call!!!hahahaha!!”);return number;} b)/usr/src/linux-source-2.6.38/arch/x86/kernel/syscall_table_32.S 可以用右键管理员打开或者gedit /usr/src/linux-source-2.6.38/arch/x86/kernel/syscall_table_32.S 然后在一列 .long sys_XXXX的下一行添加.long sys_mycall并记住他们分别是第几个.long sys_XXXX c)/usr/src/linux-source-2.6.38/arch/x86/include/asm/unistd_32.h 可以用右键管理员打开或者gedit /usr/src/linux-source-2.6.38/arch/x86/include/asm/unistd_32.h 在一列#define __NR_XXXX NNN后添加几行 #define __NR_mycall 341
注意后面那个数字是接着上面那几行下来的
4、编译内核
关于内核编译,我在上一篇文章里面已经讲了,自己照上面的做就是了,下面是文章的链接:《Ubuntu 10.10下成功编译Linux-2.6.38内核》
5、重启 重启Ubuntu,如果能进入系统,,证明基本上没问题了。打开终端输入uname -r 查看版本号,如果是2.6.38就可以安心了 6、检查系统调用 随便写个函数试试看吧在main函数中使用syscall(函数号,参数)测试系统调用比如
#include <linux/unistd.h>
#include <stdio.h>
main(){
printf(“The number is %d\n”,syscall(341,100));
}
出现如下输出:The number is 100
编译运行,然后打开终端输入sudo dmesg -c查看最后一行是否有添加系统调用成功信息:
如果有 “This is my first system call!!!hahahaha!!”
说明系统调用添加成功了!!
人之所以有一张嘴,而有两只耳朵,原因是听的要比说的多一倍。