欢迎来到天天文库
浏览记录
ID:20020020
大小:1.03 MB
页数:133页
时间:2018-10-08
《嵌入式系统驱动开发》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、设备驱动程序DeviceDrivers嵌入式系统设备驱动程序和内核接口Linux内核必须能够用标准的方式和设备驱动程序交互。每一类的设备驱动程序:字符、块和网络,都提供了通用的接口供内核在需要请求它们的服务的时候使用。这些通用的接口意味着内核可以完全相同地看待通常是非常不同的设备和它们的设备驱动程序。例如,SCSI和IDE磁盘的行为非常不同,但是Linux内核对它们使用相同的接口。Linux非常地动态,每一次Linux内核启动,它都可能遇到不同的物理设备从而需要不同的设备驱动程序。Linux允许你在建立内核时通过配置脚本,将设备驱动程序包含在内
2、核中。在系统启动时,这些设备驱动程序初始化,此时它们可能没有发现自己可以控制的任何硬件。其它驱动程序可以在需要的时候作为内核模块加载。为了处理设备驱动程序的这种动态特性,设备驱动程序要在它们初始化时向内核登记。Linux维护已经登记的设备驱动程序列表,作为和它们接口的一部分。这些列表包括了例程指针和支持这一类设备的接口信息。字符设备字符设备,Linux中最简单的设备,可以象文件一样访问。应用程序使用标准系统调用打开、读、写和关闭字符设备,完全把它们作为普通文件一样对待。甚至正在被PPP守护进程使用,用于将一个Linux系统连接到网上的modem
3、,也被看作一个普通文件。当字符设备初始化时,它的设备驱动程序向Linux内核登记,在chrdevs向量表增加一个device_struct数据结构条目。这个设备的主设备标识符(例如对于tty设备是4),用作这个向量表的索引。一个设备的主设备标识符是固定的。Chrdevs向量表中的每一个条目,即一个device_struct数据结构,包括两个元素:一个是指向登记的设备驱动程序名字的指针;另一个是指向一组文件操作的指针。这组文件操作本身位于这个设备的字符设备驱动程序中,每一个都处理一个特定的文件操作,比如打开、读、写和关闭。/proc/device
4、s中字符设备的内容来自chrdevs向量表当代表一个字符设备(例如/dev/cua0)的字符特殊文件打开时,内核必须做一些事情,从而去调用正确的字符设备驱动程序的文件操作例程。和普通文件或目录一样,每一个设备特殊文件都用VFSI节点表达。这个字符特殊文件的VFSinode(实际上所有的设备特殊文件)包含有设备的major和minor标识符。这个VFSI节点由底层的文件系统(例如EXT2)创建,其信息是在查找这个设备特殊文件时,由实际的文件系统提供的。每一个VFSI节点都关联着一组文件操作,它们依赖于I节点所代表的文件系统对象的不同而不同。不管代
5、表一个字符特殊文件的VFSI节点什么时候创建,它的文件操作都被设置成字符设备的缺省操作。实际上只有一种文件操作:open操作。当一个应用程序打开这个字符特殊文件时,通用的open文件操作使用设备的主设备标识符作为chrdevs向量表中的索引,取出这种特殊设备的文件操作块。它也建立描述这个字符特殊文件的file数据结构,让它的文件操作指针指向设备驱动程序中的相应操作。然后应用程序所有的文件系统操作都被映射到字符设备的文件操作。Linux设备驱动程序及开发Linux设备驱动程序概述Linux设备驱动程序是处理或操作硬件控制器的软件,被集成在内核中,
6、是常驻内存的低级硬件处理程序的共享库,设备驱动程序是系统对设备的抽象管理与控制。Linux允许设备驱动程序作为内核可加载模块实现,即除了可以在系统启动时进行注册外,还可以在启动后进行加载注册。操作系统的目标之一是向用户掩盖系统硬件设备的特殊性。例如,虚拟文件系统呈现给用户一个统一的文件系统视图,而和底层的物理设备无关。CPU不是系统中唯一的智能设备,每一个物理设备都由它自己的硬件控制器。键盘、鼠标和串行口由SuperIO芯片控制,IDE磁盘由IDE控制器控制,SCSI磁盘由SCSI控制器控制,等等。每一个硬件控制器都由自己的控制和状态寄存器(C
7、SR),而且不同的设备有不同的寄存器。CSR用于启动和停止设备,初始化设备和诊断它的问题。管理这些硬件控制器的代码不是放在每一个应用程序里边,而是放在Linux内核。这些处理或者管理硬件控制器的软件叫做设备驱动程序。本质上,Linux内核的设备驱动程序是特权的、驻留在内存的、低级硬件控制例程的共享库。正是Linux的设备驱动程序处理它们所管理的设备的特性。Linux的一个基本特点是它抽象了对设备的处理。所有的硬件设备都象常规文件一样看待:它们可以使用和操作文件相同的、标准的系统调用来打开、关闭和读写。系统中的每一个设备都用一个设备特殊文件代表。
8、例如系统中第一个IDE硬盘用/dev/hda表示。对于块(磁盘)和字符设备,这些设备特殊文件用mknod命令创建,并使用主(major)和次(mino
此文档下载收益归作者所有