博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
往Linux内核添加系统调用
阅读量:4285 次
发布时间:2019-05-27

本文共 552 字,大约阅读时间需要 1 分钟。

系统调用是由操作系统提供的应用函数编程接口,实现函数来源于系统内核。

在ARM处理器中,有一条汇编指令swi,这是一条软中断指令,执行该指令能够使pc指针从用户空间切换到内核空间。系统调用的实质流程是:
①往r0,r1等寄存器传递参数
②往r7寄存器写入系统调用编号
③执行swi指令跳转到内核空间


以ARM处理器为例,向Linux系统添加新的系统调用:

①往内核目录/kernel/中随意一个c文件中添加系统调用实现函数,也可往该目录添加新的源代码文件,但需要修改该目录下的Makefile。如往printk.c中添加新的函数sys_pk()

②/arch/arm/kernel/中的calls.S中的调用表添加CALL(sys_pk),使内核能够从该表中找到实现函数sys_pk

③/arch/arm/include/asm/中的unistd.h的宏定义中添加__NR_pk

④对内核重新编译,并下载到开发板重新运行

到此,内核代码修改完毕。应用程序调用内核函数sys_pk的代码如下:

void pk(){    __asm__ (    "ldr r7,=363 \n"    "swi \n"    :    :    :"memory");}void main(){    pk();   }

转载地址:http://vrigi.baihongyu.com/

你可能感兴趣的文章
分水岭算法(理论+opencv实现)
查看>>
《图像处理实例》 之 精确寻找一个圆
查看>>
opencv3.1+contrib的配置大总结(配置了两天,遇到问题无数)
查看>>
opencv小问题大智慧
查看>>
《图像处理实例》 之 车牌定位
查看>>
《opencv学习》 之 OTSU算法实现二值化
查看>>
《图像处理实例》 之 答题卡检测
查看>>
图像矩的初步探索(第十一天)
查看>>
《电路学习第一天》 之 电路设计之前的准备
查看>>
《电路学习第三天》 之 线性稳压电源的设计
查看>>
《图像处理实例》 之 目标旋转矫正(基于区域提取、DFT变换)
查看>>
不规则ROI的提取
查看>>
《图像处理实例》 之 提取特殊背景的直线
查看>>
《电路学习第三天》 之 彩扩机项目设计
查看>>
《图像处理实例》 之 物体计数
查看>>
《图像处理实例》 之 透视变换
查看>>
图像像素的获取和操作(第三天)
查看>>
图像像素的线性叠加(第四天)
查看>>
制作多张“像素、通道、大小”相同的图片
查看>>
中值、均值、高斯、双边滤波(第五天)
查看>>