linux基础入门学习linux系统中添加系统调用 点击:92 | 回复:0



粤嵌嵌入式

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:174帖 | 0回
  • 年度积分:0
  • 历史总积分:568
  • 注册:2018年6月28日
发表于:2019-02-26 14:35:07
楼主

      linux系统中添加系统是怎样调用的?从linux基础入门学习出发,一起来看看:

  1、每个体系下面均有对应的系统调用列表:

  arch/arm/kernel/calls.S

  在最后添加一个新的系统调用标号

  CALL(sys_my_call)  //系统调用号366

  添加sys_my_call()

  在内核源代码的kernel目录下的sys.c中增加该系统调用函数接口:

  SYSCALL_DEFINE0(my_call)

  {

     printk("hello my_call!\n");   //内核中的打印接口printk

  }

  备注:

  SYSCALL_DEFINE0 该宏用与定义一个不带参数的系统调用sys_xxx()

  SYSCALL_DEFINE1 该宏用与定义一个带一个参数的系统调用

  SYSCALL_DEFINEn

  2、修改系统调用函数声明文件:

  include/linux/syscalls.h

  添加新系统调用的声明

  asmlinkage long sys_my_call(void);

  3、添加新系统调用的调用号声明:

  arch/arm/include/asm/unistd.h

  添加新系统调用号的声明

  #define __NR_my_call   (__NR_SYSCALL_BASE + 366)

  4、重新编译内核并更换新内核。

  系统调用测试:

  编写应用程序

  sys_call.c

  #include <stdio.h>

  #include <linux/unistd.h>

  #include <sys/syscall.h>


  #define __NR_my_call   (__NR_SYSCALL_BASE + 366)

  int main(int argc, char **argv)

  {

      syscall(__NR_my_call);

      return 0;

  }

  交叉编译:

  arm-linux-gcc sys_call.c -o sys_call

  将交叉编译后的程序下载到开发板:

  使用CRT的串口传输功能:

  1、在进入开发板文件系统后,输入:

  rx sys_call

  并回车确认,选择下载到板子的应用程序,模式Xmodem

  2、下载成功后修改可执行属性:

  chmod 777 sys_call

  3、执行

     linux基础入门学习

    




热门招聘
相关主题

官方公众号

智造工程师