




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
字符设备驱动程序框架 教学回顾 字符设备驱动程序编写的流程生成设备文件的命令是什么 教学内容 字符设备驱动框架open系统调用分析操作硬件设备文件的自动建立 教学要求 理解字符设备的框架掌握操作硬件的方法掌握自动生成设备文件的方法 字符设备驱动框架 file inode file operations之间的关系file表示打开的文件inode表示保存在磁盘上的文件所以硬盘格式化的时候 操作系统自动将硬盘分成两个区域 一个是数据区 存放文件数据 另一个是inode区 inodetable 存放inode所包含的信息 查看每个硬盘分区的inode总数和已经使用的数量 df i查看每个inode节点的大小 可以用如下命令 sudodumpe2fs h dev hda grep Inodesize file operations表示硬件操作函数的集合 字符设备驱动框架 三者的关系如下图 字符设备驱动框架 每一个设备都有自己的底层操作函数 也就是说每一个设备都对应着自己的file operations结构体 那么打开的文件file f op指针应该指向那一个file operations结构体呢 或者说file f op怎样找到对应的file operations呢 跟打开的设备文件里面的信息有关通过分析字符设备的代码来了解其核心过程字符设备的源码在文件fs char dev c中 包括设备号申请函数 cdev注册函数都在这个文件里面实现 字符设备驱动框架 申请设备号的过程分析设备号的注册或自动分配函数是下面两个alloc chrdev region register chrdev region 两个函数都会调用 register chrdev region 函数 这个函数完成如下操作 如果是自动分配设备号在全局数组chrdevs 中找到一个空位 这个空位的数组下标就是主设备号 设置这个空位 如果是直接注册设备号以主设备号为下标 找到数组chrdevs 中的成员 设置这个成员 全局数组chrdevs 当前的成员数为255 下标从0 254 也就是说 当前内核的字符设备主设备号范围0 254 注册cdev分析cdev结构的注册分两步 第一步是初始化cdev结构 第二步是注册 cdev add 函数分析如下 字符设备驱动框架 字符设备驱动框架 内核使用一个数据结构cdev map来记录系统中所有的字符设备 cdev 而设备号的维护是由全局chrdevs 来完成的 在驱动模块入口函数中 申请设备号 就是在数组chrdevs 中找一个空位 注册字符设备 就是将cdev添加到cdev map中 字符设备驱动框架 字符设备注册过程如下图 open系统调用分析open系统调用的实现在fs open c文件中 open系统调用分析 而do filp open 函数会调用nameidata to filp 函数 nameidata to filp 调用 dentry open open系统调用分析 dentry open 函数最终会调用inode i fop open函数我们知道 inode对应一个文件 我们在创建一个设备文件时 就是创建一个inode 当我们在用户空间创建设备文件时 对应的inode i fop指向fs char dev c中的def chr fops def chr fops的成员open指向chrdev open 函数 open系统调用分析 open系统调用的层次如下 open系统调用分析 chrdev open函数分析 open系统调用总体过程 open系统调用的总体过程如下图 结论 从上面分析字符设备的框架我们可以得出以下结论 编写字符设备驱动程序的流程如下 编写底层操作函数在全局数据结构cdev map中找到一个空位 注册设备号 将底层操作函数的集合填到cdev map结构中 注册cdev 操作硬件 对于嵌入式的CPU来说 CPU里面集成了各种设备的控制器 要对外设进行操作 主要是通过对于控制器的寄存器来实现 而对于ARM来说 控制器的寄存器跟内存是同一编址的 访问控制器的寄存器就好像访问内存一样 例如 FS2410开发板上的LED灯对于GPFIO口寄存器的地址如下 操作硬件 而对于linux系统来说 启动了MMU单元 因此CPU要访问的地址有要经过MMU 而不是直接操作内存 启动MMU之后 CPU发出的地址是虚地址 相对应的实地址 就是真真实实的 由布板时候决定的地址 因此 在驱动程序里面 想要访问控制寄存器 就必须建立实地址到虚地址的映射 通过映射后的虚地址去访问相应的控制寄存器 操作硬件 内核里面 通过一个宏来建立实地址到虚地址的映射 这个宏是 ioremap paddr size 宏的第一个参数是要映射的实地址 第二个参数是要映射的大小 宏返回映射后的虚拟地址 例如 GPF控制寄存的地址映射如下 unsignedlongviraddr viraddr ioremap 0 x56000050 12 通过 volatileunsignedlong viraddr就可以在内核中访问GPF寄存器 取消映射的宏是 iounmap viraddr 设备文件的自动建立 设备文件的建立有手动和自动两种方法来创建 手动方法就是使用mknod命令来建立设备文件 而自动创建设备文件的方法经历了很多的变化 早期的自动建立设备文件是由内核去建立的 也就是说内核有个功能模块 devfs 专门负责创建设备文件 这个访问增加了内核的负担 现在已经被丢弃了 现在自动创建设备文件的方法是通过用户的一个应用程序mdev udev 来实现 设备文件的自动建立 mdev的工作原理mdev扫描 sys class目录下的dev属性文件 从该dev属性文件中获取到设备编号 并以包含该dev属性文件的目录名称作为设备名 在 dev目录下创建相应的设备文件 例如 在开发中 设备文件名为event0 主设备号是 13 次设备号是64mdev程序就根据这个来创建设备文件 设备文件的自动建立 从mdev的工作原理可以得出结论 驱动程序只需要在 sys class目录下创建相应的目录和文件 就可以让mdev帮我们生成设备文件 相关的函数如下 class create owner name 创建一个类 就是在 sys class 目录下创建一个目录 structdevice device create structclass cls structdevice parent dev tdevt void drvdata constchar fmt fmt指明类目录下的目录 就是设备文件名 设备文件的自动建立 对应的清理函数 device destroy structclass class dev tdevt class destroy structclass cls 综合实例 FS2410的LED灯驱动实例要求 应用层 调用open方法打开设备文件是 灯亮 关闭文件时 灯灭 read时 读出LED亮灭的状态 一个字节 write时 写入一个字节 字节的头4位表示那个灯需要两 二进制位 00001000 表示第四个灯亮00000100 表示第三个灯亮
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 3810.18-2025陶瓷砖试验方法第18部分:光反射值(LRV)的测定
- JJF 2281-2025热量表通信技术协议计量技术规范
- 2025年河北地质大学选聘工作人员85人考前自测高频考点模拟试题附答案详解(突破训练)
- 2025年河北邢台威县招聘卫生专业技术人员133人考前自测高频考点模拟试题含答案详解
- 2025贵州安顺市参加“第十三届贵州人才博览会”引才271人考前自测高频考点模拟试题附答案详解(典型题)
- 安全培训教师与复杂性课件
- 安全培训教学课件内容
- 2025年长城钻探工程公司春季招聘(20人)模拟试卷附答案详解(黄金题型)
- 2025年烟台市蓬莱区卫健系统事业单位公开招聘工作人员(23人)考前自测高频考点模拟试题及参考答案详解
- 2025春季四川泸州市合江县卫生医疗机构编外人才招聘20人模拟试卷有答案详解
- 2025届大学生就业供需洞察报告
- 养老机构法律风险课件
- 小学课堂常规礼仪
- 肿瘤病人血管通路的选择
- 2025年 北京门头沟大峪街道社区储备人才招募考试试题附答案
- 科技安全课件
- 2025年重庆市中考英语试卷真题(含标准答案及解析)
- 档案公司借阅管理制度
- 药店医保考试试题及答案
- 酒质量安全管理制度
- 化工企业工艺联锁、报警管理制度
评论
0/150
提交评论