专题8-Linux系统调用

1.      作用介绍

在前面的学习中,我们涉及到许多的系统调用函数,如:open、close、read、write等等,但是我们对其调用机制不是太了解。

我们知道linux系统存在内核空间与用户空间,内核空间中的程序需要被用户空间的应用程序引用到,能完成这个调用过程的函数就叫做系统调用函数

2.      工作流程分析

应用程序中运行swi,内核的调用函数有很多,它们之间进行编号,所编的号码放在寄存器R7中。我们读取R7中的编号,就明白了调用的函数是什么。sys_call_table就是我们用到的存放系统调用函数的一段汇编代码。

3.      实现新的系统调用

我们实现的功能就是打印信息。

我们在开发板的内核程序中找到,printk.c,在其中插入下面的程序:

void sys_pk()

{

printk(“this is a new sys_call!\n”);

}

我们内核文件夹中,找到arch-arm-kernel,我们可以看到call.s文件,进入其中,我们会看到一系列的列表,我们在列表的最下面加上CALL(sys_pk),这样我们的内核就能在表中找到我们写的函数。

我们在arch-arm-include下面找到我们的unistd.h文件,在文件的最下面加上:

#define _NR_pk     (_NR_SYSCALL_BASE+376),这对应的是我的TQ210的内核,我们在内核文件中,进行删除和编译,形成新的内核。

下面我们编写一个应用程序,使得我们的内核文件可以使用:syscall.c

void pk()

{

__asm__ (

"ldr r7,=376 \n"   //伪指令标号

"swi \n"         //调用swi

:

:

:"memory");

}

void main()

{

pk();

}

我们这里进行了内嵌汇编语言,由于我们的376超过了8位,这里我们使用ldr伪指令。、

我们使用静态编译,因为在linux内核文件中,我们并没有进行动态库的移植:

arm-linux-gcc –static syscall.c –o syscall

将编译好的文件,复制到我们的根文件系统之中。运行该程序,打印this is a new sys_call!

转载于:https://www.cnblogs.com/free-1122/p/11452253.html

第四季-专题8-LINUX系统调用相关推荐

  1. linux 系统调用 hook 总结

    1. 系统调用Hook简介 系统调用属于一种软中断机制(内中断陷阱),它有操作系统提供的功能入口(sys_call)以及CPU提供的硬件支持(int 3 trap)共同完成. 我们必须要明白,Hook ...

  2. Linux系统调用的实现机制分析

    [摘要]本文介绍了系统调用的一些实现细节.首先分析了系统调用的意义,它们与库函数和应用程序接口有怎样的关系.然后,我们考察了内核如何实现系统调用,以及执行系统调用的连锁反应:陷入内核,传递系统调用号和 ...

  3. linux系统调用挂钩方法总结

    相关学习资料 http://xiaonieblog.com/?post=121 http://hbprotoss.github.io/posts/li-yong-ld_preloadjin-xing- ...

  4. 【Linux 内核 内存管理】内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )

    文章目录 一.内存管理架构组成 ( 用户空间 | 内核空间 | MMU 硬件 ) 二.Linux 内核架构层次 三.Linux 系统调用接口 一.内存管理架构组成 ( 用户空间 | 内核空间 | MM ...

  5. Linux系统调用FAQ

    1. Linux系统调用的作用? 系统调用是操作系统为用户态运行的进程与系统内核.硬件设备(如CPU.磁盘.打印机等)进行交互提供的一组接口,在应用程序和硬件之间设置一个额外层的优点包括: 1.    ...

  6. 64位汇编之linux系统调用

    linux系统中64位汇编和32位汇编的系统调用主要有以下不同: (1)系统调用号不同.比如x86中sys_write是4,sys_exit是1:而x86_64中sys_write是1, sys_ex ...

  7. Linux系统调用及其效率

    操作系统相关概念: 操作系统---管理计算机硬件与软件资源的软件,是用户与系统操作交互的接口,为在它上面运行的程序提供服务. 操作系统内核 ----操作系统的核心.负责管理系统的进程.内核.设备驱动程 ...

  8. linux系统调用理解之摘录(3)

    Linux系统调用需要持续不断地深入理解,因此这里收集一些较好的博客,以便后续自己参考研究: (1)Linux 库函数与系统调用的关系与区别 https://www.cnblogs.com/liwei ...

  9. linux系统调用理解之摘录(2)

    原文博客 http://blog.csdn.net/gatieme/article/details/50779184 Linux系统调用的实现机制分析 本文介绍了系统调用的一些细节. 首先,分析了系统 ...

  10. 使用 Linux 系统调用的内核命令图解

    http://www.ibm.com/developerworks/cn/linux/l-system-calls/ 使用 Linux 系统调用的内核命令

最新文章

  1. UIView Animation
  2. HTTP协议通信原理 (资源)
  3. ubuntu的SSH的安装和免密码登陆
  4. it is likely that the remote side declared peer gone on this jvm
  5. python精通多长时间_学Python需要多久能学会?精通Python需要多长时间?
  6. PHP用空格分割文本为数组的方法
  7. LeetCode 1457. 二叉树中的伪回文路径(位运算+递归)
  8. 如何把表格做成源代码_他来了,他来了,文字、表格、公式图片识别神器V0.1测试版...
  9. OpenVR——驱动接口之IServerTrackedDeviceProvider简介
  10. c语言 字母赋值给变量,C++变量(变量定义和赋值)详解
  11. android多图片拖动,Android实现图片拖动效果
  12. std::string与output-operator的兼容问题
  13. 传感器实验——蜂鸣器
  14. Linux系统安全基本措施及应用(关于账户安全以及sudo权限,安全认证等)
  15. word计算机相乘公式,怎么使用Word复制乘积公式
  16. 自称骇客的基本都是骗子
  17. 经商要看《大染坊》,做人要学陈寿亭
  18. 纸上得来终觉浅,决知此事要躬行
  19. 一分钟告诉你究竟DevOps是什么鬼?
  20. Mansory makeConstraints 、remakeConstraints 、updateConstraints 注意事项

热门文章

  1. Flutter实战之Android混合开发初探
  2. mysql dbf导入数据库_MySQL数据库如何导入dbf格式数据?
  3. Lyft 基于 Flink 的大规模准实时数据分析平台(附FFA大会视频)
  4. 15 张图,了解一下 TCP/IP 必知也必会的 10 个问题
  5. OpenGL ES总结(五)OpenGL 中pipeline机制
  6. android+4.3+usb存储模式,点点点:点出来安卓4.3的USB调试
  7. python配置文件模块_Python解析配置文件模块:ConfigPhaser
  8. linux鼠标移动消失,debian6升级后鼠标指针消失
  9. python元组排序_python元组怎么排序
  10. proteus三输入与非门名字_商标取名大全-有创意的2020商标名字大全