




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
提纲,1、Linux下设备驱动程序简介2、设备驱动程序结构3、设备驱动实验实验一:编写一个简单的驱动程序实验二:设计和实现一个KED&LED驱动程序实验三:静态编译驱动程序,连接到内核实验四:使用中断方式的驱动程序设计,1,1、Linux下设备驱动程序简介,系统调用是操作系统内核和应用程序之间的接口设备驱动程序是操作系统内核和机器硬件之间的接口Linux设备驱动的特点是可以以模块的形式加载各种设备类型因为嵌入式设备往往具有大量的独有外设,开发人员需要把很多精力放在设备驱动方面,2,1.1Linux设备的分类,字符设备以字节为单位逐个进行I/O操作字符设备中的缓存是可有可无不支持随机访问如串口设备/dev/cua0和/dev/cua1块设备块设备的存取是通过buffer、cache来进行可以进行随机访问例如IDE硬盘设备/dev/hda可以支持可安装文件系统网络设备通过BSD套接口访问,3,1.2Linux设备文件,Linux抽象了对硬件的处理,所有的硬件设备都可以作为普通文件一样来看待可以使用和操作文件相同的、标准的系统调用接口来完成打开、关闭、读写和I/O控制操作对用户来说,设备文件与普通文件并无区别,4,1.3主设备号和次设备号,主设备号:标识该设备的种类,也标识了该设备所使用的驱动程序次设备号:标识使用同一设备驱动程序的不同硬件设备所有已经注册(即已经加载了驱动程序)的硬件设备的主设备号可以从/proc/devices文件中得到,5,1.4Linux设备驱动代码的分布,/block/char/cdrom/pci/scsi/net/sound注:IDE接口的CD驱动位于drivers/block/ide-cd.c中,而SCSICD驱动位于drivers/scsi/scsi.c中,6,1.5Linux设备驱动程序的特点,设备驱动是内核的一部分,影响内核稳定为内核或其从属子系统提供一个标准接口使用标准的内核服务如内存分配、中断和等待队列等大多数Linux设备驱动可以动态可加载Linux设备驱动程序可配置驱动程序维护其控制的设备,该设备即使不存在也不影响系统的运行,此时设备驱动只是占用少量系统内存,不会对系统造成什么危害,7,2、设备驱动程序结构,Linux的设备驱动程序与外界的接口可以分成三部分:与操作系统内核的接口与系统引导的接口与设备的接口Linux设备驱动程序的代码结构大致可以分为如下几个部分:驱动程序的注册与注销、设备的打开与释放、设备的读写操作、设备的控制操作、设备的中断和轮询处理。,8,2.1驱动程序的注册与注销,注册register_chrdev();/在fs/devices.cregister_blkdev();/在fs/block_dev.c注销unregister_chrdev()unregister_blkdev(),9,2.2打开、释放、读、写、控制等,10,Linux内核将通过file_operations结构访问驱动程序提供的函数字符设备的读写直接使用函数read()和write()块设备需要调用函数block_read()和block_write()ioctl()的用法与具体设备密切关联,因此需要根据设备的实际情况进行具体分析,11,2.3设备的轮询和中断处理,轮询内核定期对设备的状态进行查询消耗不少的内核资源如果设备驱动被连接进入内核,这时使用轮询方式将会带来灾难性的后果中断设备驱动向内核注册其使用的中断内核负责把硬件产生的中断传递给相应的设备驱动设备驱动在其中断处理过程中做得越少越好,12,问题:如何查看设备驱动所对应的中断号及类型?,13,3、设备驱动试验,实验一:编写一个简单的驱动程序实验二:设计和实现一个KED&LED实验实验三:动态加载和静态编译驱动到内核实验四:使用中断方式的驱动程序设计,14,实验一:编写简单的驱动程序(1),1)任务:在XSBase开发板上编写一个简单的字符设备驱动程序。该字符设备具备4个基本操作:xsbase_open()、xsbase_write()、xsbase_read()、xsbase_release(),实现向这个新建的字符设备先写入一些数据,然后再从这个设备中读取这些数据。,15,实验一:编写简单的驱动程序(2),2)主要数据结构和全局变量系统fs/devices.c的strucdevice_struct结构创建一个xsbase.c文件,其中包含一些必要的头文件、宏和全局变量,16,实验一:编写简单的驱动程序(3),主要接口函数file_operations结构的实例注:这种结构的声明方法是一种标记化格式声明,便于移植。,17,实验一:编写简单的驱动程序(4),xsbase_open()和xsbase_release(),18,实验一:编写简单的驱动程序(5),xsbase_read(),19,实验一:编写简单的驱动程序(6),xsbase_write(),20,实验一:编写简单的驱动程序(7),3)模块加载:是两种将驱动加入内核的方式之一编写init_module()res=register_chrdev(0,xsbase,21,实验一:编写简单的驱动程序(8),4)驱动安装过程新建xsbase.c文件,实现主要数据结构和函数接口。编译生成xsbase.o把目标文件加载到内核在Minicom中使用ZMODEM协议发送文件执行,22,实验一:编写简单的驱动程序(9),创建一个设备文件测试OVER,23,实验二:编写KED&LED驱动(1),在这个实验中,通过设计和实现一个KED&LED驱动程序,来控制目标板上的一组LED灯,在安装完驱动后,运行测试程序,就能点亮LED灯。,24,实验二:编写KED&LED驱动(2),25,实验三:静态编译驱动到内核(1),在确定自己代码位置的前提下,建立自己的源码目录、文件、Makefile、Config.in等。修改上层的config.in文件,把自己的驱动加入到内核配置系统中。修改上层Makefile,把自己的程序加入到内核编译系统中。确保自己的初始化函数被调用。drivers/char/mem.c中的chr_dev_init()或drivers/block/ll_rw_blk.c中的blk_dev_init()用宏module_init来申明你的初始化函数,26,实验三:静态编译驱动到内核(2),驱动位置和目录结构,27,实验三:静态编译驱动到内核(3),修改配置文件1)drivers/xsbase/Config.in,28,实验三:静态编译驱动到内核(4),2)arch/arm/config.in编写Makefile1)drivers/xsbase/Makefile,29,实验三:静态编译驱动到内核(5),2)drivers/Makefile3)Makefile,30,实验四:中断方式的驱动程序(1),注册中断处理程序什么叫中断信号线(IRQ号)?何时请求IRQ号更合适?初始化时设备第一次打开时,31,实验四:中断方式的驱动程序(2),编写中断处理程序,32,实验四:中断方式的驱动程序(3),中断处理机制的实现,33,实验四:中断方式的驱动程序(4),中断控制这些函数更新可编程中断控制器(PI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内经考试题及答案
- 汽修考试题及答案
- 中级财务会计(上)知到智慧树答案
- 工务维修考核试卷及答案
- 药品检查员能力提升培训班结业考试试题(附答案)
- 幼儿园教师业务考试试题及答案
- 内科考试题含答案
- 酒水饮料理论知识考核试题题库及答案
- 加氢工艺考试模拟卷及答案
- 国家基本药物培训试题及答案
- 2025年教科版新教材科学三年级上册全册教案设计(含教学计划)
- 医院药品采购与质量控制规范
- 枣庄学院《图学基础与计算机绘图》2024-2025学年第一学期期末试卷
- 2025版仓储库房租赁合同范本(含合同生效条件)
- GB 46031-2025可燃粉尘工艺系统防爆技术规范
- 2025至2030年中国纳米抛光浆料行业发展监测及发展趋势预测报告
- 养老护理员培训班课件
- 2025-2030城市矿产开发利用政策支持与商业模式创新报告
- 隔爆水棚替换自动隔爆装置方案及安全技术措施
- 近十年中职试卷及答案
- 股票k线图入门图解
评论
0/150
提交评论