第十章 内核驱动设计入门.ppt

第十章 内核驱动设计入门.ppt

ID:48758916

大小:350.00 KB

页数:37页

时间:2020-01-22

第十章 内核驱动设计入门.ppt_第1页
第十章 内核驱动设计入门.ppt_第2页
第十章 内核驱动设计入门.ppt_第3页
第十章 内核驱动设计入门.ppt_第4页
第十章 内核驱动设计入门.ppt_第5页
资源描述:

《第十章 内核驱动设计入门.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第十章内核驱动设计入门嵌入式系统及其软件工具本章提要1驱动程序概述2Linux设备与设备驱动程序3设备驱动程序框架10.1驱动程序概述设备驱动程序是操作系统内核和机器硬件之间的接口。所有对设备的操作都必须由被控设备相关的代码--驱动程序来完成。设备驱动隐藏了设备的具体细节,为不同设备提供了统一的访问接口。用户或者应用程序可以像操作普通文件一样对硬件设备进行操作,设备驱动是内核的一部分。10.1.1设备驱动功能设备的初始化和释放负责内核与外设之间的数据交换提供各类设备服务检测和处理设备工作过程中出现的错误驱动程序在嵌入式Linux中的作用:在嵌入式系统中,要访问某个特定的

2、硬件,实际上就是访问物理的地址空间(处理器内的寄存器、外设的地址映像)。然而,由于MMU的内存映射以及对操作系统的保护,运行在用户态的应用程序一般不能够直接访问硬件地址,因此需要驱动程序作为应用程序和访问硬件之间的媒介。某些驱动程序并不能直接给应用程序调用,而是给Linux内核调用。例如:串口作为console的物理载体;或者驱动程序由操作系统调用,应用程序可以间接的使用驱动程序,如framebuffer,网络设备驱动等。(要去哦球驱动程序必须按照某个框架编写,供上层模块使用)10.1.2驱动程序开发注意开发驱动程序和开发应用程序不同;驱动程序应提供尽量多的选项给用户,

3、不应该强加约束;尽量提高驱动程序的速度、效率,尽量简化,便于维护。10.2Linux设备与设备驱动Linux把设备分成3类,每类设备有自己的接口和常用框架,他们也有很多共性。字符设备:采用字符流方式访问的设备,每次只传输一个字符。特点:顺序访问。鼠标、键盘、串口等。块设备:采用随机访问的方式访问,数据具有固定大小的块的设备;(Linux中块设备与字符设备使用基本一致)特点:缓冲存储,随机访问。硬盘、光盘等。网络设备:采用数据包传输方式访问的设备。特点:与字符设备和块设备不同,没有设备文件。通过socket进行使用。设备设备的分类10.2.1Linux设备和设备驱动设备驱

4、动的共性:设备驱动工作在内核态,误操作后果很严重;设备驱动必须提供一个标准的内核接口,字符和块设备采用文件接口,网络设备采用套接字;驱动可以采用标准的内核服务,如:“内存分配”、等待队列、中断机制等;驱动可以动态的连接到内核中,不用时可以卸载。也可将驱动编译到内核中。10.2.1Linux设备和设备驱动10.2.2Linux设备文件bash#ls-l/dev查看相关设备信息crw-------1rootroot14,3Jan302003dspcrw-rw----1rootfloppy2,0Jan302003fd0文件类型及访问权限链接个数所有者组主设备号创建日期设备文件

5、名次设备号系统启动时会把设备文件系统挂载在/dev目录下,linux的设备文件的创建、删除和目录层次等都由各设备驱动程序管理。/dev中每个文件都动态的对应了一个系统上存在的设备驱动程序。10.2.3Linux对设备文件的操作open()intopen(const*pathname,intflag);open函数用于通过文件路径打开一个文件,返回一个整数类型的文件描述符。close()intclose(intfd);close函数用于关闭文件,close会让数据写回磁盘,并释放文件所占用的资源。10.2.3Linux对设备文件的操作read()ssize_tread(i

6、ntfd,void*buf,size_tcount);read函数从fd指向的文件传送count个字节到buf指针指向的内存中文件读写指针的位置会随着读取到的字节移动。当读取成功时,最好将返回值和count值进行比较若返回的值比count少,则可能读到了文件尾,或者read操作被中断了等。10.2.4设备驱动程序接口write()ssize_twrite(intfd,void*buf,size_tcount);write函数把参数buf指向的内存写入count个字节到fd指向的文件内。文件的读写位置也会随之变化;10.2.3Linux对设备文件的操作lseek()lof

7、f_tlseek(intfd,loff_toffset,intwhence);lseek函数用来控制文件的读写位置。ioctl()intioctl(intfd,unsignedintcmd,…);ioctl是Linux中对设备文件操作的特殊函数。可以对应到驱动程序的相应函数中。文件操作示例:#include#include#include#includeintmain(){intfd,size;chars[]=”FileOperation”;cha

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

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

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