《嵌入式系统驱动开发.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统驱动开发.ppt(133页典藏版)》请在知学网上搜索。
1、设备驱动程序DeviceDrivers嵌入式系统嵌入式系统设备驱动程序和内核插口nLinux内核必须才能用标准的方法和设备驱动程序交互。每一类的设备驱动程序:字符、块和网路,都提供了通用的插口供内核在须要恳求它们的服务的时侯使用。这种通用的插口意味着内核可以完全相同地看待一般是十分不同的设备和它们的设备驱动程序。诸如,SCSI和IDEc盘的行为十分不同,而且Linux内核对它们使用相同的插口。nLinux特别地动态,每一次Linux内核启动,它都可能遇见不同的化学设备因而须要不同的设备驱动程序。Linux容许你在构建内核时通过配置脚本,将设备驱动程序包含在内核中。n在系统启动时,这种设备驱
2、动程序初始化,此时它们可能没有发觉自己可以控制的任何硬件。其它驱动程序可以在须要的时侯作为内核模块加载。n为了处理设备驱动程序的这些动态特点,设备驱动程序要在它们初始化时向内核登记。Linux维护早已登记的设备驱动程序列表,作为和它们插口的一部份。这种列表包括了解释器表针和支持这一类设备的插口信息。字符设备字符设备n字符设备,Linux中最简单的设备,可以象文件一样访问。应用程序使用标准系统调用打开、读、写和关掉字符设备,完全把它们作为普通文件一样对待。甚至正在被PPP守护进程使用,用于将一个Linux系统联接到网上的modem,也被看作一个普通文件。当字符设备初始化时,它的设备驱动程序向Lin
3、ux内核登记,在chrdevs向量表降低一个device_struct数据结构条目。这个设备的主设备标示符(比如对于tty设备是4),用作这个向量表的索引。一个设备的主设备标示符是固定的。Chrdevs向量表中的每一个条目,即一个device_struct数据结构,包括两个元素:一个是指向登记的设备驱动程序名子的表针;另一个是指向一组文件操作的表针。这组文件操作本身坐落这个设备的字符设备驱动程序中,每一个都处理一个特定的文件操作,例如打开、读、写和关掉。/proc/devices中字符设备的内容来自chrdevs向量表n当代表一个字符设备(比如/dev/cua0)的字符特殊文件打开时,内核必须
4、做一些事情,进而去调用正确的字符设备驱动程序的文件操作类库。和普通文件或目录一样,每一个设备特殊文件都用VFSI节点抒发。这个字符特殊文件的VFSinode(实际上所有的设备特殊文件)包含有设备的major和minor标示符。这个VFSI节点由底层的文件系统(比如EXT2)创建,其信息是在查找这个设备特殊文件时,由实际的文件系统提供的。n每一个VFSI节点都关联着一组文件操作,它们依赖于I节点所代表的文件系统对象的不同而不同。不管代表一个字符特殊文件的VFSI节点哪些时侯创建,它的文件操作都被设置成字符设备的缺省操作。实际上只有一种文件操作:open操作。当一个应用程序打开这个字符特
5、殊文件时,通用的open文件操作使用设备的主设备标示符作为chrdevs向量表中的索引,取出这些特殊设备的文件操作块。它也构建描述这个字符特殊文件的file数据结构,让它的文件操作表针指向设备驱动程序中的相应操作。之后应用程序所有的文件系统操作都被映射到字符设备的文件操作。LinuxLinux设备驱动程序及开发设备驱动程序及开发Linux设备驱动程序概述设备驱动程序概述nLinux设备驱动程序是处理或操作硬件控制器的软件,被集成在内核中,是常驻显存的低级硬件处理程序的共享库,设备驱动程序是系统对设备的具象管理与控制。nLinux容许设备驱动程序作为内核可加载模块实现,即不仅可以在系统启动时进行
6、注册外,还可以在启动后进行加载注册。n操作系统的目标之一是向用户掩藏系统硬件设备的特殊性。诸如,虚拟文件系统呈现给用户一个统一的文件系统视图,而和底层的化学设备无关。nCPU不是系统中惟一的智能设备,每一个数学设备都由它自己的硬件控制器。鼠标、鼠标和串行口由SuperIO芯片控制,IDEc盘由IDE控制器控制,SCSIc盘由SCSI控制器控制,等等。n每一个硬件控制器都由自己的控制和状态寄存器(CSR),并且不同的设备有不同的寄存器。CSR用于启动和停止设备,初始化设备和确诊它的问题。管理这种硬件控制器的代码不是置于每一个应用程序里面,而是放到Linux内核。这种处理或则管理硬件控制器的软件叫
7、做设备驱动程序。n本质上,Linux内核的设备驱动程序是特权的、驻留在显存的、低级硬件控制类库的共享库。正是Linux的设备驱动程序处理它们所管理的设备的特点。nLinux的一个基本特征是它具象了对设备的处理。所有的硬件设备都象常规文件一样看待:它们可以使用和操作文件相同的、标准的系统调用来打开、关闭和读写。n系统中的每一个设备都用一个设备特殊文件代表。诸如系统中第一个IDE硬碟用/dev/hda表示。对于块(c盘)和字符设备,这种设备特殊文件用mknod命令创建,并使用主(major)和次(minor)设备编号来描述设备。nLinux支持三种类型的硬件设备:字符、块和网路。nLinux有许多
8、不同的设备驱动程序,它们都具有一些通常的属性:nKernelcodenKenelinterfacesnKernelmechanismsandservicesnLoadablenConfigurablenDynamicnKernelcoden设备驱动程序和内核中的其它代码相像,是kenel的一部份,假如发生错误,可能严重损害系统。一个拙劣的驱动程序甚至可能捣毁系统,可能破坏文件系统,遗失数据。nKenelinterfacesn设备驱动程序必须向Linux内核或则它所在的子系统提供一个标准的插口。诸如,终端驱动程序向Linux内核提供了一个文件I/O插口嵌入式系统接口设计与linux驱动程序开发,而SCSI设
9、备驱动程序向SCSI子系统提供了SCSI设备插口,接着,向内核提供了文件I/O和buffercache的插口。nKernelmechanismsandservicesn设备驱动程序使用标准的内核服务,比如显存分配、中断转发和等待队列来完成工作。nLoadablen大多数的Linux设备驱动程序,可以在须要的时侯作为内核模块加载,在不再须要的时侯卸载。这促使内核对于系统资源十分具有适应性和效率。nConfigurablenLinux设备驱动程序可以构建在内核。至于什么设备完善到内核,可以在内核编译的时侯配置。nDynamicn在系统启动,每一个设备启动程序初始化的时侯,它会查找它
10、管理的硬件设备。假如一个设备驱动程序所控制的设备不存在并没有关系。这时这个设备驱动程序只是多余的,占用极少的系统显存,而不会形成害处。Linux驱动程序开发n构建嵌入式Linux平台,移植和编撰驱动程序常常是最具挑战的工作n驱动程序的开发周期通常较长,对产品的面世时间有着重要影响n驱动程序质量的优劣,直接关系到系统工作效能和稳定性,对项目的胜败起着关键作用设备驱动程序主要功能设备驱动程序主要功能n设备驱动程序主要完成如下功能:设备驱动程序主要完成如下功能:n检查设备和初始化设备检查设备和初始化设备n使设备投入运行和退出服务使设备投入运行和退出服务n从设备接收数据并递交给内核从设备接收数据并递交
11、给内核n从内核接收数据送到设备从内核接收数据送到设备n检查和处理设备错误检查和处理设备错误Linux设备驱动程序分类nLinuxLinux中所有设备被具象下来,都看成文件中所有设备被具象下来,都看成文件n设备的读写和普通文件一样设备的读写和普通文件一样nLinuxLinux系统的设备分为如下三类:系统的设备分为如下三类:n字符设备字符设备(chardevice)(chardevice)n块设备块设备(blockdevice)(blockdevice)n网路设备网路设备(networkdevice)(networkdevice)n字符设备是指存取时没有缓存的设备字符设备是指存取
12、时没有缓存的设备n块设备的读写都有缓存来支持,且块设备必须块设备的读写都有缓存来支持,且块设备必须才能随机存取才能随机存取(randomaccess)n网路设备在网路设备在LinuxLinux里做专门的处理里做专门的处理Linux设备驱动程序分类网路设备在网路设备在LinuxLinux里做专门的处理里做专门的处理nLinuxLinux的网路系统主要是基于的网路系统主要是基于BSDunixBSDunix的的socketsocket机制。在系统和驱动程序之间定义有专门的数机制。在系统和驱动程序之间定义有专门的数据结构据结构(sk_buff)(sk_buff)进行数据的传递进行数据的传递
13、n系统里支持对发送数据和接收数据的缓存,提系统里支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多合同的支持供流量控制机制,提供对多合同的支持Linux设备驱动程序分类n典型的字符设备包括键盘,鼠标,串行口等典型的字符设备包括键盘,鼠标,串行口等n块设备主要包括硬碟、软盘设备、块设备主要包括硬碟、软盘设备、CD-ROMCD-ROM等等n一个文件系统要安装步入操作系统必须在块一个文件系统要安装步入操作系统必须在块设备上设备上Linux驱动程序介绍n嵌入式嵌入式LinuxLinux驱动早已支持的设备门类齐全,已成驱动早已支持的设备门类齐全,已成为其相对其他嵌入式操作系统的一大优势为其相对
14、其他嵌入式操作系统的一大优势n工业控制常用的并口,串口工业控制常用的并口,串口n人机输入设备如键盘、键盘,触摸屏人机输入设备如键盘、键盘,触摸屏n彩色、黑白液晶显示输出彩色、黑白液晶显示输出n网路的建立支持linux 分区,包括网路的建立支持,包括tcp/iptcp/ip,udpudp,firewallfirewall,WLANWLAN,ipforwardingipforwarding,ipsecipsec,vpnvpnnUsbUsb的全面支持,包括的全面支持,包括usbusb硬碟、硬盘、u硬盘,盘linux vi,usbusb摄像头摄像头n支持丰富的文件系统,包括支持丰富的文件系统,包括FAT32FAT32,NTFS
15、NTFS嵌入式设备框图嵌入式设备框图驱动程序的功用11、驱动程序直接操控硬件、驱动程序直接操控硬件n收发通信数据n读写储存介质,例如flash或硬碟n操作输出设备和执行机构,比如复印,开关门禁等驱动程序的功用(续)22、驱动程序提供软件访问硬件的机制、驱动程序提供软件访问硬件的机制n应用软件通过驱动程序安全高效的访问硬件n驱动程序文件可以便捷的提供访问权限控制n驱动程序作为一个隔离的中间层软件,将底层细节隐藏上去嵌入式系统接口设计与linux驱动程序开发,提升了软件的可移植性访问Linux设备驱动的方式n设备提供dev文件系统节点和proc文件系统节点n应用程序通过dev文件节点访问驱动程序n应用程序通过proc文件节点可以
16、查询设备驱动的信息驱动程序位置n驱动程序坐落驱动程序坐落driversdrivers目录下目录下n一般驱动程序占一般驱动程序占kernelkernel代码的代码的50%50%nLinuxLinux设备驱动程序在设备驱动程序在LinuxLinux的内核源代码中占有很大的比列,的内核源代码中占有很大的比列,源代码的宽度日渐降低,主要是驱动程序的降低。源代码的宽度日渐降低,主要是驱动程序的降低。n在在LinuxLinux内核的不断升级过程中,驱动程序的结构还是相对内核的不断升级过程中,驱动程序的结构还是相对稳定。稳定。n在在2.0.xx2.0.xx到到2.2.xx2.2.xx的变动里,驱动程序的编撰做了一些改变,的变动里,驱动程序的编撰做了一些改变,并且从并且从2.0.xx2.0.xx的驱动到的驱动到2.2.xx2.2.xx的移植只需做少量的工作。的移植只需做少量的工作。Linux驱动程序的特征n嵌入式Linux驱动程序需求多样n嵌入式设备硬件各异n嵌入式估算平台常常资源有限,例如处理速率、存储器容量、总线带宽、电池容量等n一般要求短的开发周期、压力大n开发驱动程序须要丰富的专业知识,包括