Chinaunix首页 | 论坛 | 博客
  • 博客访问: 20387
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 102
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-07 19:10
文章分类

全部博文(8)

文章存档

2014年(8)

我的朋友

分类: LINUX

2014-01-07 21:04:35

为linux内核添加新的系统调用

作者:李志勇

更多精彩:
更多精彩:
开发平台:x86 ubuntu
目标平台:S3C6410    
 linux3.4.4

一、    打开内核源码目录下arch/arm/kernel/calls.S文件,在389行添加:
    /*
378 */      
CALL(sys_my_syscall)
378是新添加的系统调用的系统调用号,sys_my_syscall是该系调用的名字

二、打开内核源码目录下arch/arm/include/asm/unistd.h文件,在407行添加:
 
  #define __NR_my_syscall           (__NR_SYSCALL_BASE+378)
   
my_syscall是新系统调用的名字,378是系统调用号

三、打开内核源码目录下arch/arm/kernel/sys_arm.c文件,在最后添加:
 
  asmlinkage long sys_my_syscall(int a, int b)
   {
        return a +
b;
 
 }
这个就是系统调用的实现,在这里简单的写一个加法为例

四、重新编译内核,启动内核并挂在网络文件系统,挂在成功后:
   
[lzy@uplooking]#

五、在用户态测试新添加的系统调用my_syscall
    #include
< stdio.h>

int main(int argc, char *argv[])
{
        int
add;

        add = syscall(378, 1, 2);

        printf("add =
%d\n", add);

        return
0;
}
其中387是新添加的系统调用的系统调用号

编译并把可执行文件拷贝到/nfsroot,/nfsroot是开发板的根目录
lizhiyong@ThinkPad:/home/test$
arm-linux-gcc my_syscall.c -o my_syscall
lizhiyong@ThinkPad:/home/test$ cp
my_syscall /nfsroot

在开发板上执行my_syscall,运行结果如下:
    [lzy@uplooking]#
./my_syscall
    add=3
更多精彩:
阅读(904) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

4大爷2014-01-08 09:13:36