PCAppt课件 第七章 嵌入式设备驱动.ppt
《PCAppt课件 第七章 嵌入式设备驱动.ppt》由会员分享,可在线阅读,更多相关《PCAppt课件 第七章 嵌入式设备驱动.ppt(31页珍藏版)》请在三一办公上搜索。
1、第7章 嵌入式Linux的设备驱动,Linux系统驱动程序开发简介常用的系统支持 Linux系统网络设备驱动程序 编写Linux网络驱动程序中需要注意的问题,7.1 Linux系统驱动程序开发简介,Linux中设备被抽象出来,所有设备都看成文件如:系统中第一个IDE硬盘被表示成/dev/hda 设备的读写和普通文件一样 设备驱动程序主要完成这些功能:探测设备和初始化设备从设备接收数据并提交给内核从内核接收数据送到设备检测和处理设备错误,Linux设备驱动程序分类,Linux系统的设备分为字符设备(char device),块设备(block device)和网络设备(network devic
2、e)三种 字符设备是指存取时没有缓存的设备。如:系统的串口设备/dev/cua0和/dev/cua1 块设备的读写都有缓存来支持,并且块设备必须能够随机存取(random access),且不管块位于设备中何处都可以对其进行读写。块设备可以通过其设备相关文件进行访问,但更为平常的访问方法是通过文件系统。只有块设备才能支持可安装文件系统。如硬盘 用mknod命令创建的块设备特殊文件与字符设备特殊文件 网络设备在Linux里做专门的处理,可以通过BSD套接口访问。,1、核心代码 设备驱动是核心的一部分,象核心中其它代码一样,出错将导致系统的严重损伤。一个编写奇差的设备驱动甚至能使系统崩溃并导致文件
3、系统的破坏和数据丢失。2、核心接口 设备驱动必须为Linux核心或者其从属子系统提供一个标准接口。例如终端驱动为Linux核心提供了一个文件I/O接口而SCSI设备驱动为SCSI子系统提供了一个SCSI设备接口,同时此子系统为核心提供了文件I/O和buffer cache接口。,Linux核心中的设备驱动具有的共性:,3、核心机制与服务 设备驱动可以使用标准的核心服务如内存分配、中断发送和等待队列等等。4、动态可加载 多数Linux设备驱动可以在核心模块发出加载请求时加载,同时在不再使用时卸载。这样核心能有效地利用系统资源。5、可配置 Linux设备驱动可以连接到核心中。6、动态性 当系统启动
4、及设备驱动初始化时将查找它所控制的硬件设备。如果某个设备的驱动为一个空过程并不会有什么问题。此时此设备驱动仅仅是一个冗余的程序,它除了会占用少量系统内存外不会对系统造成什么危害。,驱动程序的几个概念,1、轮询与中断,轮询方式意味着需要经常读取设备的状态,一直到设备状态表明请求已经完成为止。如果设备驱动被连接进入核心,这时使用轮询方式将会带来灾难性后果:核心将在此过程中无所事事,直到设备完成此请求。但是轮询设备驱动可以通过使用系统定时器,使核心周期性调用设备驱动中的某个例程来检查设备状态。定时器过程可以检查命令状态及Linux软盘驱动的工作情况。使用定时器是轮询方式中最好的一种,但更有效的方法是
5、使用中断。,基于中断的设备驱动会在它所控制的硬件设备需要服务时引发一个硬件中断。如以太网设备驱动从网络上接收到一个以太数据报时都将引起中断。Linux核心需要将来自硬件设备的中断传递到相应的设备驱动。这个过程由设备驱动向核心注册其使用的中断来协助完成。此中断处理例程的地址和中断号都将被记录下来。在/proc/interrupts文件中你可以看到设备驱动所对应的中断号及类型:,0:727432 timer 1:20534 keyboard 2:0 cascade 3:79691+serial 4:28258+serial 5:1 sound blaster 11:20868+aic7xxx 13
6、:1 math error 14:247+ide0 15:170+ide1,2、直接内存访问(DMA),DMA控制器可以在不受处理器干预的情况下在设备和系统内存之间高速传输数据。,设备驱动使用DMA时必须十分小心。首先DMA控制器没有任何虚拟内存的概念,它只存取系统中的物理内存。同时用作DMA传输缓冲的内存空间必须是连续物理内存块。这意味着不能在进程虚拟地址空间内直接使用DMA。但是你可以将进程的物理页面加锁以防止在DMA操作过程中被交换到交换设备上去。另外DMA控制器所存取物理内存有限。DMA通道地址寄存器代表DMA地址的高16位而页面寄存器记录的是其余8位。所以DMA请求被限制到内存最低1
7、6M字节中。,Linux通过dma_chan(每个DMA通道一个)数组来跟踪DMA通道的使用情况。dma_chan结构中包含有两个域,一个是指向此DMA通道拥有者的指针,另一个指示DMA通道是否已经被分配出去。当敲入cat/proc/dma打印出来的结果就是dma_chan结构数组。,3、内存,设备驱动必须谨慎使用内存。由于它属于核心,所以不能使用虚拟内存。,Linux为设备驱动提供了一组核心内存分配与回收过程。核心内存以2的次幂大小的块来分配。如512或128字节,此时即使设备驱动的需求小于这个数量也会分配这么多。所以设备驱动的内存分配请求可得到以块大小为边界的内存。这样核心进行空闲块组合更
8、加容易。,请求分配核心内存时Linux需要完成许多额外的工作。如果系统中空闲内存数量较少,则可能需要丢弃些物理页面或将其写入交换设备。一般情况下Linux将挂起请求者并将此进程放置到等待队列中直到系统中有足够的物理内存为止。,4、设备驱动与核心的接口,Linux核心与设备驱动之间必须有一个以标准方式进行互操作的接口。每一类设备驱动:字符设备、块设备 及网络设备都提供了通用接口以便在需要时为核心提供服务。这种通用接口使得核心可以以相同的方式来对待不同的设备及设备驱动。如SCSI和IDE硬盘的区别很大但Linux对它们使用相同的接口。,Linux动态性很强。每次Linux核心启动时如遇到不同的物理
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PCAppt课件 第七章 嵌入式设备驱动 PCAppt 课件 第七 嵌入式 设备 驱动
链接地址:https://www.31ppt.com/p-3909499.html