篇四、Linux应用程序访问驱动程序过程
来源:互联网 发布:c语言window创建文件 编辑:程序博客网 时间:2024/05/07 08:36
首先,read位于用户空间,read的实现代码位于内核中,read函数是如何找到内核中的实现代码的呢?静态链接编译read.c,然后反汇编,查看反汇编,发现其调用_libc_read,分析_ibc_read,主要关注两行代码,把3传到r7中去,然后调用SVC指令。SVC称为系统调用指令,当使用这个指令之后,pc指针会从用户空间进入内核空间,而且入口是固定的。然后内核会去取num=3的read的系统调用编号,然后根据num=3查表,查出内核中对应read系统调用的sysread,也就是sysread就是read系统调用再内核中的代码,然后sysread就被调用。可以通过查看内核代码entry-common.S\arch\arm\kernel来验证。
ENTRY(vector_swi)就是对应的入口函数,然后注释中的Get the system call number就是获取系统调用的编号,接下来查表,继续往下浏览代码,找到sys_call_table,搜索一下,ENTRY(sys_call_table),由于发现其包含call.S文件,打开这个文件,查看表,通过3这个编号,找到了CALL(sys_read)函数。
其次,分析sys_read函数是如何实现的。直接查找此函数,不好找,它隐藏在read_write.c中,打开后,宏SYSCALL_DEFINE3(read,unsigned int fd,char _user*,buf,size_t,count) 加上()中的这些参数其实就变成了一般的函数。这也就是sys_read的实现代码。sys_read中调用vfs_read函数,此函数又会根据设备的file结构,取到file结构中的struct file operation(struct file operation是编写驱动程序的时候赋值给我们的设备文件的),struct file operation中调用xx_read,调用的代码就是ret=file->f_op->read(file,buf,count,pos)
总结,应用层read--->入口--->取num--->查表。查表-->sys_read--->vfs_read--->file-->struct file operation--->xx_read.- 篇四、Linux应用程序访问驱动程序过程
- linux驱动程序 硬件访问
- Web应用程序访问过程
- Linux应用程序访问字符设备驱动详细过程解析
- 创建一个驱动程序安装应用程序的过程
- Linux驱动程序-硬件访问笔记
- Linux驱动程序-硬件访问笔记
- linux驱动程序与应用程序函数的联系
- linux驱动程序与应用程序函数的联系
- linux 应用程序安装过程
- [原创]内核代码导读--应用程序如何访问驱动程序
- linux设备驱动程序注册过程详解
- linux设备驱动程序注册过程详解
- linux设备驱动程序注册过程详解
- linux设备驱动程序注册过程详解
- linux设备驱动程序注册过程详解
- linux设备驱动程序注册过程详解
- 驱动程序过程
- 涨姿势 |你所不知道的5 个AR增强现实新趋势
- 两种include方式及filter中的dispatcher解析
- 剖析http get和post请求的区别
- iOS-程序中拨打电话
- 非常实用的webstorm的快捷键
- 篇四、Linux应用程序访问驱动程序过程
- 多线程使用方法1
- [atom] error while loading shared libraries: libXss.so.1: cannot open shared object file:
- CPU与存储器
- DNS域名解析过程
- 默认端口
- Android support-annotations ColorRes 冲突的解决办法
- 使滚动条一直在底部
- 在CentOS6.5中安装和测试puppet的实践记录