嵌入式系统第8章嵌入式设备驱动

嵌入式系统第8章嵌入式设备驱动

ID:40191114

大小:529.00 KB

页数:38页

时间:2019-07-25

嵌入式系统第8章嵌入式设备驱动_第1页
嵌入式系统第8章嵌入式设备驱动_第2页
嵌入式系统第8章嵌入式设备驱动_第3页
嵌入式系统第8章嵌入式设备驱动_第4页
嵌入式系统第8章嵌入式设备驱动_第5页
资源描述:

《嵌入式系统第8章嵌入式设备驱动》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、提纲1、Linux下设备驱动程序简介2、设备驱动程序结构3、设备驱动实验实验一:编写一个简单的驱动程序实验二:设计和实现一个KED&LED驱动程序实验三:静态编译驱动程序,连接到内核实验四:使用中断方式的驱动程序设计11、Linux下设备驱动程序简介系统调用是操作系统内核和应用程序之间的接口设备驱动程序是操作系统内核和机器硬件之间的接口Linux设备驱动的特点是可以以模块的形式加载各种设备类型因为嵌入式设备往往具有大量的独有外设,开发人员需要把很多精力放在设备驱动方面21.1Linux设备的分类字符设备以字节为单位逐

2、个进行I/O操作字符设备中的缓存是可有可无不支持随机访问如串口设备/dev/cua0和/dev/cua1块设备块设备的存取是通过buffer、cache来进行可以进行随机访问例如IDE硬盘设备/dev/hda可以支持可安装文件系统网络设备通过BSD套接口访问31.2Linux设备文件Linux抽象了对硬件的处理,所有的硬件设备都可以作为普通文件一样来看待可以使用和操作文件相同的、标准的系统调用接口来完成打开、关闭、读写和I/O控制操作对用户来说,设备文件与普通文件并无区别41.3主设备号和次设备号主设备号:标识该设备

3、的种类,也标识了该设备所使用的驱动程序次设备号:标识使用同一设备驱动程序的不同硬件设备所有已经注册(即已经加载了驱动程序)的硬件设备的主设备号可以从/proc/devices文件中得到[root@wzchent]#mknod/dev/lp0c6051.4Linux设备驱动代码的分布~/block~/char~/cdrom~/pci~/scsi~/net~/sound注:IDE接口的CD驱动位于drivers/block/ide-cd.c中,而SCSICD驱动位于drivers/scsi/scsi.c中61.5Linu

4、x设备驱动程序的特点设备驱动是内核的一部分,影响内核稳定为内核或其从属子系统提供一个标准接口使用标准的内核服务如内存分配、中断和等待队列等大多数Linux设备驱动可以动态可加载Linux设备驱动程序可配置驱动程序维护其控制的设备,该设备即使不存在也不影响系统的运行,此时设备驱动只是占用少量系统内存,不会对系统造成什么危害72、设备驱动程序结构Linux的设备驱动程序与外界的接口可以分成三部分:与操作系统内核的接口与系统引导的接口与设备的接口Linux设备驱动程序的代码结构大致可以分为如下几个部分:驱动程序的注册与注销

5、、设备的打开与释放、设备的读写操作、设备的控制操作、设备的中断和轮询处理。82.1驱动程序的注册与注销注册register_chrdev();//在~fs/devices.cregister_blkdev();//在~fs/block_dev.c注销unregister_chrdev()unregister_blkdev()92.2打开、释放、读、写、控制等structfile_operations{structmodule*owner;loff_t(*llseek)(structfile*,loff_t,int);

6、ssize_t(*read)(structfile*,char*,size_t,loff_t*);ssize_t(*write)(structfile*,constchar*,size_t,loff_t*);int(*readdir)(structfile*,void*,filldir_t);unsignedint(*poll)(structfile*,structpoll_table_struct*);int(*ioctl)(structinode*,structfile*,unsignedint,unsigned

7、long);int(*mmap)(structfile*,structvm_area_struct*);int(*open)(structinode*,structfile*);int(*flush)(structfile*);int(*release)(structinode*,structfile*);int(*fsync)(structfile*,structdentry*,intdatasync);int(*fasync)(int,structfile*,int);int(*lock)(structfile*

8、,int,structfile_lock*);ssize_t(*readv)(structfile*,conststructiovec*,unsignedlong,loff_t*);ssize_t(*writev)(structfile*,conststructiovec*,unsignedlong,loff_t*);ssize_t(*send

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

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

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