




已阅读5页,还剩83页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
9嵌入式Linux设备驱动程序开发,9.1设备驱动程序概述9.1.1设备驱动程序概述和驱动程序模块系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和计算机硬件之间的接口设备驱动程序阻止了应用程序的硬件细节,因此从应用程序的角度来看,硬件仅仅是设备文件,应用程序可以像常规文件那样操作硬件设备。 1、设备驱动器作为内核的一部分完成以下功能:并且初始化和释放设备将数据从内核转移到硬件以及从硬件读取数据。 读取应用程序传送到设备文件的数据,返回应用程序请求的数据,检测并处理设备发生的错误。 2,Linux内核采用可加载的模块设计,一般驱动程序也作为内核模块动态加载,但有些基本驱动程序直接编译为内核文件。 需要掌握一些模块相关命令。 1、lsmod列出系统中加载的所有模块的大小和名称等,3,2, modinfo参照模块信息,rmmod删除已装载的模块4、insmod和modprobe,装载模块insmod的功能没有modprobe的强度,modprobe在装载模块中指定模块文件的路径insmod需要指向模块所在目录的绝对路径,并且必须带有模块文件名后缀(modulefile.o或modules file.ko )。5,mkmod用于创建相关模块,4, 9.1.2设备文件的分类通常分为3种:块的设备文件、字符设备文件和网络设备文件的块设备文件,通常需要以块方式写入的设备字符设备文件通常可以直接读写,缓冲器9.1.3设备号在Linux内核中指示主设备号识别与该设备对应的驱动器,并为该设备(即/dev以下的设备文件)服务Linux内核使用哪个驱动器。 辅助设备编号用于标识特定的唯一设备。 6,9.1.4驱动器层次,用户程序进程,输入输出请求,输入输出响应,(设备)文件系统,设备驱动程序,设备服务子例程,中断处理程序,物理设备控制器,物理设备图9.1Linux输入输出系统层次和功能,7, 9.1.5设备驱动程序和外部接口Linux设备驱动程序和外部接口, 三个部分:驱动器和OS内核接口:可以连接到驱动器和设备接口:用于使用接口:驱动器通过数据结构file_operations初始化设备可描述驱动程序如何与设备交互以及与具体设备密切相关的、设备驱动程序、各设备、初始化、接口、系统引导、操作系统内核、接口、实现、数据结构接口,具体设备,交互,驱动程序和设备之间,图9.2设备驱动程序和外部接口,9,9.1.6设备驱动程序的特征, 如果内核代码:设备驱动程序属于内核的一部分,则系统可能会崩溃的内核接口:设备驱动程序必须为内核或其子系统提供标准接口。 例如,终端驱动程序必须向内核提供文件I/O接口。SCSI设备驱动程序向SCSI子系统提供SCSI设备接口,而SCSI子系统向内核提供文件I/O接口和缓冲区内核机制和服务:设备驱动器采用若干标准的内核服务。 大多数能够加载10、的Linux操作系统(例如,内存分配)的设备驱动程序可以在需要时加载到内核中,而在不需要时从内核进行卸载。 可配置的:Linux操作系统的设备驱动程序可以集成到内核的一部分中,并且可以根据需要集成到内核中。 编译系统时必须进行适当的设置。 动态:在系统启动并初始化每个设备驱动程序之后维护驱动程序控制的设备。如果不存在由该设备驱动程序控制的设备也不影响系统的操作,则此时的设备驱动程序将创建系统内存、11、9.2字符设备的驱动程序,1 .字符设备的驱动程序创建流程、模块、init_module ()、clean u 设备注册、设备功能、设备卸载、用户呼叫、图9.3设备驱动程序流程图、insmod、rmmod、12、 流程说明:当驱动程序静态编译为内核时,操作系统挂接的入口点可以通过调用insmod命令(而不是内核模块的一部分)动态加载到内核中。通过调用rmmod卸载13,gcc编译参数:-d _ _ kernel _ _-d模块ikernel src _ include _ dir模块必须在一个文件中实现init_module:insmod自动调用,并负责初始化任务。 kernel/include/Linux/init.hcleanup _ module :负责卸载时调用清除的工作,14,注意以下示例显示了实现最基本内核模块的程序框架,而不提供实际功能、15、# include # include # include/*函数说明*/static int _ _ init module _ init (void ) staticvoiddule _ clean up (void )/*模块注册函数*/module _ Inc module_exit(module_cleanup )、16,/*模块初始化*/static int _ _ init module _ init (void ) printk (kern _ crit“moduleinitfailsn”); return0; 模块结束*/staticvoidmodule _ clean up (void ) printk (kern _ crit moduleexiailsn ) return 0; init_module ()和cleanup_module ()函数不出现在以上示例中是因为在linux/init.h文件中存在宏定义,并且两个函数init_modulecleanup_module已经被替换。 init_module将被module_init(X )替换,cleanup_module将被module_exit(X )替换。 模块初始化之前的_init修饰符表示函数代码在启动时只运行一次,以后不再使用,因此可以释放它来节省内存容量。18、2 .关键数据结构用户应用调用设备的功能的部分在设备驱动程序中定义,file_operations是定义文件操作功能的数据结构,该结构定义了一系列I/O函数的入口,并且必须向驱动程序提供该数据结构的入口点file_operations结构在include/linux/fs.h中定义,19,驱动程序的大部分功能是“填写”结构中定义的函数(根据需要实现部分或全部函数):struct file _ operations 1 loff_t (* llseek ) (结构文件*、loff _ t、int ) ssize_t (*读取) (结构文件*、char_user*、size _ t、loff_t*; ssize_t (* AIO _ read ) (结构文件*、char_user*、size_t、loff _ t ) ssize _ t (*写入) (结构文件*、constchar_user*、size _ t、loff_t*; 20,ssize_t (* AIO _ write ) (结构键*,constchar_user*,size _ t,loff_t ); int (*读取器) (结构文件*、void*、文件dir _ t )未指定int (*池) (结构文件*、结构池_表结构*; int (* ioctl ) (结构节点*、结构文件*、未指定的int、未指定的长度) int (* mmap ) (结构文件*、结构VM _ area _ struct,21,int (*开放) int (* flush ) (结构文件*; int (* release ) (结构节点*、结构文件*; int (* fsync ) (结构文件*、结构目录*、intdatasync ) int (* AIO _ fsync ) (结构kiocb *、intdatasync) int(*fasync)(int,结构文件*,int ) int ssize _ t (* readv ) (结构文件*、结构*、未指定长度、关闭_ t * ) ssize _ t (* writev ) (结构文件*、结构*、未指定的长期、关闭_ t * ) 结构文件*、loff_t*、size_t、read_actor_t和void_user*; ssize_t (* sendpage ) (结构文件*、结构页*、int、size _ t、loff_t*、int ); 未指定的长度(* get _ unmapped _ area ) (结构文件*,未指定的长度,未指定的长度,未指定的长度,未指定的长度); long(*fcntl)(intfd,unsignedintcmd,unsignedlongarg,structfile*filp) ,23,其中structinode是特殊的设备文件/dev/driver (该设备名称为driver unsignedlongi_ino; /*Inodenumber*/umode_ti_mode;/* modeofthefile */nlink _ ti _ nlink; uid_ti_uid; gid_ti_gid; 24,dev_ti_rdev;/* devicemajorandominornumber */off _ ti _ size; time_ti_atime; time_ti_mtime; time_ti_ctime; unsignedlongi_blksize; unsignedlongi_blocks; 结构节点_operations*i_op; 结构用户块* I _ sb; structwait_queue*i_wait; 25,结构文件_ lock * I _ flock; structvm_area_struct*i_mmap; 结构节点*i_next、*i_prev; 结构节点*i_hash_next、*i_hash_prev; 结构节点*i_bound_by、*i_bound_by; unsignedshorti_count; unsignedshorti_flags;/* mount flags (see fs.h ) */unsigned chari _ lock; unsignedchari_dirt; unsignedchari_pipe; unsignedchari_mount; 26,unsignedchari_seek; unsignedchari_update; union struct pipe _ inode _ info pipe _ I; 结构minix _ inode _ info minix _ I; 结构ext _ inode _ info ext _ I; 结构msdos _ inode _ info msdos _ I; 结构iso _ inode _ info isofs _ I; 结构NFS _ inode _ info NFS _ I; union; 、27、structfile主要用于支持文件系统的设备驱动程序。 当然,也可以用于其他设备驱动程序。 提供有关打开文件的信息: # includestructfile mode _ TF _ mode; dev_tf_rdev;/* needed for/dev/tty */off _ TF _ pos;/* curr.posncoile */unsignedshortf _ flags;/* theflagsargpassedtoopen */unsignedshortf _ count;/* numberprofopensonthisfile */unsignedshortf _ reada; 结构节点*f_i节点/* pointertotheinodestruct * /结构文件_操作*f_i; /*pointertothefopsstruct*/; 在、28、fabric file _ operations中,表示设备驱动程序提供的入口点的位置。 (1)lseek、移动文件指针的位置分别仅适用于明显可随机访问的设备。 (2)read、读取操作、参数buf是存储读取结果的缓冲器,count是读取的数据长度。 如果返回值为负,则表示读取操作发生错误。 否则,返回实际读取的字节数。 对于字符类型,要读取的字节数和返回的实际读取字节数必须是I节点i_blksize的倍数。 (3)进行与3)write、read类似的写入。 29,(4)readdir获取以下目录入口点,仅使用与文件系统相关的设备驱动程序。 (5)select、进行选择操作,驱动程序未提供select条目时,select操作视为设备准备进
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 通讯系统安装施工方案(3篇)
- 温棚棉被施工方案(3篇)
- 能源环保施工方案(3篇)
- 芜湖节日活动策划拍摄方案(3篇)
- 物业水工考试题库及答案
- 北京市门头沟区2023-2024学年八年级上学期期末质量监测数学考题及答案
- 北京市朝阳区2023-2024学年七年级上学期期末考试英语试卷及答案
- 安徽省铜陵市枞阳县2024-2025学年高三下学期高考第一模拟考试(一模)语文试题及答案
- 智慧之果香蕉700字15篇
- 仙人掌作文400字14篇
- 实验室生物安全手册
- 《教学勇气-漫步教师心灵原书》
- 航天禁(限)用工艺目录(2021版)-发文稿(公开)
- Unit 8 Lets celebrate!教学设计2024-2025学年牛津译林版英语七年级上册
- 医院行政办公室主任职责
- 文言合集(1):120个文言实词小故事(教师版+学生版)
- 教科版(2024)小学科学一年级上册(全册)教案及反思(含目录)
- 争做“四有好老师”-当好“四个引路人”
- 【课件】2025届高三生物一轮复习备考策略研讨
- 中级会计师《经济法》历年真题及答案
- 高职院校高水平现代物流管理专业群建设方案(现代物流管理专业群)
评论
0/150
提交评论