下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第8章Linux设备驱动程序,8.1 Linux驱动程序概述8.2 Linux设备管理结构8.3 Linux驱动程序开发基本8.4 Linux驱动程序编写,8.1 Linux驱动程序概述,8.1.1 Linux驱动程序简介8.1.2驱动程序角色8.1.3内置Linux 黑白液晶显示器输出支持嵌入式Linux的文件系统DOS/Windows兼容vfat、NTFS Linux固有ext2、ext3文件系统功能强大的企业级文件系统XFS、ReiserFS嵌入式闪存存储的JFFS2/YAFFS2文件系统堆栈集成文件系统UNIONFS cryptfs gzipfs实施UNIONFS USB Hard D
2、isk、Flash Disk USB Camera USB网卡USB HID支持多种标准总线和I/O规范;嵌入式Linux支持包括丰富的音频和视频硬件、mpeg4、wmv9、real codec等流行编解码器的嵌入式Linux支持图形硬件加速direct FB OpenGL es simple direct media layer Qt嵌入式GTK 2.0、8.1.2驱动程序layer驱动程序包括硬件直接操纵软件直接读写硬件寄存器、控制硬件操作设备缓冲区数据读写存储介质,如闪存或硬盘操作输出设备和执行器从应用程序节目创作者的角度来看,Linux驱动程序软件访问硬件提供机制应用软件驱动程序安全高
3、效的访问硬件驱动程序文件节点可以轻松提供访问控制设备驱动程序的隔离中间层软件隐藏基本细节,通过具有明确的软件可移植性和可重用性接口的Linux驱动程序轻松区分软件并隔离有缺陷的代码。对项目管理做出积极贡献,8.1.3嵌入式Linux驱动程序功能、嵌入式Linux驱动程序要求各种嵌入式设备硬件吞吐量、存储容量、总线带宽、电池容量等开发团队往往缺乏对上市时间的压力开发驱动程序等各种嵌入式处理器资源。包含硬件和软件的嵌入式系统硬件仍在更新进度国际嵌入式筹码供应商(例如Intel、Samsung、Freescale、TI、ST)每年都在比较新的Linux、PPC/PPC64、MIPS/MIPS64、x
4、86驱动程序open()release()read()write()write()这些函数内核可用于内核在适当的时候通过调用这些函数完成硬件访问等,并访问基于Linux设备的方法。提供设备通过dev文件系统节点和proc文件系统节点应用程序节目dev档案节点访问基于驱动程序字符的车手一般情况下,标准档案通过I/O访问块设备将文件系统加载到上层(例如,通过FAT32格式的internet设备访问套接字设备访问应用程序通过proc文件节点访问基于设备的信息可查询设备驱动程序内核源代码drivers目录下,按层类别放置驱动程序按kernel源代码50多个开发的驱动程序,放置在/lib/modules
5、/kernel-version中,8.1.4 Linux驱动程序开发过程驱动程序直接内核驱动程序编译内核引导时,以专用存储空间驱动程序模块的形式将文件系统存储在内存中,按需动态加载内核驱动程序请求,不使用时内存驱动程序节约与内核相对独立,升级灵活的许可方式灵活性驱动程序迁移/创建2。编译驱动程序C语言语法级别曹征3。加载驱动程序4。硬件和软件联合调试5。移除驱动程序6。代码重写、2迭代、交叉编译开发流程图、开发/调试迭代消耗大量开发时间驱动程序提供了多种茄子灵活的方法,可以减少迭代次数,减少每次迭代消耗的时间。驱动程序您可以使用以下技术更改参数配置:使用文件系统gdb、构建嵌入式Linux平台
6、、移植和编写驱动程序往往会延长最困难的工作驱动程序开发周期。直接关系到产品上市时间的重要影响驱动程序质量的好坏、系统工作性能和稳定性,对项目成败起着重要作用。分离硬件相关和硬件无关代码分割驱动程序抽象层是驱动程序行为设备驱动程序之间的互操作性设备驱动程序为用户提供的介面行为、8.2.4 Linux设备管理结构、8.2.1概述8.2.2字符设备和块设备8.2.3主和辅助设备编号8.2.4 Linux设备命名惯例、8.2.1概述、设备管理是输入输出子系统设备管理的目标是对所有外部设备执行良好的读、写和控制等操作。首先要解决的问题是总结任意设备的所有任务,并设计集成接口的方法。Linux内核体系结构
7、,内核经常使用设备类型、主设备编号和辅助设备编号标识特定设备。但是,用户希望能够使用相同的应用程序和命令访问设备和常规文件。为此,Linux中的设备管理应用了设备档案概念,从而集成了设备的访问接口。简而言之,系统希望所有类型设备的输入和输出看起来像普通文件的输入和输出。由于Linux将设备视为文件,因此设备的系统调用操作与档案操作(如open()、read()、write()、ioctl()和close()类似。应用程序发出系统调用命令时,将从用户状态转换为内核状态,通过内核将系统调用操作(如open()转换为物理设备。8.2.2字符设备和块设备以及字符设备按字节处理数据。字符设备通常只允许顺
8、序访问,通常不使用缓存技术。鼠标、音效卡等。块设备以块为单位进行处理,块大小通常为0.5KB到32KB等。大多数块设备允许随机访问,并经常使用缓存技术。块设备包括硬盘、光盘驱动器等。您可以检视/proc/devices档案。这里主要讨论文字设备。感兴趣的读者可以参考其他书上有关块设备的内容。8.2.3主设备号和辅助设备号,在设备管理中,除设备类型(字符或块设备)外,内核还需要一个对称主设备号和辅助设备号的参数来唯一标识设备。“major number(主设备编号)”等设备用于区分同一驱动程序、“minor number(辅助设备编号)”等特定设备的实例。例如,第一个IDE接口中的所有磁盘及其分
9、区共享相同的主设备编号3,但辅助设备编号为0,1,2,3。8.2.4 Linux设备命名约定,Linux习惯将设备文件放在目录/dev或其子目录下。指定设备档案名称(通常由两部分组成)的规则是,第一部分通常较短,只能有2到3个字符表示设备大类。例如,IDE接口等常规硬盘(例如,IDE接口的“HD”,软盘的“FD”)为“FD”。第二部分通常是用于区分设备实例的数字或字母。例如,/dev/hda、/dev/hdb和/dev/hdc表示第一个、两个和三个硬盘片段。Dev/hda1,/dev/hda2,/dev/hda3表示第一个硬盘第一个、第二个和第三个分区。8 . 3 Linux驱动程序,8.3.
10、1驱动程序基本功能8.3.2驱动程序工作进程8.3.3通用介面简介8.3.4通用函数原型,和8.3.1驱动程序基本功能,驱动程序基本功能包括:1.初始化和释放设备对于音频设备,包括向内核注册设备、设置音频的输入/输出参数(如采样频率、采样宽度等)、分配音频设备使用的内核内存等。2.管理设备。包含实时参数设置和设备的操作界面。3.应用程序读取传递到设备文件的数据,然后返回应用程序请求的数据。这需要在用户空间、内核空间、总线和外围设备之间传输数据。4.检测和处理设备中出现的错误。8.3.2驱动程序作业进程,例如键盘驱动程序,当程序读取/dev/tty档案(键盘)时,将执行fs/read _ wrr
11、ead中的系统调用sys _ read()Rw _ char(),然后通过中断处理程序的do_tty_interrupt()函数调用直接调用行规则函数copy_to_cooked()过滤该字符,并将该字符放在tty辅助队列secondary中执行上述tty,从而将牙齿字符放在tty写队列write_q中如果在牙齿时设置了端子的回显属性,则该字符将出现在屏幕上(注意:do_tty_interrupt()和copy_to_cooked()函数tty _,8.3.3公共介面)可以为NULL,以便在没有设备驱动程序通知的情况下每次打开设备时始终成功。Read():从设备读取数据,需要字符串指针。Wri
12、te():将数据写入文字设备,需要提供指向写入内容的指针。Ioctl():控制单元,例如控制盘弹出等。必须提供设备的预定义命令。llseek():重新定位读写位置,需要偏移参数。Flush():会清除内容。Release():关闭设备并释放资源等。MAP () :将设备内存映射到进程地址空间。通常,仅驱动程序使用块设备。执行选择,选择操作。如果驱动程序不提供select门户,则认为select操作已准备好执行所有I/O操作。,8.3.4常用函数原型,1 .设备操作函数原型位于系统内部,I/O设备的存储/提取通过每个设备的设备驱动程序提供的一组固定入口点完成。驱动程序设备提供的一组入口点(尤其是
13、Linux系统)在系统中描述为档案操作结构。File_operations结构在linux/fs.h文件中定义,随着内核升级运行,file_operations结构也越来越大,并且可能因内核版本的不同而略有不同。以下是file_operations结构2.4.18版、struct file _ operations struct module * owner;Loff _ t (* llseek) (structfile *,Loff _ t,int);Ssize _ t (* read) (structfile *、char *、size _ t、loff _ t *);Ssize _ t
14、(* write) (structfile *、constchar *、size _ t、loff _ t *);Int (* readdir) (structfile *,void *,fill dir _ t);Unsignedint (* poll) (structfile *,struct poll _ table _ struct *);Int (* ioctl) (struct inode *、struct file *、unsigned int、unsigned long);Int (* mmap) (structfile *,struct VM _ area _ struct *);Int (* open) (struct inode *,struct file *);int(* flash)(struct file *);int (*发行版)(struct inode *,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026卫校招生办面试题及答案
- 2026舞蹈理论面试题目及答案
- 购房合同书上协议占
- 拒绝签署协议书
- 2026年浙教版适配八年级物理开学摸底卷声光热综合应用标准试卷第482套(含答案解析与可打印作答区)
- 就2026年产品质量提升进行沟通交流的商谈函(3篇)
- 小学主题班会课件:学会感恩关爱他人
- 财务管理审核通知函7篇范文
- 2026年惠州市惠城区社区工作者招聘考试参考题库及答案详解
- 2026年湖南省张家界市社区工作者招聘笔试参考试题及答案详解
- GB/T 46563-2025公共机构能效分级导则
- 北京工业大学《机器学习》2024 - 2025 学年第一学期期末试卷
- 2025年电动车充电桩运营合同协议
- 铁矿石质量考试题及答案
- 生产成本控制及核算数据表格模板
- 项目化教学工作汇报
- GJB3165A-2020航空承力件用高温合金热轧和锻制棒材规范
- 2025年国开电大合同法论述案例分析题题库(含答案)
- 国家审计案例425
- 2020铁路路基工程施工安全技术规程
- 老年体检报告范文
评论
0/150
提交评论