欢迎来到天天文库
浏览记录
ID:41237034
大小:1.04 MB
页数:62页
时间:2019-08-20
《Linux设备驱动开发》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linux设备驱动开发余琴2010.3提纲设备驱动概述如何编写内核模块如何编写设备驱动字符设备驱动实例预备知识:设备控制器的功能及接口每一个物理设备都有自己的硬件控制器,每一个硬件控制器都有自己的控制和状态寄存器(CSR),不同的设备是不同的;设备控制器的功能:命令寄存器和译码器(接收和识别命令)、数据寄存器(数据交换)、状态寄存器(设备状态的了解和报告)、地址寄存器(地址识别)设备控制器与CPU的接口:数据线、地址线、控制线设备控制器与设备的接口:数据信号、状态信号、控制信号预备知识:系统对设备的管理设备控制表(DCT):每个设备
2、一张表,表结构如下:设备标识符、设备类型、设备地址或设备号、设备状态、等待队列指针、重复执行的次数和时间、I/O控制器指针系统设备表(SDT):整个系统一张表,表结构如下:DCT指针、正在使用设备的进程标识、设备驱动程序入口驱动原理:什么是设备驱动?设备控制器的CSR用于启动和停止设备,初始化设备和诊断它的问题管理这些硬件控制器的代码不是放在每一个应用程序里边,而是放在Linux内核中。这些处理或管理硬件控制器的软件就叫做设备驱动程序。一般来说,一个驱动程序控制一种硬件设备;Linux核心的设备驱动程序是Linux操作系统的一部分
3、,它运行于核心态。驱动原理:驱动架构硬件设备驱动块设备字符设备缓冲区文件子系统进程控制子系统进程调度内存管理调进程间通讯系统调用接口硬件层内核层内核层用户层库函数用户程序驱动原理:内核何时使用驱动程序?Linux内核使用“设备无关”的I/O子系统来为所有的设备服务。每个设备都提供标准接口给内核,从而尽可能地隐藏了自己的特性。用户程序使用一些基本的系统调用从设备读取数据并且将它们存入缓冲。每当一个系统调用被使用时,内核就转到相应的设备驱动例程来操纵硬件。驱动原理:Linux的I/O子系统驱动原理:Linux设备与文件的关系Linux将
4、所有外部设备看成是一类特殊文件,称之为“设备文件”,如果说系统调用是Linux内核和应用程序之间的接口,那么设备驱动程序则可以看成是Linux内核与外部设备之间的接口。设备驱动程序向应用程序屏蔽了硬件在实现上的细节,使得应用程序可以像操作普通文件一样来操作外部设备。驱动原理:设备文件Linux抽象了对硬件的处理,使得所有的硬件设备都可以像普通文件一样来看待:它们可以使用和操作文件相同的、标准的系统调用接口来完成打开、关闭、读写和I/O控制操作,而驱动程序的主要任务也就是要实现这些系统调用函数。Linux系统中的所有硬件设备都使用一个
5、特殊的设备文件来表示,例如,系统中的第一个IDE硬盘在文件系统中使用/dev/hda表示。Linux通过分配设备号来标识每个设备,每个设备文件对应有两个设备号:一个是主设备号,标识该设备的种类,也标识了该设备所使用的驱动程序,有关主设备号分配见linux/include/linux/major.h。例如软驱主设备号是2,IDE硬盘的主设备号是3;另一个是次设备号,标识使用同一设备驱动程序的不同硬件设备。例如,一台PC有两块IDE硬盘,它们的主设备号都是3,但是第一个硬盘的次设备号为1,另一个次设备号为2。设备文件的主设备号必须与设备
6、驱动程序在登记该设备时申请的主设备号一致,否则用户进程将无法访问到设备驱动程序。驱动原理:设备驱动程序的主要功能对设备进行初始化;使设备投入运行和退出服务;从设备接收数据并将它们送回内核;将数据从内核送到设备;检测和处理设备出现的错误。驱动原理:字符设备和块设备在Linux操作系统下有两类主要的设备文件:一类是字符设备,另一类则是块设备。字符设备是以字节为单位逐个进行I/O操作的设备,在对字符设备发出读写请求时,实际的硬件I/O紧接着就发生了,一般来说字符设备中的缓存是可有可无的,而且也不支持随机访问。如鼠标、键盘、串口块设备则是利
7、用一块系统内存作为缓冲区,当用户进程对设备进行读写请求时,驱动程序先查看缓冲区中的内容,如果缓冲区中的数据能满足用户的要求就返回相应的数据,否则就调用相应的请求函数来进行实际的I/O操作。如硬盘、光驱等块设备主要是针对磁盘等慢速设备设计的,其目的是避免耗费过多的CPU时间来等待操作的完成。驱动原理:设备文件与驱动程序的关系所有已经注册(即已经加载了驱动程序)的硬件设备的主设备号可以从/proc/devices文件中得到。使用mknod命令可以创建指定类型的设备文件,同时为其分配相应的主设备号和次设备号。mknod/dev/devic
8、e_namedevice_typemajor_numberminor_number其中:device_name是此设备的文件device_type是此设备的类型,c表示字符设备,b表示块设备例如,建立一个主设备号为6,次设备号为0的字
此文档下载收益归作者所有