字符设备驱动(二)
来源:互联网 发布:怎么统计淘宝分类消费 编辑:程序博客网 时间:2024/05/16 15:11
在字符设备驱动(一)那节中,我们学习了一个字符设备驱动程序设计的大体框架。但是字符设备驱动是如何实现的呢,这节我们就来深入理解一下内核驱动是怎么和应用程序联系在一起的。
首先我们在linux中创建一个read_mem.c的文件,如下图。
然后对其静态链接
arm-linux-gcc -static -g read_mem.c -o read_mem
然后对其反汇编,并将其放到dump文件中
arm-linux-objdump -D -S read_mem >dump
打开dump
vi dump
找到read函数执行的部分,发现首先将各类参数放到通用寄存器r1—-r4中,然后调用了_libc_read,再找到_libc_read部分。如下图。
_libc_read汇编代码很多,这里主要看红色框框里面的两行代码的内容,将3数值传给r7,然后再执行svc指令。
svc是系统调用指令,当执行这个指令的时候,pc指针会从用户空间进入到内核空间,进入内核空间的时候有一个固定的入口,然后取系统调用的编号number,这里就是取的3,根据这个编号去查表,这个可以参考之前我的系统调用那节,里面讲解的较详细,可以通过那节了解应用程序read怎么找到内核中的sys_read。
这里我主要说一下sys_read是怎么实现的:
1 内核源码Read_write.c这个文件包括了sys_read代码,通过形参中文件描述符fd会找到struct file,然后再利用struct file调用vfs_read函数。
2 在vfs_read函数中,利用所找到的struct file中的file_operation,file_operation中就存放着xxx_read设备方法,也就是上节我们实现的mem_read设备方法,这样就找到了mem_read这个设备方法并且调用它了。
以上就是应用程序一步一步如何找到xxx_read的内核代码,通过这个步骤的学习便于我们更好的了解设备驱动程序。
- 字符设备驱动(二)
- 字符设备驱动(二)
- 字符设备驱动(二)
- Linux设备驱动(二)字符设备
- 字符设备驱动(二)
- linux设备驱动(二)---字符设备之按键驱动
- Linux字符设备驱动(二)
- 字符设备驱动有关(二)
- linux字符设备驱动框架(二)
- 字符设备驱动笔记(二)
- 设备驱动之二----字符设备驱动
- 字符设备驱动学习(二) 设备接点的创建
- Linux设备驱动之字符设备(二)
- Linux字符设备驱动(二)
- Linux字符设备驱动(二)
- Linux字符设备驱动(二)
- Linux字符设备驱动(二)
- 【嵌入式Linux驱动开发】三、字符设备驱动(二)
- Java环境变量配置
- SQL常用字符函数
- 【深入PHP 面向对象】读书笔记(九)
- Faster-RCNN训练结果
- StringTokenizer的用法及示例
- 字符设备驱动(二)
- 第k个排列-LintCode
- BZOJ 1296 粉刷匠 (dp)
- 挑战程序设计竞赛 算法和数据结构 第13章 加权图
- ES5 数组方法map
- Ubuntu下在openCV3.2中配置opencv_contrib,然后使用SURF算子
- 【2011-2016】 NIPS汇总
- maven如何排除依赖
- Java笔记之HashSet与TreeSet集合的运用