嵌入式Linux设备驱动编程(沈永增)课件.ppt

嵌入式Linux设备驱动编程(沈永增)课件.ppt

ID:56987813

大小:300.00 KB

页数:37页

时间:2020-07-25

嵌入式Linux设备驱动编程(沈永增)课件.ppt_第1页
嵌入式Linux设备驱动编程(沈永增)课件.ppt_第2页
嵌入式Linux设备驱动编程(沈永增)课件.ppt_第3页
嵌入式Linux设备驱动编程(沈永增)课件.ppt_第4页
嵌入式Linux设备驱动编程(沈永增)课件.ppt_第5页
资源描述:

《嵌入式Linux设备驱动编程(沈永增)课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一、设备驱动编程基础1.1Linux设备驱动概述操作系统为用户屏蔽了各种各样的设备,并为硬件提供统一的操作方式。设备驱动程序是内核的一部分,硬件驱动程序是操作系统最基本的组成部分,在Linux内核源程序中也占有60%以上。Linux内核中采用可加载的模块化设计(LKMs,LoadableKernelModules),也就是将最基本的核心代码编译在内核中,其他的代码可以编译到内核中,或者编译为内核的模块文件(在需要时动态加载)。1.设备分类Linux系统的设备分为3类:字符设备、块设备和网络设备。字符设备是指以字节为单位顺序读写的设备,如并口设备等。它与普通文件之间的区别在于普通文件可

2、以前后移动访问指针,而大多数字符设备只能提供顺序访问,因为对它们的访问不会被系统所缓存。但也有例外,例如帧缓存(framebuffer)是一个可以被随机访问的字符设备。1.设备分类块设备通常指硬盘、光驱等一些需要以块为单位随机读写的设备。块设备不仅可以提供随机访问,而且可以容纳文件系统(例如硬盘、闪存等)。Linux可以使用户态程序像访问字符设备一样每次进行任意字节的操作,只是在内核态内部中的管理方式和内核提供的驱动接口上不同。用ls命令可以查看到设备的类型:$ls–l/devcrw-rw----1rootuucp4,6408-3022:58ttyS0/*串口设备,c表示字符设备,主

3、设备号4,次设备号64*/brw-r-----1rootfloppy2,008-3022:58fd0/*软盘设备,b表示块设备,主设备号2,次设备号0*/1.设备分类网络设备通常是指网卡等通过网络能够与其他主机进行数据通信的设备。内核和网络设备驱动程序之间的通信调用一套数据包处理函数,它们完全不同于内核和字符以及块设备驱动程序之间的通信(read(),write()等函数)。Linux网络设备不是面向流的设备,因此不会将网络设备的名字(例如eth0)映射到文件系统中去。2.设备号设备号是一个数字,它是设备的标志。就如前面所述,一个设备文件(也就是设备节点)可以通过mknod命令来创建

4、,其中指定了主设备号和次设备号。主设备号表明设备的类型(例如串口设备、硬盘等),与一个确定的驱动程序对应;次设备号通常是用于标明某个具体的物理设备。高字节为主设备号,底字节为次设备号。例如,在系统中的块设备IDE硬盘的主设备号是3,而多个IDE硬盘及其各个分区分别赋予次设备号0、1、2、3……3.驱动层次结构4.设备驱动程序的特点(1)内核代码:设备驱动程序是内核的一部分,如果驱动程序出错,则可能导致系统崩溃。(2)内核接口:设备驱动程序必须为内核或者其子系统提供一个标准接口。比如,一个终端驱动程序必须为内核提供一个文件I/O接口;。(3)内核机制和服务:设备驱动程序使用一些标准的内

5、核服务,如内存分配等。4.设备驱动程序的特点(4)可装载:在需要时装载进内核,在不需要时从内核中卸载。(5)可设置:根据需要在系统编译时进行相应的设置把其中的某一部分集成到内核中。(6)动态性:在系统启动且各个设备驱动程序初始化后,驱动程序将维护其控制的设备。如果该设备驱动程序控制的设备不存在也不影响系统的运行,但此时的设备驱动程序多占用了一点系统内存。5.proc文件系统/proc文件系统是一个伪文件系统,它是一种内核和内核模块用来向进程发送信息的机制。这个伪文件系统让用户可以和内核内部数据结构进行交互,获取有关系统和进程的有用信息,在运行时通过改变内核参数来改变设置。与其他文件系

6、统不同,/proc存在于内存之中而不是在硬盘上。可以通过“ls”查看/proc文件系统的内容。二、字符设备驱动编程驱动模块在调用insmod命令时被加载,此时的入口点是init_module()函数,通常在该函数中完成设备的注册。模块在调用rmmod命令时被卸载,此时的入口点是cleanup_module()函数,在该函数中完成设备的卸载。2.1字符设备驱动编写流程2.1字符设备驱动编写流程在设备完成注册加载之后,用户的应用程序就可以通过open()、read()、write()等函数对该设备进行间接的操作,而驱动程序就是为用户应用程序调用相应入口函数时执行相关的实际操作。图12.2

7、重要数据结构structfile_operations{loff_t(*llseek)(structfile*,loff_t,int);ssize_t(*read)(structfile*filp,char*buff,size_tcount,loff_t*offp);ssize_t(*write)(structfile*filp,constchar*buff,size_tcount,loff_t*offp);int(*readdir)(structfile

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

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

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