




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
驱动硬件是操作系统最基本的功能 它通过驱动程序来操作硬件 驱动程序是内核和硬件之间的接口 为应用程序屏蔽了硬件的细节 驱动程序最为操作系统最基本组成部分 具有以下功能 对设备初始化和释放 驱动程序要完成设备注册 初始化及对设备的卸载数据传送 驱动程序最重要的功能就是在内核 硬件和应用程序之间传送数据 即把数据从内核传到硬件和从硬件读取数据 读取应用程序传给设备文件的数据和回送应用程序要求的数据检测和处理设备出现的错误 2020 3 23 1 Linux输入 输出系统层次结构和功能 2020 3 23 2 驱动程序通常是以内核模块的形式加载进内核或直接编译进内核 但编译进内核是某些驱动运行的唯一方法 例如 console驱动 flash驱动和对至少一种文件系统的支持等等 是内核的一部分 与应用程序的执行过程不同 模块通常只是预先向内核注册自己 当内核需要时响应请求 用户的应用程序以设备文件方式访问驱动程序 即linux把设备当文件 通过文件系统对设备进行访问所有的设备的驱动程序有共性 了解驱动程序的结构 对嵌入式系统的开发有价值 2020 3 23 3 设备驱动程序流程图 2020 3 23 4 Linux的设备管理 嵌入式Linux设备驱动程序的设计大致包括以下步骤 向系统申请也可以动态获得主 次设备号 实现设备初始化和卸载模块 以模块方式 设计对设备文件操作 如定义file operations结构 设计对设备文件操作调用 如read write等操作 实现中断服务函数 用request irq向内核注册 将驱动程序编译到内核或编译成模块 用ismod命令加载 生成设备节点文件 2020 3 23 5 模块作为一种抽象数据类型 它具有一个可以通过静态内核中断的接口 最小的模块结构必须包括两个函数 init module 和cleanup module 它们在系统加载模块和卸载模块时被调用 也可以编写一个只包括这两个函数的模块 这样该模块中唯一会被调用的函数就是模块被加载时所调用的函数init module 和模块被卸载时所调用的函数cleanup module 并且用函数init module 来启动模块加载期间的操作 用函数cleanup module 来停止这些操作 由于模块可以实现相当复杂的功能 故可以在模块中加入很多新函数以实现所期望的功能 不过加入模块的每个新函数都必须在该模块加载到内核中时进行注册 若该模块是静态加载的 则该模块的所有函数都是在内核启动时进行注册 若该模块是动态加载的 则这些新函数必须在加载这个模块时动态注册 当然 如果该模块被动态卸载了 则该模块的函数都必须从系统中注销 通过这种方式 当这个模块不在系统中时 就不能调用该模块的函数 其中注册工作通常是在函数init module 中完成的 而注销工作则是在函数cleanup module 中完成 1模块的组织结构 2020 3 23 6 应用程序与内核模块的比较 源程序 有main 没有main 内核模块结构 编译 gcc gcc加参数 幻33 运行 运行命令 模块加载 用命令insmodrmmod或内核裁减 以模块方式或编译进内核 由内核需要时调用 2020 3 23 7 内核模块结构 include 说明是个内核功能 include 声明是一个模块 其它header信息intinit module 加载时 初始化模块的编码如注册register chrdev 期望该模块所能实现的一些功能函数 如open release write read ioctl 等函数 voidcleanup module 卸载时 注销模块的编码 module init dri arch init module 加载本驱动是执行module exit dri arch cleanup module 卸载驱动时执行 2020 3 23 8 一般编译模块文件的命令格式如下 gcc O2 g Wall DMODULE D KERNEL c f I usr src linux 2 4 includefilename c filename c为自己编写的模块程序源代码文件 2 模块的编译 3 模块的加载 4 模块的卸载 Insmod命令调用module init rmmod命令调用module exit 2020 3 23 9 Linux内核模块结构介绍 include 所有模块都需要的头文件 include init 内核模块的基本框架 1 2 2020 3 23 10 Linux内核模块结构介绍 staticvoid exithello exit void printk Hellomoduleexit n module init hello init module exit hello exit 内核模块的基本框架 2 2 2020 3 23 11 Linux内核模块结构介绍 gcc D KERNEL DMODULE DLINUX I usr src linux2 4 include c ohello ohello cinsmod hello o rmmodhello 内核模块的编译和加载 2020 3 23 12 2020 3 23 13 2020 3 23 14 模块作为一种抽象数据类型 它具有一个可以通过静态内核中断的接口 最小的模块结构必须包括两个函数 init module 和cleanup module 它们在系统加载模块和卸载模块时被调用 也可以编写一个只包括这两个函数的模块 这样该模块中唯一会被调用的函数就是模块被加载时所调用的函数init module 和模块被卸载时所调用的函数cleanup module 并且用函数init module 来启动模块加载期间的操作 用函数cleanup module 来停止这些操作 由于模块可以实现相当复杂的功能 故可以在模块中加入很多新函数以实现所期望的功能 不过加入模块的每个新函数都必须在该模块加载到内核中时进行注册 若该模块是静态加载的 则该模块的所有函数都是在内核启动时进行注册 若该模块是动态加载的 则这些新函数必须在加载这个模块时动态注册 当然 如果该模块被动态卸载了 则该模块的函数都必须从系统中注销 通过这种方式 当这个模块不在系统中时 就不能调用该模块的函数 其中注册工作通常是在函数init module 中完成的 而注销工作则是在函数cleanup module 中完成 7 2 1模块的组织结构 2020 3 23 15 include 说明是个内核功能 include 声明是一个模块 其它header信息intinit module 加载时 初始化模块的编码 期望该模块所能实现的一些功能函数 如open release write read ioctl 等函数 voidcleanup module 卸载时 注销模块的编码 2020 3 23 16 一般编译模块文件的命令格式如下 gcc O2 g Wall DMODULE D KERNEL c f I usr src linux 2 4 includefilename c filename c为自己编写的模块程序源代码文件 7 2 2模块的编译 7 2 3模块的加载 7 2 4模块的卸载 2020 3 23 17 图7 1模块链接到内核的示意图 7 2 5模块链接到内核的示意图 2020 3 23 18 在内核是用一个file结构来识别模块 而且内核使用file operations结构来访问模块程序中的函数 file operations结构是一个定义在中的函数指针表 管理模块的文件操作 通常也称为 方法 它们都为structfile operations提供函数指针 在structfile operations中的操作一般按如下顺序出现 除非特别说明 一般它们返回0值时表示访问成功 发生错误时会返回一个负的错误值 目前共有13个操作 int lseek int read int write int readdir int select int ioctl int mmap int open void release int fsync int fasync int check media change int revalidate 用于字符设备的I O调用主要有 open release read write 和ioctl 7 2 6模块管理程序中的文件操作 2020 3 23 19 2020 3 23 20 驱动 2020 3 23 21 字符设备的注册 字符设备驱动程序入口点在xxx init modules函数 通过系统调用register chrdev 向系统注册字符型设备驱动程序 在内核中登记设备驱动程序 register chrdev 定义如下 include includeintregister chrdev unsignedintmajor constchar name structfile operations ops 2020 3 23 22 字符设备驱动程序注册要用到的数据结构定义 structdevice struct constchar name structfile operations chops staticstructdevice structchrdevs MAX CHRDEV 8 4 1字符类型设备的驱动程序 当字符设备向内核进行注册时 设备的file operations结构及其名字将被添加到一个全局性的chrdevs数组中去 这个数组是由一些device struct结构组成 数组的下标就是设备的主设备号 该数组被成为字符设备切换表 因此 通过查看chrdevs YOUR MAJOR fops 内核就会指导如何与设备进行交互一级设备支持那些入口点 当成功调用register chrdev后 设备注册到了内核 并且给定的文件操作结构也添加到了字符设备切换表里 2020 3 23 23 file operations结构定义如下 即定义chr设备的 fops staticintscull open structinode inode structfile filp 打开字符设备 staticintscull release structinode inode structfile filp 释放字符设备 staticssize tscull write structinode inode structfile filp constchar buffer intcount 将数据送往字符设备 staticssize tscull read structinode inode structfile filp char buffer intcount 从字符设备读出数据 写入用户空间 staticintscull ioctl structinode inode structfile filp unsignedlongintcmd unsignedlongarg 字符设备的控制操作 字符设备的结构 2020 3 23 24 file operations结构的定义 当一个进程试图对生成的设备进行操作的时刻就利用下面这个数据结构 这个结构就是提供给操作系统的接口 它的指针保存在设备表中 在init module 中被传递给操作系统 structfile operationsFops Get read device read write device write open device open ioctl device ioctl release device release 2020 3 23 25 open 函数staticintscull open structinode inode structfile filp MOD INC USE COUNT return0 release 函数staticintscull release structinode inode structfile filp MOD DEC USE COUNT return0 2020 3 23 26 驱动程序的测试 在该驱动模块程序编译加载后 再在 dev目录下创建模块设备文件chrdev 使用命令 mknod dev chrdevcmajorminor其中 c 表示moduledev是字符设备 major 是moduledev的主设备号 该
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 达标测试人教版9年级数学上册《圆》达标测试试题(详解版)
- 水泵供水工程施工方案
- 2026届山东省聊城阳谷县联考化学九上期中预测试题含解析
- 培训学校母亲节
- 2026届湖南省娄底市娄星区英语九上期末教学质量检测模拟试题含解析
- 足球培训机构合作
- 2026届北京市海淀中学化学九年级第一学期期末达标检测试题含解析
- 北京延庆县联考2026届英语九年级第一学期期末监测模拟试题含解析
- 2026届重庆市南开中学化学九上期中考试模拟试题含解析
- 湖北省武汉市楚才中学2024-2025学年八年级上学期10月月考物理试题(无答案)
- GB/T 29788-2013辐射防护仪器便携式表面污染光子测量仪和监测仪
- GB/T 18666-2014商品煤质量抽查和验收方法
- GB 3452.1-1992液压气动用O形橡胶密封圈尺寸系列及公差
- 坏死性筋膜炎49390课件
- JT∕T 651-2022 牵引杆挂车转盘
- 某公司项目启动会(38张)课件
- 全国水土保持规划国家级水土流失重点预防区和重点治理区复核划分
- DB13(J)∕T 269-2018 电动汽车充电站及充电桩建设技术标准
- 德国凯尔锚固技术公司石陶幕墙设计和施工中的应用
- 机动车交通事故快速处理协议书
- 临床营养支持小组工作方案
评论
0/150
提交评论