您的位置:首页 > 运维架构 > Linux

如何添加linux系统调用

2011-07-14 11:25 609 查看
1、准备
环境使用:linux-2.6.32.2-mini2440-20100921.tar.gz
硬件环境:mini2440
配套软件:mini2440-u-boot、rdisk.gz(文件系统)、redhat 5
2、实验
2.1、首先解压在redhat 5中解压llinux-2.6.32.2-mini2440-20100921.tar.gz
mkdir /home/work/core
cp linux-2.6.32.2-mini2440-20100921.tar.gz /home/work/core
cd /home/work/core
tar -xzvf linux-2.6.32.2-mini2440-20100921.tar.gz
2.2、修改内核文件
2.2.1、修改 arch/arm/include/asm/unistd.h
vim arch/arm/include/asm/unistd.h
在最后添加一行
如#define __NR_call_add (__NR_SYSCALL_BASE+365)

2.2.2、在arch/arm/kerne/sys_arm.c中添加测试内核程序
下面的程序只是个测试程序,
smlinkage int sys_add(int a, int b)
{
return a + b;
}
2.2.3、注册内核调用
在arch/arm/kernel/call.S中添加注册信息
vim arch/arm/kernel/call.S
添加内容为:CALL(sys_add) //sys_add 是测试程序的函数名

2.3、编译内核
选择内核一般配置,编译生成zImage,然后使用u_boot生成uImage,然后
将u_boot,uImage以及rdisk.gz全部加载到mini2440中去
2.4、程序测试
编写一个C程序
如test.c:
#include <stdio.h>
#include <linux/unistd.h>
_syscall2(int, sys_add, int, a, int, b);

main()
{
int result;
result = sys_add(5, 4);
printf("result = ", result);
}
将其放到mini2440板子上,使用编译之后即可运行,也可以在redhat 5中编译之后将编译产生的文件放到上面即可使用./test来执行、
结果为:result=11
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: