zoukankan      html  css  js  c++  java
  • 加入新的linux系统调用

    上一篇详解了linux系统调用的原理,接下来依据上一篇的原理简介怎样创建新的linux系统调用

    向内核中加入新的系统调用,须要运行3个步骤:
    1. 加入新的内核函数
    2. 更新头文件unistd.h
    3. 针对这个新函数更新系统调用表calls.S


    1. 在kernel/sys.c中加入函数:
    asmlinkage int sysMul(int a, int b)
    {
    int c;
    c = a*b;
    return c;
    }


    2.在arch/arm/include/asm/unistd.h中加入系统调用编号:加入例如以下

    #define __NR_preadv(__NR_SYSCALL_BASE+361)
    #define __NR_pwritev (__NR_SYSCALL_BASE+362)
    #define __NR_rt_tgsigqueueinfo (__NR_SYSCALL_BASE+363)
    #define __NR_perf_event_open (__NR_SYSCALL_BASE+364)
    #define __NR_sysMul(__NR_SYSCALL_BASE+365)

    备注:在最后面加入


    3.在arch/arm/kernel/calls.S中加入代码,指向新实现的系统调用函数:

    /* 360 */ CALL(sys_inotify_init1)
    CALL(sys_preadv)
    CALL(sys_pwritev)
    CALL(sys_rt_tgsigqueueinfo)
    CALL(sys_perf_event_open)

    CALL(sysMul)

    备注:必须在最后面加入和unistd.h中的系统调用号一样


    4.又一次编译内核

    make  uImage ARCH=arm  CROSS_COMPILE=arm-linux-


    5.把内核复制到tftp文件夹以下

    cp arch/arm/boot/uImage  /tftpboot/

    备注:第5步能够不用那个是为了通过tftp下载到开发板


    6.使用系统调用

    #include <stdio.h>
    #include <linux/unistd.h>
    main()
    {

    int result;
    result = syscall(361,1, 2);//syscall过程 1、把系统调用号mov  r7,  #365  2、使用svc指令  

    //syscall(系统调用号。參数1,參数2) 当中參数1和參数2是sysMul的两个參数
    printf("result = ", result);
    }


  • 相关阅读:
    vue 跨域访问http
    vue 生命周期小结
    koa的教程
    spoj104 HIGH
    loj2026 「JLOI / SHOI2016」成绩比较
    loj2024「JLOI / SHOI2016」侦查守卫
    loj2016 「SCOI2016」美味
    loj2014 「SCOI2016」萌萌哒
    loj2013 「SCOI2016」幸运数字
    loj2012 「SCOI2016」背单词
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/6768451.html
Copyright © 2011-2022 走看看