欢迎来到天天文库
浏览记录
ID:6075962
大小:102.00 KB
页数:13页
时间:2018-01-02
《linux下的驱动程序开发》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Linux下的驱动程序开发李伟民(1)胡炜(2)浙江大学计算机技术专业摘要:本文主要从学习Linux下驱动程序的基本概念入手,了解Linux下驱动程序的结构和框架。通过自己的学习深入了解在Linux环境下开发驱动程序的过程,通过学习,我们自己动手编写了一个USB的鼠标和键盘驱动程序。这对我们来说是一个从无到有的过程。关键词:Linux、驱动程序1引言1.1Linux设备驱动程序分类Linux系统将设备分为三类:字符设备(CharDevice)、块设备(BlockDevice)和网络设备(NetworkDevice)三种。字符设备(CharDevice)是
2、指存取时没有缓存的设备,典型的字符设备包括鼠标,键盘,串行口等。块设备(BlockDevice)是指读写都有缓存来支持,并且块设备必须能够随机存取(randomaccess),字符设备则没有这个要求。块设备主要包括硬盘设备,CD-ROM等。网络设备(NetworkDevice)在Linux里做专门处理。Linux的网络系统主要是基于BSDUnix的socket机制。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递。系统里支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持。1.2Linux下驱动程序的几个基本概念在
3、学习Linux下的驱动程序的时候,经常会遇到以下一些概念。1.2.1轮询与中断内核与外设间的数据传输一般可以采用轮询(polling)或中断(interrupt)方式。轮询方式:轮询方式的驱动程序在启动设备后会连续读取设备13(1)李伟民学号Z0403405UT斯达康通讯有限公司(2)胡炜学号Z0403420杭州建达软件有限公司状态直到设备完成操作,处于用户空间的进程进入内核开始执行设备驱动程序。当设备执行I/O操作时,与其相应的任务周期性地轮询设备状态寄存器以决定操作何时完成。中断方式:采用中断的驱动程序在启动设备后就挂起,直到设备完成操作并发出一个中
4、断请求(IRQ)。当IRQ产生时,中断处理程序运行(ISR)运行,他的一些代码可能会放到Bottomhalf中或者放到任务队列中。在这种情况下,用户进程使用驱动程序代码初始化I/O操作,然后阻塞自己直到设备完成操作。在收到IRQ后,运行与设备对应的中断处理程序,它会唤醒沉睡的进程重新执行用户空间进程。13(1)李伟民学号Z0403405UT斯达康通讯有限公司(2)胡炜学号Z0403420杭州建达软件有限公司1.2.2主设备号和次设备号内核使用主、次设备号来唯一标识设备。主设备号(majornumber)用于标识设备对应的驱动程序,主设备号相同的设备使用相
5、同的驱动程序。例如在linux下,软驱的主设备号是2,IDE硬盘的主驱动号是3,并口的主设备号是6。次设备号(minornumber)是一个8bit数,用来区分具体设备的实例(instance)。因此同一个机器上的两个软驱具有相同的主设备号2,但是第一个软驱的次设备号是0,第二个软驱的次设备号是1。设备号操作宏:MAJOR()和MINOR()分别用来获取主、次设备号,MKDEV()根据主、次设备号合成设备号(devnumber)。在Linux内核源码中,主、次设备号通过宏MKDEV()合成为一个变量,作为设备号(dev)保存,高位保存的是主设备号(maj
6、ornumber)低位保存的是次设备号(minornumber),需要时只需要利用MAJOR()和MINOR()两个宏定义便能够简单的将两个设备号区分出来。1.2.3设备文件Linux中各种设备的输入、输出就好像是对普通文件输入、输出一样。因此,只需要将设备映射到一种特殊的文件(采用mknod进行系统调用或者直接进行devfs中的设备结点注册)就可以可达到上述目的。系统启动的时候,内核给系统中的每个设备都创建了一个设备文件。一个设备文件是/dev目录下的一项,它用于表示设备的驱动程序。利用Linux命令mknod可以在/dev目录下生成该设备对应的结点:
7、mknod/dev/其中:参数是这个特殊文件的名字(可以在/dev目录下的特殊文件列表中看到它)。参数为c表示的是字符设备,b表示的是块设备。参数和为主设备号和次设备号。如果设备文件系统devfs已经在系统中正常应用了,就不需要手工创建设备结点了。在用户的应用程序中,当需要访问该设备时,只需要采用通常的文件操作函数即可对该设备进行访问。首先采用fopen()13(1)李伟民学号Z0
8、403405UT斯达康通讯有限公司(2)胡炜学号Z0403420杭州建达软件有限
此文档下载收益归作者所有