欢迎来到天天文库
浏览记录
ID:59416933
大小:164.00 KB
页数:34页
时间:2020-09-19
《L12_嵌入式Linux开发_驱动程序ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、嵌入式Linux开发—驱动程序2021/10/41设备驱动程序概述(1)系统调用是操作系统内核和应用程序之间的接口设备驱动程序是操作系统内核和机器硬件之间的接口设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分。2021/10/42设备驱动程序概述(2)从用户角度出发,如果在使用不同设备时,需要使用不同的操作方法,这样非常麻烦。用户希望能使用同样的应用程序接口和命令来访问设备和普通文件。Linux抽象了对硬件的处理,所有的硬件设备都可以作为普通文件来看待;它们可以使用和操作文件相同
2、的、标准的系统调用接口来完成打开、关闭、读写和I/O控制操作,而驱动程序的主要任务也就是要实现这些系统调用。2021/10/43设备驱动程序的作用设备驱动程序完成以下的功能:对设备初始化和释放;把数据从内核传送到硬件和从硬件读取数据;读取应用程序传送给设备文件的数据和回送应用程序请求的数据;检测和处理设备出现的错误;2021/10/44Linux操作系统设备Linux操作系统的设备分为三类:字符设备块设备网络设备Linux常见设备文件/dev/ttyS0:第一个串口。/dev/ttyS1、/dev/ttyS2和/dev/ttyS3分别是第二、第三和第四个串口。/dev/hda:第一个IDE硬
3、盘。/dev/hdb:第二个IDE硬盘。/dev/hdc:第三个IDE硬盘。/dev/cdrom:指向CDROM。/dev/hda1:第一个IDE硬盘的第一个分区。/dev/hda2第一个IDE硬盘的第二个分区。/dev/tty1:第一个字符终端。/dev/tty2是第二个字符终端,以此类推。/dev/dsp:数字音频,例如声卡。/dev/sda:第一个SCSI硬盘。/dev/sdb:第二个SCSI硬盘。/dev/sda1:第一个SCSI硬盘的第一个分区。/dev/sr0:第一个SCSI光驱。/dev/usb/scanner0:一个usb扫描仪。2021/10/45Linux设备驱动原理20
4、21/10/46设备驱动开发以GPIO驱动LED为例,讲述设备驱动基础知识驱动程序与硬件驱动程序与系统调用设备标识驱动调用接口函数编写驱动模块化编程技术系统调用与用户程序2021/10/47驱动程序与硬件GPIO(General-PurposeIOports),也就是通用IO接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对这种寄存器中每一位的作用,即每一位的信号流通方向,则可以通过控制寄存器中对应位独立的加以设置除去两个标准寄存器必须具备外,有的CPU还提供上拉寄存器,可以设置IO的输出模式是高阻,还是带上拉的电平输出,或者不带
5、上拉的电平输出。2021/10/48S3C2410的GPIO8个端口,其寄存器是相似的。除了两个通用寄存器GPxCON、GPxDAT外,还提供了GPxUP用于确定是否使用内部上拉电阻(其中x为A-H,需要注意的是没有GPAUP)GPACON通常全设为1,以便访问外部存储器件PORTB-H在寄存器操作方面完全相同。GPxCON中每两位控制一根引脚:00表示输入,01表示输出,10表示特殊功能,11保留。GPxDAT用于读/写引脚:当引脚设为输入时,读此寄存器可知相应引脚状态是高/低;当引脚设为输出时,写此寄存器相应位可以使相应引脚输出低电平或高电平。GPxUP:某位设为0,相应引脚无内部上拉;
6、为1,相应引脚使用内部上拉2021/10/49设置主要步骤初始化:设置控制寄存器GPxCON、上拉寄存器GPxUP和数据寄存器GPxDATGPBCON=0x0005;//设置端口为I/O输出模式GPBUP=0xff;//使用内部上拉功能GPBDAT=0xf;//初始值为高电平熄灭LED灯工作时:设置数据寄存器GPxDATLED_ON:GPBDAT=0x01//GPB0灭GPB1亮LED_OFF:GPBDAT=0x02//GPB0亮GPB1灭以上假定两个LED分别在GPB0与GPB1处,实际使用根据硬件连接情况修改。2021/10/410驱动程序与系统调用设备标识驱动调用接口函数编写驱动模块化
7、编程技术2021/10/411设备标识除了设备类型外,linux内核还需要一对被称作为主设备号、次设备号的参数,才能唯一的标识设备一个主设备号可能有多个设备与之对应,这多个设备正是在驱动程序内通过次设备号来进一步区分的字符型设备主设备号通过调用函数注册:intregister_chrdev(unsignedintmajor,constchar*name,structfile_operations*fops);
此文档下载收益归作者所有