chap6-1嵌入式linux驱动程序开发

chap6-1嵌入式linux驱动程序开发

ID:33691298

大小:880.52 KB

页数:67页

时间:2018-05-24

chap6-1嵌入式linux驱动程序开发_第1页
chap6-1嵌入式linux驱动程序开发_第2页
chap6-1嵌入式linux驱动程序开发_第3页
chap6-1嵌入式linux驱动程序开发_第4页
chap6-1嵌入式linux驱动程序开发_第5页
资源描述:

《chap6-1嵌入式linux驱动程序开发》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第6章 嵌入式Linux驱动程序开发倪福川6.1嵌入式Linux的设备管理Linux设备概述:块设备:类似磁盘以记录块或扇区为单位,成块进行输入/输出的设备;字符设备:类似键盘以字符为单位,逐个进行输入/输出的设备。网路设备:介于块设备和字符设备之间的一种特殊设备。块设备/字符设备块设备:仅支持面向块的I/O操作,所有I/O操作都通过在内核地址空间中的I/O缓冲区进行,可以支持随机存取的功能。文件系统通常都建立在块设备上。字符设备:支持面向字符的I/O操作,不经过系统的快速缓存,要负责管理自己的缓冲区结

2、构。字符设备接口只支持顺序存取的功能,一般不能进行任意长度的I/O请求,而是限制I/O请求的长度必须是设备要求的基本块长的倍数。处理器与设备间数据交换方式查询方式、中断方式直接内存存取(DMA)方式。1.查询方式设备驱动程序通过设备的I/O端口空间,以及存储器空间完成数据的交换。利用这些地址空间,驱动程序可以向外设发送指定的操作指令。驱动程序在提交命令之后,开始查询设备的状态寄存器,当状态寄存器表明操作完成时,驱动程序可继续后续处理。优点:硬件开销小,使用起来比较简单。缺点:CPU要不断地查询外设的状态

3、,当外设未准备好时,就只能循环等待,不能执行其他程序,这样就浪费了CPU的大量时间,降低了处理器的利用率。中断方式的原理当CPU进行主程序操作时,外设的数据已存入端口的数据输入寄存器,或端口的数据输出寄存器已空,此时由外设通过接口电路向CPU发出中断请求信号。CPU在满足一定条件下,暂停执行当前正在执行的主程序,转入执行相应能够进行输入/输出操作的子程序,待输入/输出操作执行完毕之后,CPU再返回并继续执行原来被中断的主程序。CPU就避免了把大量时间耗费在等待、查询外设状态的操作上,使其工作效率得以大大

4、提高。2.中断方式中断响应能够向CPU发出中断请求的设备或事件称为中断源。中断源向CPU发出中断请求,若优先级别最高,则CPU在满足一定的条件时,可中断当前程序的运行,保护好被中断的主程序的断点及现场信息,然后根据中断源提供的信息,找到中断服务子程序的入口地址,转去执行新的程序段,这就是中断响应。CPU响应中断是有条件的,如内部允许中断、中断未被屏蔽、当前指令执行完等。CPU响应中断以后,就会中止当前的程序,转去执行一个中断服务子程序,以完成为相应设备的服务。DMA可允许设备和系统内存间在没有处理器参与

5、的情况下传输大量数据。设备驱动程序在利用DMA之前,需要选择DMA通道并定义相关寄存器,以及数据的传输方向,即读取或写入,然后将设备设定为利用该DMA通道传输数据。设备完成设置之后,可以立即利用该DMA通道在设备和系统的内存之间传输数据,传输完毕后产生中断以便通知驱动程序进行后续处理。在利用DMA进行数据传输的同时,处理器仍然可以继续执行指令。3.直接访问内存(DMA)方式设备驱动程序的概念设备驱动程序:处理和操作硬件控制器的软件,本质上,是内核中具有最高特权级的、驻留内存的、可共享的底层硬件处理例程。

6、驱动程序是内核的一部分,是操作系统内核与硬件设备的直接接口。驱动程序屏蔽了硬件的细节,完成以下功能:对设备初始化和释放;对设备进行管理,包括实时参数设置,以及提供对设备的操作接口;读取应用程序传送给设备文件的数据或者回送应用程序请求的数据;检测和处理设备出现的错误。Linux设备驱动程序Linux操作系统将所有的设备全部看成文件,并通过文件的操作界面进行操作。对用户程序而言,设备驱动程序隐藏了设备的具体细节,对各种不同设备提供了一致的接口,一般来说,是把设备映射为一个特殊的设备文件。设备文件的属

7、性由三部分信息组成:第一部分是文件的类型,第二部分是一个主设备号,第三部分是一个次设备号。其中类型和主设备号结合在一起惟一地确定了设备文件驱动程序及其界面,而次设备号则说明目标设备是同类设备中的第几个。Linux设备驱动程序Linux中将设备当做文件处理,对设备进行操作的系统调用格式与对文件的操作类似,主要包括open()、read()、write()、ioctl()、close()等。应用程序发出系统调用命令后,从用户态转到核心态,通过内核将系统调用转换成对物理设备的操作。这意味着:由于每一个设备至

8、少由文件系统的一个文件代表,因而都有一个“文件名”。应用程序通常可以通过系统调用open()打开设备文件,建立起与目标设备的连接。打开了代表着目标设备的文件,即建立起与设备的连接后,可以通过read()、write()、ioctl()等常规的文件操作对目标设备进行操作。驱动程序结构1.自动配置和初始化子程序,用来检测所需驱动的硬件设备是否工作正常、对正常工作的设备及其相关驱动程序所需要的软件状态进行初始化。2.服务于I/O请求的子程序,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。