字符设备驱动课件.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
字符设备驱动课件

字符设备驱动程序 Character Device Drivers 2002-7-25 模块结构 I/O系统可以管理若干个设备驱动程序 I/O系统和设备驱动程序之间的接口模型就是字符设备驱动程序接口 一个驱动程序处理所有同类型的设备,这些设备可能只是参数不同,例如I/O地址,中断号等 模块初始化 启动过程中, 调用iosInit()初始化I/O系统 调用xxDrv()初始化设备驱动程序 调用xxDevCreate()创建设备(可能有若干个) 系统启动代码即 config/all/bootConfig.c,对于boot ROM prjConfig.c,对于Tornado project iosInit() – 初始化I/O系统 在usrRoot()里调用 NUM_DRIVERS是最多能安装的设备驱动程序的个数 在configAll.h中定义为20 NUM_FILES是同时能够打开的最多的文件(设备)的个数 在configAll.h中定义为50 以上两个参数可以在WindConfig中修改 “/null”是空设备名称 xxDrv() – 初始化驱动程序 它是设备驱动程序的初始化函数(注意:不是设备的初始化函数!) 参数是7个函数指针 需要调用iosDrvInstall()向I/O系统注册自己 iosDrvInstall()成功后返回一个非0的驱动号(driver number) 模板如下 驱动程序表 I/O系统用一个driver table保存驱动程序的信息 7个函数指针 空指针表示驱动无该项操作 表项的索引就是驱动程序号(driver number) 表的大小固定,有NUM_DRIVERS项 xxDevCreate() – 创建设备 初始化该设备 设备信息由函数参数传入 向I/O系统注册该设备 XX_DEV结构 XX_DEV结构一般定义在驱动程序的头文件中,例如xxDrv.h XX_DEV结构头部是一个DEV_HDR结构(类似OO中继承),所以XX_DEV*类型的指针同时也是一个DEV_HDR*类型的指针 XX_DEV结构的剩下部分被驱动程序用来保存设备信息 I/O系统使用DEV_HDR数据结构来维护设备 DEV_HDR结构作为双向链表的节点 设备列表 I/O系统使用一个设备列表(device list)维护设备 使用iosDevAdd()添加设备,例如 iosDevAdd(pDev0, “/xx0”, 2); iosDevAdd(pDev1, “/xx1”, 2); open() – 打开设备 fd = open(“/xx0/yy”, O_RDONLY, 0); FD – 文件描述符 FD_table的索引,是一个小整数;由creat()或open()返回,由read(),write(),ioctl()和close()使用 可以用来标识: 字符设备(设备描述符?) 文件系统上的文件 socket 对于字符设备,fd用来标识该设备 对于文件系统,fd可以用来标识整个文件系统,也可以用来标识文件,例如: fd = open(“/dosFs”, …); - 打开文件系统 fd = open(“/dosFs/text.txt”, …); - 打开一个文件 对于socket,用socket()函数得到fd: fd = socket(…); 在Shell下可以使用iosFdShow显示当前打开的文件 read() – 读设备 nbytes = read(fd, buf, len); creat()和open() – 创建和打开 creat()原先被用来在文件系统上创建一个文件,现在open()也可以创建文件。一般的字符设备驱动程序中xxCreat=xxOpen VxWorks下只有NFS驱动程序使用mode参数 remove() - 删除文件 remove()通常用来删除一个文件;通常的字符设备驱动程序并不使用(即xxRemove=0) remove()不是用来删除设备或驱动程序的! 删除设备使用iosDevDelete() 删除驱动程序使用iosDrvRemove() 使用remove()的2个驱动程序: 文件系统,例如dosFsLib,使用它来删除文件系统中的一个文件 网络文件系统,例如netDrv,使用它来请求删除一个远程文件 close()和ioctl() – 关闭设备和I/O控制 close()关闭设备/文件 ioctl()对设备执行I/O控制。它调用xxIoctl(devId, function, arg);由(function, arg)参数指定的功能是由驱动程序规定的 ioLib.h中预定义了一些功能号和参数 字符设备驱动程序编写指南 Character Device Driver Programmer’s Guide

文档评论(0)

wyjy + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档