ImageVerifierCode 换一换
格式:PPT , 页数:41 ,大小:644KB ,
资源ID:2638505      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2638505.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(LINUX 设备驱动概述.ppt)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

LINUX 设备驱动概述.ppt

1、1LINUX LINUX 设备驱动设备驱动概述概述2博创科技博创科技 嵌入互动嵌入互动内容摘要设备驱动程序概述设备驱动程序的一般接口添加设备驱动程序的一般方法设备驱动程序的加载与使用3博创科技博创科技 嵌入互动嵌入互动设备驱动程序基本概念-软件系统流程设备驱动程序概述4博创科技博创科技 嵌入互动嵌入互动设备驱动程序基本概念-驱动程序作用l设备驱动程序将复杂的硬件抽象成一个结构良好的设备,并通过提供统一的程序接口为系统的其它部分提供使用设备的能力和方法。l设备驱动程序(应该只是)为系统的其它部分提供各种使用设备的能力,使用设备的方法应该由应用程序决定。设备驱动程序概述5博创科技博创科技 嵌入互动

2、嵌入互动lLinux下对外设的访问只能通过驱动程序lLinux对于驱动程序有统一的接口,以文件的形式定义系统的驱动程序:Open、Release、read、write、ioctll驱动程序是内核的一部分,可以使用中断、DMA等操作l驱动程序需要在用户态和内核态之间传递数据设备驱动程序基本概念设备驱动程序概述6博创科技博创科技 嵌入互动嵌入互动设备驱动程序基本概念l驱动程序与应用程序的区别 1、应用程序以main函数开始,驱动程序则没用main函数。它以特殊的模块初始化函数为入口。2、应用程序从头至尾执行一个任务,驱动程序在完成初始化后,等待系统调用。3、应用程序可以使用GLIBC等标准C函数库

3、,驱动程序不能使用标准C函数库。设备驱动程序概述7博创科技博创科技 嵌入互动嵌入互动设备驱动程序的分类l字符设备驱动程序l各种串行接口,并行接口等。l块设备驱动程序l磁盘设备等l网络设备驱动程序l网卡等。l杂项设备驱动程序l不属于上述三种设备之外的一些设备,如SCSI,时钟等。设备驱动程序概述8博创科技博创科技 嵌入互动嵌入互动驱动程序在操作系统中的位置l设备驱动程序是内核代码的一部分。l驱动程序的地址空间是内核的地址空间。l驱动程序的代码直接对设备硬件(实际是设备的各种寄存器)进行控制(实际就是读写操作)。l应用程序通过操作系统的系统调用执行相应的驱动程序函数。中断则直接执行相应的中断程序代

4、码。l设备驱动程序的file_operations结构体的地址被注册到内核中的设备链表中。l块设备和字符设备以设备文件的方式建立在文件系统中的/dev目录下,而且每个设备都有一个主设备号和一个次设备号。设备驱动程序概述9博创科技博创科技 嵌入互动嵌入互动驱动程序在操作系统中的位置设备驱动程序概述10博创科技博创科技 嵌入互动嵌入互动主设备号和次设备号l主设备号标识设备对应的驱动程序l一个驱动程序可以控制若干个设备,次设备号提供了一种区分它们的方法l系统增加一个驱动程序就要赋予它一个主设备号。这一赋值过程在驱动程序的初始化过程中int register_chrdev_region(dev_t f

5、irst,unsigned int count,char*name);设备驱动程序概述11博创科技博创科技 嵌入互动嵌入互动主设备号和次设备号在/dev目录下使用ll命令(ls-l)可以查看各个设备的设备类型、主从设备号等 设备驱动程序概述12博创科技博创科技 嵌入互动嵌入互动创建设备节点l设备已经注册到内核表中,对于设备的访问通过设备文件(设备文件与设备驱动程序的主设备号匹配),内核会调用驱动程序中的正确函数 l给程序一个它们可以请求设备驱动程序的名字。这个名字必须插入到/dev目录中,并与驱动程序的主设备号和次设备号相连l使用mknod在文件系统上创建一个设备节点 mknod dev_na

6、me driver_type major minor 设备驱动程序概述13博创科技博创科技 嵌入互动嵌入互动创建设备节点 设备驱动程序概述14博创科技博创科技 嵌入互动嵌入互动动态分配设备号l在Documentation/device.txt文件中可以找到已经静态分配给大部分设备的列表l由于许多数字已经分配了,为新设备选择一个唯一的号码是很困难的.如果调用alloc_chrdev_region函数,内核会动态为设备分配一个可用的设备编号lint alloc_chrdev_region(dev_t*dev,unsigned int firstminor,unsigned int count,ch

7、ar*name);设备驱动程序概述15博创科技博创科技 嵌入互动嵌入互动动态分配的问题动态分配的主设备号不能保证总是一样的,无法事先创建设备节点l可以从/proc/devices读取cat/proc/devicesl利用脚本动态创建设备文件节点设备驱动程序概述16博创科技博创科技 嵌入互动嵌入互动设备管理的问题 如今,Linux 支持很多不同种类的硬件。这意味着/dev中都有数百个特殊文件来表示所有这些设备。而且,这些特殊文件中大多数甚至不会映射到系统中存在的设备上设备驱动程序概述17博创科技博创科技 嵌入互动嵌入互动使用devfsl在Linux 2.4的内核里引入了devfs来解决linux

