|
我的内核2.6.15(gentoo-2.6.15-r3)
书上有添加内核的方法,但是平台是在2.4内核上,我觉得2.6应该差不多。但是弄了半天一直不对啊,帮我看看啊!
比如添加一个最简单的系统调用sillysyscall
我的步骤:
step 1:
编辑unistd.h添加系统调用号。
由于有两个unistd.h,系统的unistd.h在/usr/include/asm/里,内核的unistd.h在/usr/src/linux/include/asm里,我还不清楚到底该改那一个,于是尝试了3次,分别改,全改,好象结果是一样的。
添加:
- #define __NR_sillysyscall 295
复制代码
step 2:
在syscall table中添加一个值。
编辑/usr/src/linux/arch/i386/kernel/syscall_table.S,添加
step 3:
实现sillycall
编辑/usr/src/linux/kernel/sys.c
- asmlinkage long sys_sillysyscall(long arg0)
- {
- return arg0; //直接传回参数
- }
复制代码
然后从新编译内核,用新内核启动写个用户态程序测试:
- //c file : test.c
- #include<linux/unistd.h>
- _syscall1(long,sillysyscall,long,arg0)
- int main()
- {
- int s;
- s=sillysyscall(3);
- printf("s=%d\n",s);
- return 0;
- }
复制代码- woodenapple@nax ~/Gcc/test/ $ gcc -o test test.c
- woodenapple@nax ~/Gcc/test/ $ ./test
- s=-1 [color=red]结果不对,-1是出错的意思吗?[/color]
- woodenapple@nax ~/Gcc/test/ $
复制代码
实在是郁闷啊,这个是作业,我不敢怠慢啊,就请哪位告诉小弟一声怎么搞,哪里有问题,应该也不难。这里先谢谢了 |
|