第四季-专题8-LINUX系统调用
专题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系统调用相关推荐
- linux 系统调用 hook 总结
1. 系统调用Hook简介 系统调用属于一种软中断机制(内中断陷阱),它有操作系统提供的功能入口(sys_call)以及CPU提供的硬件支持(int 3 trap)共同完成. 我们必须要明白,Hook ...
- Linux系统调用的实现机制分析
[摘要]本文介绍了系统调用的一些实现细节.首先分析了系统调用的意义,它们与库函数和应用程序接口有怎样的关系.然后,我们考察了内核如何实现系统调用,以及执行系统调用的连锁反应:陷入内核,传递系统调用号和 ...
- linux系统调用挂钩方法总结
相关学习资料 http://xiaonieblog.com/?post=121 http://hbprotoss.github.io/posts/li-yong-ld_preloadjin-xing- ...
- 【Linux 内核 内存管理】内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )
文章目录 一.内存管理架构组成 ( 用户空间 | 内核空间 | MMU 硬件 ) 二.Linux 内核架构层次 三.Linux 系统调用接口 一.内存管理架构组成 ( 用户空间 | 内核空间 | MM ...
- Linux系统调用FAQ
1. Linux系统调用的作用? 系统调用是操作系统为用户态运行的进程与系统内核.硬件设备(如CPU.磁盘.打印机等)进行交互提供的一组接口,在应用程序和硬件之间设置一个额外层的优点包括: 1. ...
- 64位汇编之linux系统调用
linux系统中64位汇编和32位汇编的系统调用主要有以下不同: (1)系统调用号不同.比如x86中sys_write是4,sys_exit是1:而x86_64中sys_write是1, sys_ex ...
- Linux系统调用及其效率
操作系统相关概念: 操作系统---管理计算机硬件与软件资源的软件,是用户与系统操作交互的接口,为在它上面运行的程序提供服务. 操作系统内核 ----操作系统的核心.负责管理系统的进程.内核.设备驱动程 ...
- linux系统调用理解之摘录(3)
Linux系统调用需要持续不断地深入理解,因此这里收集一些较好的博客,以便后续自己参考研究: (1)Linux 库函数与系统调用的关系与区别 https://www.cnblogs.com/liwei ...
- linux系统调用理解之摘录(2)
原文博客 http://blog.csdn.net/gatieme/article/details/50779184 Linux系统调用的实现机制分析 本文介绍了系统调用的一些细节. 首先,分析了系统 ...
- 使用 Linux 系统调用的内核命令图解
http://www.ibm.com/developerworks/cn/linux/l-system-calls/ 使用 Linux 系统调用的内核命令
最新文章
- UIView Animation
- HTTP协议通信原理 (资源)
- ubuntu的SSH的安装和免密码登陆
- it is likely that the remote side declared peer gone on this jvm
- python精通多长时间_学Python需要多久能学会?精通Python需要多长时间?
- PHP用空格分割文本为数组的方法
- LeetCode 1457. 二叉树中的伪回文路径(位运算+递归)
- 如何把表格做成源代码_他来了,他来了,文字、表格、公式图片识别神器V0.1测试版...
- OpenVR——驱动接口之IServerTrackedDeviceProvider简介
- c语言 字母赋值给变量,C++变量(变量定义和赋值)详解
- android多图片拖动,Android实现图片拖动效果
- std::string与output-operator的兼容问题
- 传感器实验——蜂鸣器
- Linux系统安全基本措施及应用(关于账户安全以及sudo权限,安全认证等)
- word计算机相乘公式,怎么使用Word复制乘积公式
- 自称骇客的基本都是骗子
- 经商要看《大染坊》,做人要学陈寿亭
- 纸上得来终觉浅,决知此事要躬行
- 一分钟告诉你究竟DevOps是什么鬼?
- Mansory makeConstraints 、remakeConstraints 、updateConstraints 注意事项
热门文章
- Flutter实战之Android混合开发初探
- mysql dbf导入数据库_MySQL数据库如何导入dbf格式数据?
- Lyft 基于 Flink 的大规模准实时数据分析平台(附FFA大会视频)
- 15 张图,了解一下 TCP/IP 必知也必会的 10 个问题
- OpenGL ES总结(五)OpenGL 中pipeline机制
- android+4.3+usb存储模式,点点点:点出来安卓4.3的USB调试
- python配置文件模块_Python解析配置文件模块:ConfigPhaser
- linux鼠标移动消失,debian6升级后鼠标指针消失
- python元组排序_python元组怎么排序
- proteus三输入与非门名字_商标取名大全-有创意的2020商标名字大全