上一篇详解了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);

}

最新文章

  1. 粒子拼字效果(getImageData方法)
  2. CSS之详解:active选择器
  3. java 枚举的常见使用方法
  4. angularjs笔记(二)
  5. RestEasy 3.x 系列之一:Hello world
  6. HDU 3555 数位dp
  7. Asp.Net 之 服务器端控件与客户端控件的区别
  8. Iperf使用方法
  9. [Javascript] Intro to Recursion - Refactoring to a Pure Function
  10. chrome(转)
  11. Unity3d 网络编程(三)(Unity3d内置简单的网络server编制)
  12. 搞定:Enter passphrase for key提示
  13. 初步了解关于js跨域问题
  14. LNMP下动静分离部署phpmyadmin软件包
  15. 31-java中知识总结:list, set, map, stack, queue
  16. go语言之进阶篇通过map生成json
  17. 关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明
  18. 前端 html input标签 disable 属性
  19. 骗访问量的机房人物列传by xMinh
  20. OpenGl 坐标转换 (转载)

热门文章

  1. 【Luogu P3834】可持久化数组(可持久化线段树)
  2. sublime text 2 学习(一):快捷键
  3. [转]在树莓派上搭建LAMP服务
  4. Django【进阶】FBV 和 CBV
  5. selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
  6. Windows 的GUID
  7. time_t转化成日期格式小工具
  8. python读取doc
  9. C# 后台首次加载时才执行
  10. CSS变形