8、下设备文件管理的问题l在驱动程序中通过devfs_register()函数创建设备文件系统的节点l系统启动的时候mount设备文件系统l所有需要的设备节点都由内核自动管理。/dev目录下只有挂载的设备设备驱动程序概述18博创科技博创科技 嵌入互动嵌入互动Linux 2.6内核与udevlLinux 2.6内核引入了sysfs文件系统为每个系统的硬件树进行分级处理lDevfs在Linux 2.6中被标记为舍弃的特性(在Linux 2.6.15及以后的版本则取消了对它的支持),而使用udev。l维护动态设备l从sysfs获得的信息,可以提供对特定设备的固定设备名。对于热插拔的设备,这尤其重要lud

9、ev 是在用户空间的脚本文件,这很容易被编辑和修改l可以和hotplug脚本配合使用l为了保证旧应用程序的兼容性,在嵌入式系统中,是用devfs还是一个好方法。即使在Linux 2.6.15内核以后,也可以通过ndevfs(nano devfs)补丁提供对devfs特性的兼容。设备驱动程序概述19博创科技博创科技 嵌入互动嵌入互动在Linux 2.6内核中使用udevl建议,在2.6.15以后的版本中使用udevl使用ramfs作为udev的载体mount t ramfs none/devludev使用的规则集位于/etc/udev/*ludev的官方地址:http:/www.kernel.o

10、rg/pub/linux/utils/kernel/hotplug/udev.htmll参考文章:Writing udev rules 设备驱动程序概述20博创科技博创科技 嵌入互动嵌入互动设备的注册lLinux内核针对不同类型的设备提供了不同的设备注册方法和相关函数。只有向内核注册成功的设备,才可以使用内核资源正确驱动硬件设备。lLinux内核使用区分的设备链表来维护不同的设备驱动程序。l字符设备的注册内核在内部使用类型 struct cdev 的结构来代表字符设备,使用cdev_alloc()函数来为该结构分配空间。struct cdev*my_cdev=cdev_alloc();设备驱动

11、程序概述21博创科技博创科技 嵌入互动嵌入互动设备的注册l初始化cdev结构设备void cdev_init(struct cdev*cdev,struct file_operations*fops);l向内核添加cdev结构设备int cdev_add(struct cdev*dev,dev_t num,unsigned int count);l从内核去除cdev结构设备void cdev_del(struct cdev*dev);设备驱动程序概述22博创科技博创科技 嵌入互动嵌入互动设备驱动程序的接口通常所说的设备驱动程序接口是指结构file_operations,它定义在include/

12、linux/fs.h中。struct file_operations struct module*owner;loff_t(*llseek)(struct file*,loff_t,int);ssize_t(*read)(struct file*,char*,size_t,loff_t*);ssize_t(*write)(struct file*,const char*,size_t,loff_t*);int(*readdir)(struct file*,void*,filldir_t);unsigned int(*poll)(struct file*,struct poll_table_st

13、ruct*);int(*ioctl)(struct inode*,struct file*,unsigned int,unsigned long);int(*mmap)(struct file*,struct vm_area_struct*);int(*open)(struct inode*,struct file*);int(*flush)(struct file*);int(*release)(struct inode*,struct file*);int(*fsync)(struct file*,struct dentry*,int datasync);int(*fasync)(int,

14、struct file*,int);int(*lock)(struct file*,int,struct file_lock*);ssize_t(*readv)(struct file*,const struct iovec*,unsigned long,loff_t*);ssize_t(*writev)(struct file*,const struct iovec*,unsigned long,loff_t*);ssize_t(*sendpage)(struct file*,struct page*,int,size_t,loff_t*,int);unsigned long(*get_un

15、mapped_area)(struct file*,unsigned long,unsigned long,unsigned long,unsigned long);设备驱动程序的一般接口23博创科技博创科技 嵌入互动嵌入互动file_operations结构体l主要包括:open,close(或者release),read,write,ioctl,poll,mmap等 l结构体file_operations定义的结构体变量将作为一个参数在注册一个设备驱动程序时传递给内核。l内核使用设备链表维护各种注册的设备。不同类型的设备使用不同的链表。设备驱动程序的一般接口24博创科技博创科技 嵌入互动嵌

16、入互动file_operations结构体struct file_operations demo_fops=完成了将驱动函数映射为标准接口。例如:static struct file_operations demo_fops=owner:THIS_MODULE,write:demo_write,read:demo_read,ioctl:demo_ioctl,open:demo_open,release:demo_release,;l上面的这种特殊表示方法不是标准C的语法,这是GNU编译器的一种特殊扩展,它使用名字对进行结构字段的初始化,它的好处体现在结构清晰,易于理解,并且避免了结构发生变化带来的许多问题。设备驱动程序的一般接口25博创科技博创科技 嵌入互动嵌入互动设备驱动程序的接口lOpen接口:int(*open)(struct inode*inode,struct file*filp);open 方法提供给驱动来做任何的初始化来准备后续的操作.在大部分驱动中,open 应当进行下面的工作:l检查特定设备错误。l如果设备是首次打开,则对其进行初始化。l识别次设备号,如有必要修改f_

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1