《[精选]Linux设备驱动程序设计课程.pptx》由会员分享,可在线阅读,更多相关《[精选]Linux设备驱动程序设计课程.pptx(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Linux设备驱动程序设计参考书籍Linux设备驱动程序第三版 Jonatban Corbet等著 魏永明等译 中国电力出版社 Linux设备驱动开发详解第二版 宋宝华著 人民邮电出版社 Linux设备驱动开发技术及应用 韩俞永昌著 人民邮电出版社 Linux内核设计与实现第二版 Robert Love著 陈莉君等译 Linux设备驱动的现状n 高需求 Linux内核的绝大多数代码为设备驱动 新设备、新芯片、新驱动的需求n高门槛 涉及到大量硬件操作 涉及到内核基础知识 涉及到并发控制与同步 复杂的软件结构框架n高回报内核空间和用户空间 系统态系统态:在在Linux系统中,内核在最高级执行,也称
2、为系统中,内核在最高级执行,也称为“系统系统态,在这一级任何操作都可以执行。态,在这一级任何操作都可以执行。用户态:而应用程序则用户态执行在最低级,所谓的用户态:而应用程序则用户态执行在最低级,所谓的“用户态用户态,在这一级处理器禁止对硬件的直接访问和对内存的未授权访问。,在这一级处理器禁止对硬件的直接访问和对内存的未授权访问。内核空间:模块运行的空间是在所谓的内核空间:模块运行的空间是在所谓的“内核空间;内核空间;用户空间:应用程序运行的空间是在用户空间:应用程序运行的空间是在“用户空间用户空间 。它们分别引用不同的内存映射,也就是程序代码使用不同的它们分别引用不同的内存映射,也就是程序代码
3、使用不同的“地址空间。地址空间。Linux内核功能划分进程管理内存管理文件系统设备管理网络连接strcut net_deviceLinux内核功能进程管理进程管理负责创立和销毁进程,并处理它们与外界之间的通信控制进程如何共享CPU的调度器总之,在单个或者多个CPU上实现了多个进程的抽象内存管理内核在有限的可用资源之上为每一个进程创立了独立的虚拟内存空间MMU内核的各个局部在和内存管理系统交互的时候都使用相同的一组函数调用,包括简单的malloc/free和其他一些复杂的函数Linux内核功能文件系统文件系统是Linux基础内核在没有结构的硬件系统上面构造了结构化的文件系统Linux支持多种文件
4、系统类型YAFFS Yet Another Flash File System ROMFSRAMFSJFFS2Journaling Flash File System设备控制几乎每一个系统操作都会映射到物理设备上除去CPU,内存以及其他几个很有限的对象之外,几乎所有的设备控制操作都由与被控制设备相关的代码设备驱动程序来完成内核模块的构造和运行设备驱动程序的存在形式可卸载模块内核提供的特性可以在运行时进行扩展可在运行时添加到内核中的代码被称为“模块常用模块设备驱动和文件系统灵活编译进内核与内核其他的功能模块静态编译在一起,不可卸载内核态和用户态多数操作系统都把内核和应用程序分为2个层次管理内核态
5、有较高的权限,可以控制处理器内存的映射和内存的分配方式访问外设空间和处理器的特殊状态存放器,控制中断和DMA用户态权限低,优先级低处理器控制着对硬件的直接访问以及对内存的非授权访问具有不同的内存映射指针的传递处理get_user,put_user,copy_from_user,copy_to_user应用程序执行系统调用或者被硬件中断的时候由用户态转换为内核态,内核代码代表应用程序执行操作,能够访问进程地址空间的所有数据 可装载模块 Linux:内核提供的特性可在运行时进行扩展 模块模块 可在运行时添加到内核中的代码,包括但 不限于设备驱动程序 insmod 将模块连接到正在运行的内核 rmm
6、od 移除连接 嵌入式Linux的设备管理Linux将设备分成两大类:一类是块设备,类似磁盘以记录块或扇区为单位,成块进行输入/输出的设备;另一类是字符设备,类似键盘以字符为单位,逐个进行输入/输出的设备。网路设备是介于块设备和字符设备之间的一种特殊设备。块设备接口仅支持面向块的I/O操作,所有I/O操作都通过在内核地址空间中的I/O缓冲区进行,它可以支持随机存取的功能。文件系统通常都建立在块设备上。字符设备接口支持面向字符的I/O操作,由于它们不经过系统的快速缓存,所以它们负责管理自己的缓冲区结构。字符设备接口只支持顺序存取的功能,一般不能进行任意长度的I/O请求,而是限制I/O请求的长度必
7、须是设备要求的基本块长的倍数。处理器与设备间数据交换方式处理器与外设之间传输数据的控制方式通常有3种:查询方式、中断方式和直接内存存取DMA方式。1查询方式设备驱动程序通过设备的I/O端口空间,以及存储器空间完成数据的交换。例如,网卡一般将自己的内部存放器映射为设备的I/O端口,而显示卡则利用大量的存储器空间作为视频信息的存储空间。利用这些地址空间,驱动程序可以向外设发送指定的操作指令。通常来讲,由于外设的操作耗时较长,因此,当处理器实际执行了操作指令之后,驱动程序可采用查询方式等待外设完成操作。驱动程序在提交命令之后,开始查询设备的状态存放器,当状态存放器说明操作驱动程序在提交命令之后,开始
8、查询设备的状态存放器,当状态存放器说明操作完成时,驱动程序可继续后续处理。查询方式的优点是硬件开销小,使用起来比较简完成时,驱动程序可继续后续处理。查询方式的优点是硬件开销小,使用起来比较简单。但在此方式下,单。但在此方式下,CPU要不断地查询外设的状态,当外设未准备好时,就只能循环要不断地查询外设的状态,当外设未准备好时,就只能循环等待,不能执行其他程序,这样就浪费了等待,不能执行其他程序,这样就浪费了CPU的大量时间,降低了处理器的利用率。的大量时间,降低了处理器的利用率。2中断方式查询方式白白浪费了大量的处理器时间,而中断方式才是多任务操作系统中最有效利用处理器的方式。当CPU进行主程序
9、操作时,外设的数据已存入端口的数据输入存放器,或端口的数据输出存放器已空,此时由外设通过接口电路向CPU发出中断请求信号。CPU在满足一定条件下,暂停执行当前正在执行的主程序,转入执行相应能够进行输入/输出操作的子程序,待输入/输出操作执行完毕之后,CPU再返回并继续执行原来被中断的主程序。这样,CPU就防止了把大量时间消耗在等待、查询外设状态的操作上,使其工作效率得以大大提高。中断方式的原理示意图如图6.1所示。能够向CPU发出中断请求的设备或事件称为中断源。中断源向CPU发出中断请求,假设优先级别最高,则CPU在满足一定的条件时,可中断当前程序的运行,保护好被中断的主程序的断点及现场信息,
10、然后根据中断源提供的信息,找到中断效劳子程序的入口地址,转去执行新的程序段,这就是中断响应。CPU响应中断是有条件的,如内部允许中断、中断未被屏蔽、当前指令执行完等。CPU响应中断以后,就会中止当前的程序,转去执行一个中断效劳子程序,以完成为相应设备的效劳。系统引入中断机制后,CPU与外设处于“并行工作状态,便于实现信息的实时处理和系统的故障处理。3直接访问内存DMA方式利用中断,系统和设备之间可以通过设备驱动程序传送数据,但是,当传送的数据量很大时,因为中断处理上的延迟,利用中断方式的效率会大大降低。而直接内存访问DMA可以解决这一问题。DMA可允许设备和系统内存间在没有处理器参与的情况下传
11、输大量数据。设备驱动程序在利用DMA之前,需要选择DMA通道并定义相关存放器,以及数据的传输方向,即读取或写入,然后将设备设定为利用该DMA通道传输数据。设备完成设置之后,可以立即利用该DMA通道在设备和系统的内存之间传输数据,传输完毕后产生中断以便通知驱动程序进行后续处理。在利用DMA进行数据传输的同时,处理器仍然可以继续执行指令。什么是设备驱动程序DD?在Linux内核中扮演特殊角色,使某个特定硬件响应一个定义良好的内部编程接口,该接口完全隐藏设备的工作细节DD的任务是将用户的标准化调用作用于实际硬件的设备特有操作上为什么要编写设备驱动程序?Linux的设备驱动程序硬件设备与应用程序之间的
12、一个中间软件层它使得某个特定硬件能够响应一个定义良好的内部编程接口,同时完全隐蔽了设备的工作细节用户通过一组与具体设备无关的标准化的调用来完成相应的操作驱动程序的任务就是把这些标准化的系统调用映射到具体设备对于实际硬件的特定操作上驱动程序是内核的一局部,可以使用中断、DMA等操作驱动程序在用户态和内核态之间传递数据 设备驱动程序的作用机制:需要提供什么功能策略:如何使用这些功能分层的思想由于不同的环境需要不同的方式来使用硬件,因此应尽可能做到让驱动程序不带策略驱动程序应当处理如何使硬件可用的问题,而将如何使用硬件留给上层应用程序设备驱动程序主要功能设备驱动程序主要功能设备驱动程序主要完成如下功
13、能:检测设备和初始化设备使设备投入运行和退出效劳从设备接收数据并提交给内核从内核接收数据送到设备检测和处理设备错误另一角度:驱动程序可看作应用程序与实际设备之间的软件层即使对于相同的设备不同驱动程序可能提供不同功能,需要在许多因素间作出平衡三方面因素:提供给用户尽可能多的选项编写驱动程序占用的时间尽量保持程序简单嵌入式Linux驱动程序介绍n 嵌入式Linux驱动已经支持的设备门类齐全,已成为linux相对其他嵌入式操作系统的一大优势 工业控制常用的串口,并口 人机输入设备鼠标、键盘,触摸屏 彩色、黑白液晶显示输出 网络的完善支持,包括tcp/ip,udp,firewall,WLAN,ip f
14、orwarding,ipsec,vpn Usb的全面支持,包括usb硬盘、u盘,usb摄像头 支持丰富的文件系统,包括fat32,ntfs嵌入式驱动程序的作用嵌入式驱动程序的作用n 驱动程序提供软件访问硬件的机制 应用软件通过驱动程序平安高效的访问硬件 驱动程序文件节点可以方便的提供访问权限 控制 驱动程序作为一个隔离的中间层软件,将底层细节隐藏起来,提高了软件的可移植性 访问Linux设备驱动的方法设备提供dev文件系统节点和proc文件系统节点应用程序通过dev文件节点访问驱动程序应用程序通过proc文件节点可以查询设备驱动的信息驱动程序在哪儿驱动程序在哪儿驱动程序位于drivers目录下
15、驱动程序占kernel代码50%或以上Linux驱动程序编译方式驱动程序编译方式qLinuxLinux中驱动程序的使用可以按照两种方式进行编译:中驱动程序的使用可以按照两种方式进行编译:一种是静态编译进内核;一种是静态编译进内核;另一种是编译成模块以供动态加载。另一种是编译成模块以供动态加载。q注意:对于注意:对于uCLinuxuCLinux而言,由于其不支持模块动态加载,而言,由于其不支持模块动态加载,而且嵌入式而且嵌入式LinuxLinux不能够象桌面不能够象桌面LinuxLinux那样灵活的使用那样灵活的使用insmod/rmmodinsmod/rmmod加载、卸载设备驱动程序,因而通常
16、在加载、卸载设备驱动程序,因而通常在uCLinuxuCLinux中采用的是将设备驱动程序静态的编译进内核。中采用的是将设备驱动程序静态的编译进内核。Linux驱动程序开发建立嵌入式Linux平台,移植和编写驱动程序往往是最具挑战的工作驱动程序的开发周期一般较长,对产品的面世时间有着重要影响驱动程序质量的好坏,直接关系到系统工作效能和稳定性,对工程的成败起着关键作用设备驱动程序的分类字符设备字符设备所有能够象字节流一样访问的设备都通过字符设备来实现它们被映射为文件系统中的节点,通常在/dev/目录下面一般要包含open read write ioctl close等系统调用的实现块设备块设备通常
17、是指诸如磁盘、内存、Flash等可以容纳文件系统的存储设备。块设备也是通过文件系统来访问,与字符设备的区别是:内核管理数据的方式不同它允许象字符设备一样以字节流的方式来访问,也可一次传递任意多的字节。网络接口设备网络接口设备通常它指的是硬件设备,但有时也可能是一个软件设备如回环接口loopback,它们由内核中网络子系统驱动,负责发送hard_start_xmit和接收数据包。它们的数据传送往往不是面向流的,因此很难将它们映射到一个文件系统的节点上。Linux下设备驱动程序组成下设备驱动程序组成q自动配置和初始化子程序:自动配置和初始化子程序:负责检测所要驱动的硬件设备是否工作正常,如果该设负
18、责检测所要驱动的硬件设备是否工作正常,如果该设备正常,则对这个设备及其相关驱动程序所需要的软件备正常,则对这个设备及其相关驱动程序所需要的软件状态进行初始化。这局部驱动程序仅在初始化的时候被状态进行初始化。这局部驱动程序仅在初始化的时候被调用一次。调用一次。q效劳于效劳于I/OI/O请求的子程序:请求的子程序:该子程序称为驱动程序的上半部。这局部程序在执行时,该子程序称为驱动程序的上半部。这局部程序在执行时,系统仍认为与进行调用的进程属于同一个进程,只是由系统仍认为与进行调用的进程属于同一个进程,只是由用户态变成了核心态,可以在其中调用用户态变成了核心态,可以在其中调用sleepsleep等与
19、等与进程运行环境有关的函数。进程运行环境有关的函数。q中断效劳子程序:中断效劳子程序:称为驱动程序的下半部,由称为驱动程序的下半部,由LinuxLinux系统来接收硬件中断,系统来接收硬件中断,再由系统调用中断效劳子程序。再由系统调用中断效劳子程序。基本概念主设备号和次设备号主设备号和次设备号主设备号和次设备号能够唯一地标识一个设备128V2.0以前,256V2.0以后主设备号相同的设备使用相同的驱动程序,次设备号用于区分具体设备的实例动态获取主设备号Linux下对设备号的分配请参考Documentation/devices.txt设备文件设备文件 Linux使用设备文件来统一对设备的访问接口
20、,将设备文件放在/dev/目录下设备的命名一般为设备文件名+数字或者字母表示的子类,例如/dev/hda1,/dev/hda2等Linux 2.4以后引入了设备文件系统devfs的概念,所有的设备文件作为一个可以挂装的文件系统,这样就可以被文件系统统一管理,从而设备文件就可以挂装到任何需要的地方。一般将主设备建立一个目录,再将具体的子设备文件建立在此目录下。例如,/dev/mtdblock/0 基础知识回忆硬件局部:处理器、存储器、接口与总线 基本工具使用 时序图 硬件电路图 Linux内核的编译加载make menuconfigmake zImage make modules内核配置系统由以
21、下3局部组成:makefile:定义编译规则 Kconfig:给用户提供配置选择功能 配置工具:配置命令解释器和配置用户界面.config配置文件运行make menuconfig时,配置工具首先分析与体系结构对应的/arch/xxx/Kconfig文件,该文件除包含一些与体系结构相关的配置项外,通过source语句引入一系列Kconfig文件,而这些Kconfig可再次通过source引入下一层Kconfig一般地,驱开工程师在drivers目录的相应子目录增加新设备驱动代码,并增加或修改Kconfig配置文件和Makefile脚本小结:小结:Linux驱动程序驱动程序在在Linux操作系统
22、中驱动程序是操作系统内核与硬件设备操作系统中驱动程序是操作系统内核与硬件设备之间的之间的桥梁桥梁,它屏蔽了硬件的细节,它屏蔽了硬件的细节 如总线协议、如总线协议、DMA操操作等,在应用程序看来硬件设备只是一个特殊的文件。作等,在应用程序看来硬件设备只是一个特殊的文件。驱动程序的基本功能主要有以下几点:驱动程序的基本功能主要有以下几点:对设备的初始化和释放。如对音频设备而言包括向内核对设备的初始化和释放。如对音频设备而言包括向内核注册设备,设置音频的输入输出参数注册设备,设置音频的输入输出参数 采样频率、采样采样频率、采样宽度等、分配音频设备使用的内核内存等工作。宽度等、分配音频设备使用的内核内
23、存等工作。对设备进行管理。包括实时参数设置以及提供对设备的对设备进行管理。包括实时参数设置以及提供对设备的操作接口效劳。操作接口效劳。负责内核和设备之间的数据交换负责内核和设备之间的数据交换。这需要在用户空间、。这需要在用户空间、内核空间、总线及外设之间传输数据。内核空间、总线及外设之间传输数据。检测和处理设备工作过程中出现的错误。检测和处理设备工作过程中出现的错误。小结:小结:Linux驱动程序驱动程序Linux设备驱动程序一般集成在操作系统内核中,这样,设备驱动程序一般集成在操作系统内核中,这样,不同的应用程序就可以共享这些代码。设备驱动程序实际不同的应用程序就可以共享这些代码。设备驱动程
24、序实际是处理或操作硬件控制器的软件,从本质上讲,它们是内是处理或操作硬件控制器的软件,从本质上讲,它们是内核中具有高特权级的、驻留内存的、可共享的底层硬件处核中具有高特权级的、驻留内存的、可共享的底层硬件处理例程。理例程。设备驱动程序的一个基本特点就是对设备的抽象处理。设备驱动程序的一个基本特点就是对设备的抽象处理。系统中的所有硬件设备看起来都与一般的文件一样,它们系统中的所有硬件设备看起来都与一般的文件一样,它们可以使用处理文件的标准系统调用来翻开、关闭和读写。可以使用处理文件的标准系统调用来翻开、关闭和读写。即,即,Linux下的设备驱动程序被组织成一组完成不同任下的设备驱动程序被组织成一
25、组完成不同任务的函数的集合,通过这些函数使得务的函数的集合,通过这些函数使得Linux的设备操作犹的设备操作犹如文件一般。在应用程序看来,硬件设备只是一个设备文如文件一般。在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操件,应用程序可以象操作普通文件一样对硬件设备进行操作,如作,如open 、close 、read 、write 等。等。小结:小结:Linux驱动程序驱动程序qLinuxLinux下对外设的访问只能通过驱动程序来进行;下对外设的访问只能通过驱动程序来进行;qLinuxLinux具有统一的驱动程序接口,以文件操作的方式管理驱具有统一的驱动程
26、序接口,以文件操作的方式管理驱动程序,如:动程序,如:openopen、readread、writewriteq驱动程序是内核的一局部,可以使用中断、驱动程序是内核的一局部,可以使用中断、DMADMA等操作;等操作;q驱动程序需要在用户态和内核态之间传递数据;驱动程序需要在用户态和内核态之间传递数据;qLinuxLinux屏蔽了应用层对外设的直接访问;屏蔽了应用层对外设的直接访问;qLinuxLinux在用户态时不能处理中断。在用户态时不能处理中断。9、静夜四无邻,荒居旧业贫。11月-2311月-23Sunday,November 26,202310、雨中黄叶树,灯下白头人。05:49:140
27、5:49:1405:4911/26/2023 5:49:14 AM11、以我独沈久,愧君相见频。11月-2305:49:1405:49Nov-2326-Nov-2312、故人江海别,几度隔山川。05:49:1405:49:1405:49Sunday,November 26,202313、乍见翻疑梦,相悲各问年。11月-2311月-2305:49:1405:49:14November 26,202314、他乡生白发,旧国见青山。26 十一月 20235:49:14 上午05:49:1411月-2315、比不了得就不比,得不到的就不要。十一月 235:49 上午11月-2305:49Novembe
28、r 26,202316、行动出成果,工作出财富。2023/11/26 5:49:1405:49:1426 November 202317、做前,能够环视四周;做时,你只能或者最好沿着以脚为起点的射线向前。5:49:14 上午5:49 上午05:49:1411月-239、没有失败,只有暂时停止成功!。11月-2311月-23Sunday,November 26,202310、很多事情努力了未必有结果,但是不努力却什么改变也没有。05:49:1405:49:1405:4911/26/2023 5:49:14 AM11、成功就是日复一日那一点点小小努力的积累。11月-2305:49:1405:49N
29、ov-2326-Nov-2312、世间成事,不求其绝对圆满,留一份缺乏,可得无限完美。05:49:1405:49:1405:49Sunday,November 26,202313、不知香积寺,数里入云峰。11月-2311月-2305:49:1405:49:14November 26,202314、意志坚强的人能把世界放在手中像泥块一样任意揉捏。26 十一月 20235:49:14 上午05:49:1411月-2315、楚塞三湘接,荆门九派通。十一月 235:49 上午11月-2305:49November 26,202316、少年十五二十时,步行夺得胡马骑。2023/11/26 5:49:14
30、05:49:1426 November 202317、空山新雨后,天气晚来秋。5:49:14 上午5:49 上午05:49:1411月-239、杨柳散和风,青山澹吾虑。11月-2311月-23Sunday,November 26,202310、阅读一切好书如同和过去最杰出的人谈话。05:49:1405:49:1405:4911/26/2023 5:49:14 AM11、越是没有本领的就越加自命非凡。11月-2305:49:1405:49Nov-2326-Nov-2312、越是无能的人,越喜欢挑剔别人的错儿。05:49:1405:49:1405:49Sunday,November 26,2023
31、13、知人者智,自知者明。胜人者有力,自胜者强。11月-2311月-2305:49:1405:49:14November 26,202314、意志坚强的人能把世界放在手中像泥块一样任意揉捏。26 十一月 20235:49:14 上午05:49:1411月-2315、最具挑战性的挑战莫过于提升自我。十一月 235:49 上午11月-2305:49November 26,202316、业余生活要有意义,不要越轨。2023/11/26 5:49:1405:49:1426 November 202317、一个人即使已登上顶峰,也仍要自强不息。5:49:14 上午5:49 上午05:49:1411月-23MOMODA POWERPOINTLorem ipsum dolor sit amet,consectetur adipiscing elit.Fusce id urna blandit,eleifend nulla ac,fringilla purus.Nulla iaculis tempor felis ut cursus.感感 谢谢 您您 的的 下下 载载 观观 看看专家告诉
限制150内