嵌入式系统驱动开发.ppt
《嵌入式系统驱动开发.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统驱动开发.ppt(133页珍藏版)》请在三一办公上搜索。
1、设备驱动程序Device Drivers,嵌入式系统,设备驱动程序和内核接口,Linux内核必须能够用标准的方式和设备驱动程序交互。每一类的设备驱动程序:字符、块和网络,都提供了通用的接口供内核在需要请求它们的服务的时候使用。这些通用的接口意味着内核可以完全相同地看待通常是非常不同的设备和它们的设备驱动程序。例如,SCSI和IDE磁盘的行为非常不同,但是Linux内核对它们使用相同的接口。,Linux非常地动态,每一次Linux内核启动,它都可能遇到不同的物理设备从而需要不同的设备驱动程序。Linux允许你在建立内核时通过配置脚本,将设备驱动程序包含在内核中。,在系统启动时,这些设备驱动程序初
2、始化,此时它们可能没有发现自己可以控制的任何硬件。其它驱动程序可以在需要的时候作为内核模块加载。,为了处理设备驱动程序的这种动态特性,设备驱动程序要在它们初始化时向内核登记。Linux维护已经登记的设备驱动程序列表,作为和它们接口的一部分。这些列表包括了例程指针和支持这一类设备的接口信息。,字符设备,字符设备,Linux中最简单的设备,可以象文件一样访问。应用程序使用标准系统调用打开、读、写和关闭字符设备,完全把它们作为普通文件一样对待。甚至正在被PPP守护进程使用,用于将一个Linux系统连接到网上的modem,也被看作一个普通文件。当字符设备初始化时,它的设备驱动程序向Linux内核登记,
3、在chrdevs向量表增加一个device_struct数据结构条目。这个设备的主设备标识符(例如对于tty设备是4),用作这个向量表的索引。一个设备的主设备标识符是固定的。Chrdevs向量表中的每一个条目,即一个device_struct数据结构,包括两个元素:一个是指向登记的设备驱动程序名字的指针;另一个是指向一组文件操作的指针。这组文件操作本身位于这个设备的字符设备驱动程序中,每一个都处理一个特定的文件操作,比如打开、读、写和关闭。/proc/devices中字符设备的内容来自chrdevs向量表,当代表一个字符设备(例如/dev/cua0)的字符特殊文件打开时,内核必须做一些事情,从
4、而去调用正确的字符设备驱动程序的文件操作例程。和普通文件或目录一样,每一个设备特殊文件都用VFS I节点表达。这个字符特殊文件的VFS inode(实际上所有的设备特殊文件)包含有设备的major和minor标识符。这个VFS I节点由底层的文件系统(例如EXT2)创建,其信息是在查找这个设备特殊文件时,由实际的文件系统提供的。,每一个VFS I节点都关联着一组文件操作,它们依赖于I节点所代表的文件系统对象的不同而不同。不管代表一个字符特殊文件的VFS I节点什么时候创建,它的文件操作都被设置成字符设备的缺省操作。实际上只有一种文件操作:open操作。当一个应用程序打开这个字符特殊文件时,通用
5、的open文件操作使用设备的主设备标识符作为chrdevs向量表中的索引,取出这种特殊设备的文件操作块。它也建立描述这个字符特殊文件的file数据结构,让它的文件操作指针指向设备驱动程序中的相应操作。然后应用程序所有的文件系统操作都被映射到字符设备的文件操作。,Linux设备驱动程序及开发,Linux设备驱动程序概述,Linux设备驱动程序是处理或操作硬件控制器的软件,被集成在内核中,是常驻内存的低级硬件处理程序的共享库,设备驱动程序是系统对设备的抽象管理与控制。Linux允许设备驱动程序作为内核可加载模块实现,即除了可以在系统启动时进行注册外,还可以在启动后进行加载注册。,操作系统的目标之一
6、是向用户掩盖系统硬件设备的特殊性。例如,虚拟文件系统呈现给用户一个统一的文件系统视图,而和底层的物理设备无关。,CPU不是系统中唯一的智能设备,每一个物理设备都由它自己的硬件控制器。键盘、鼠标和串行口由SuperIO芯片控制,IDE磁盘由IDE控制器控制,SCSI磁盘由SCSI控制器控制,等等。,每一个硬件控制器都由自己的控制和状态寄存器(CSR),而且不同的设备有不同的寄存器。CSR用于启动和停止设备,初始化设备和诊断它的问题。管理这些硬件控制器的代码不是放在每一个应用程序里边,而是放在Linux内核。这些处理或者管理硬件控制器的软件叫做设备驱动程序。,本质上,Linux内核的设备驱动程序是
7、特权的、驻留在内存的、低级硬件控制例程的共享库。正是Linux的设备驱动程序处理它们所管理的设备的特性。,Linux的一个基本特点是它抽象了对设备的处理。所有的硬件设备都象常规文件一样看待:它们可以使用和操作文件相同的、标准的系统调用来打开、关闭和读写。,系统中的每一个设备都用一个设备特殊文件代表。例如系统中第一个IDE硬盘用/dev/hda表示。对于块(磁盘)和字符设备,这些设备特殊文件用mknod命令创建,并使用主(major)和次(minor)设备编号来描述设备。,Linux支持三种类型的硬件设备:字符、块和网络。,Linux有许多不同的设备驱动程序,它们都具有一些一般的属性:Kerne
8、l code Kenel interfaces Kernel mechanisms and services Loadable Configurable Dynamic,Kernel code 设备驱动程序和内核中的其它代码相似,是kenel的一部分,如果发生错误,可能严重损害系统。一个粗劣的驱动程序甚至可能摧毁系统,可能破坏文件系统,丢失数据。,Kenel interfaces 设备驱动程序必须向Linux内核或者它所在的子系统提供一个标准的接口。例如,终端驱动程序向Linux内核提供了一个文件I/O接口,而SCSI设备驱动程序向SCSI子系统提供了SCSI设备接口,接着,向内核提供了文件I
9、/O和buffer cache的接口。,Kernel mechanisms and services 设备驱动程序使用标准的内核服务,例如内存分配、中断转发和等待队列来完成工作。,Loadable 大多数的Linux设备驱动程序,可以在需要的时候作为内核模块加载,在不再需要的时候卸载。这使得内核对于系统资源非常具有适应性和效率。,Configurable Linux设备驱动程序可以建立在内核。至于哪些设备建立到内核,可以在内核编译的时候配置。,Dynamic 在系统启动,每一个设备启动程序初始化的时候,它会查找它管理的硬件设备。如果一个设备驱动程序所控制的设备不存在并没有关系。这时这个设备驱动
10、程序只是多余的,占用很少的系统内存,而不会产生危害。,Linux驱动程序开发,建立嵌入式Linux平台,移植和编写驱动程序往往是最具挑战的工作驱动程序的开发周期一般较长,对产品的面世时间有着重要影响驱动程序质量的好坏,直接关系到系统工作效能和稳定性,对项目的成败起着关键作用,设备驱动程序主要功能,设备驱动程序主要完成如下功能:检测设备和初始化设备使设备投入运行和退出服务从设备接收数据并提交给内核从内核接收数据送到设备检测和处理设备错误,Linux设备驱动程序分类,Linux中所有设备被抽象出来,都看成文件 设备的读写和普通文件一样 Linux系统的设备分为如下三类:字符设备(char devi
11、ce)块设备(block device)网络设备(network device)字符设备是指存取时没有缓存的设备块设备的读写都有缓存来支持,且块设备必须能够随机存取(random access)网络设备在Linux里做专门的处理,Linux设备驱动程序分类,网络设备在Linux里做专门的处理Linux的网络系统主要是基于BSD unix的socket 机制。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递系统里支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持,Linux设备驱动程序分类,典型的字符设备包括鼠标,键盘,串行口等块设备主要包括硬盘、软盘设
12、备、CD-ROM等一个文件系统要安装进入操作系统必须在块设备上,Linux驱动程序介绍,嵌入式Linux驱动已经支持的设备门类齐全,已成为其相对其他嵌入式操作系统的一大优势工业控制常用的串口,并口人机输入设备如鼠标、键盘,触摸屏彩色、黑白液晶显示输出网络的完善支持,包括tcp/ip,udp,firewall,WLAN,ip forwarding,ipsec,vpnUsb的全面支持,包括usb硬盘、u盘,usb摄像头支持丰富的文件系统,包括FAT32,NTFS,嵌入式设备框图,驱动程序的功用,1、驱动程序直接操控硬件收发通讯数据读写存储介质,比如flash或硬盘操作输出设备和执行机构,例如打印,
13、开关门禁等,驱动程序的功用(续),2、驱动程序提供软件访问硬件的机制应用软件通过驱动程序安全高效的访问硬件驱动程序文件可以方便的提供访问权限控制驱动程序作为一个隔离的中间层软件,将底 层细节隐藏起来,提高了软件的可移植性,访问Linux设备驱动的方法,设备提供dev文件系统节点和proc文 件系统节点应用程序通过dev文件节点访问驱动 程序应用程序通过proc文件节点可以查 询设备驱动的信息,驱动程序位置,驱动程序位于drivers目录下通常驱动程序占kernel代码的50%Linux设备驱动程序在Linux的内核源代码中占有很大的比例,源代码的长度日益增加,主要是驱动程序的增加。在Linux
14、内核的不断升级过程中,驱动程序的结构还是相对稳定。在到的变动里,驱动程序的编写做了一些改变,但是从的驱动到的移植只需做少量的工作。,Linux驱动程序的特点,嵌入式Linux驱动程序需求多样嵌入式设备硬件各异嵌入式计算平台往往资源有限,比如处理速度、存储器容量、总线带宽、电池容量等通常要求短的开发周期、压力大开发驱动程序需要丰富的专业知识,包括 硬件和软件知识,嵌入式Linux驱动程序特点,嵌入式系统硬件更新速度加快国际上大的嵌入式芯片提供商如Intel、Samsung、Freescale、TI、ST每年都有大量新品推出新的芯片功能总是需要相应的驱动程序支持,Linux驱动开发流程,熟悉设备的
15、特性 确定设备驱动程序类别 编写测试用例 搜集可重用的代码 编写自己的驱动程序代码 编码、调试、测试,Linux驱动程序的开发环境,本机编译调试开发环境配置简单无需网络环境适用于配置较高的x86机器主机+目标机主机可以自由选择Linux主机和目标机通过网络共享文件系统内核崩溃不会影响主机,Linux驱动程序的开发环境(续),主机+目标机环境包括主机运行的工具链cross gcc+glibc+gdb,如果是windows主机还要有cygwin仿真环境主机运行远程服务,常用的有tftp用来传送内 核映像、initrd,NFS用来共享文件系统目标机运行ssh或telnet等远程登陆服务,用来 调试驱
16、动程序,Linux驱动程序的加载方式,驱动程序直接编译入内核驱动程序在内核启动时就已经在内存中可以保留专用存储器空间驱动程序以模块形式存储在文件系 统里,需要时动态载入内核驱动程序按需加载,不用时节省内存驱动程序相对独立于内核,升级灵活,Linux驱动程序模块加载,Linux驱动程序开发的任务,规划硬件资源的使用分离硬件相关和硬件无关的代码划分驱动程序的抽象层次移植驱动程序到新的平台,Linux驱动程序开发的任务,规划硬件资源的使用CPU时间片分配中断处理系统存储器空间映射,Linux驱动程序开发的任务,分离硬件相关和硬件无关的代码划分驱动程序的抽象层次,Linux驱动程序开发的任务,移植驱动
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 驱动 开发

链接地址:https://www.31ppt.com/p-6158796.html