CF卡驱动软件说明

上传人:m**** 文档编号:122490034 上传时间:2022-07-20 格式:DOC 页数:9 大小:195KB
返回 下载 相关 举报
CF卡驱动软件说明_第1页
第1页 / 共9页
CF卡驱动软件说明_第2页
第2页 / 共9页
CF卡驱动软件说明_第3页
第3页 / 共9页
亲,该文档总共9页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
CF 卡驱动软件设计说明1. 驱动模型介绍1.1VxBus 驱动介绍操作系统VxWorks6.X版本下的驱动开发提出一个新的概念:VxBus虚拟总线。 在VxBus提出之前,驱动程序是通过直接编辑修改BSP产生的。VxBus提供对设 备驱动的管理,提高了 VxWork 开发的可扩展,可升级等性能。一方面, VxBas 将各个驱动有效组织,并将驱动对应到实际的设备上,形成实例;另一方面,VxBus 给上层软件提供友好的接口来调用设备,使底层驱动对于上层用户更加透明。另 外,VxBus将设备驱动模块化,这些模块能在WindRiver的开发环境Workbench 里方便的组织和配置,这就意味着驱动可以加入一个工程中,也可以进行配置和 删除,不需要对 BSP 进行修改,简化了驱动的开发过程。按照驱动完成的不同功能, VxBus 将驱动分为以下几个大类:串行驱动、存 储驱动、网络接口驱动、非易失性RAM驱动、计时器驱动、DMA控制器驱动、总 线控制器驱动、USB驱动、中断控制器驱动等。对于VxBus驱动结构的更详细的 介绍请参考基于VxBus的驱动程序架构分析。本文中,我们将CF卡设备按照 存储驱动类进行开发。12文件系统与XBD工具VxWorks 为不同类型的应用提供多种文件系统。大多数 VxWorks 文件系统依 赖eXtended Block Device(XBD)工具作为文件系统和设备驱动之间的标准接口。 这种接口可以允许开发人员将文件系统和设备驱动自由组合。可移动设备的文件 系统利用文件系统监督程序自动监测设备插入,并且在设备上实例化适当的文件 系统。CF卡属于物理块设备,物理块设备是指由一系列可访问的独立数据块组成的 设备。在 VxWorks 中,块就是指最小的可寻址单元。最常见的块设备就是磁盘。 在VxWorks 中,块设备的接口与其它I/O设备的接口不同,它不是与I/O系统 直接交互,而是通过eXtended Block Device(XBD)处理文件系统与块设备之间 的I/O活动,它提供了文件系统与块设备之间的标准接口。1.3 CF卡的XBD驱动模型大容量块设备驱动与文件系统进行交互,文件系统与 I/ O 系统进行交互。 XBD(extended block device)使用 ERF(event reportingframework)与驱动和高 层功能交互。系统为CF卡设备驱动分配一个XBD结构。当CF卡插入系统后,ERF 就会产生一个插入事件通知那些等待该设备插入的上层函数。XBD工具包括两个主要数据结构:XBD结构,保存设备名,设备类型,设备方法指针,设备块大 小以及块数等设备物理属性;BIO结构,BlockIO(BIO)结构包括读写XBD设 备的必要信息:起始块号,块数,数据传输方向和数据缓存。CF卡设备的XBD驱动模型如图l所示。大框中表示以下事件:(1) DOS FAT32 文件系统向 ERF 登记,并且等待设备插入事件。(2) 设备驱动通知ERF设备插入,并且为CF卡设备创建一个XBD接口。(3) ERF通知已经注册的FAT32文件系统,现在文件系统就可以访问CF卡设 备了。(4) 文件系统在 XBD 设备驱动的上层再创建一个分区层。另外, CF 卡驱动分为两层,靠近底层的 CF 卡主控制器驱动 Sata Host Controllerdriver,以及靠近上层的XBD大容量存储驱动Mass Storage Class XBDdriver。SD DevicesSATA DriverSATA Host Con trollerNon-BlockDevice DriverI/O SystemMass Storage Class (XBD)DriverApplicati on图 1-CF 卡的 XBD 驱动模型Eve ntFAT32 File SystemReporti ngFrameworkPart1Part2Partitioning Layer2.CF 卡驱动程序设计VxBus 存储驱动提供块设备管理程序,将各种 VxWorks 文件系统挂载到块设 备上。它采用的 XBD 驱动程序设计工具,利用两个相关的 VxWorks 子系统库: eXtendedBlockDevice(XBD)和 Event Reporting Framcwork(ERF),作为连接设 备驱动和 VxWorks 文件系统之间的接口。驱动层次结构如图 2 所示。图 2-驱动层次结构驱动层又分为两个子层:CF卡硬件驱动层和VxWorks子系统库驱动层。CF 卡硬件驱动层直接操作 P1010E 处理器上的 SATA 控制器中相应寄存器就可以对 CF卡发送命令,完成CF卡初始化以及数据传输等功能。VxWorks子系统驱动层 调用 eX tended Block Device(XBD )和 Eve nt Repor ting Framework(ERF)子系统 提供的接口函数,完成块设备初始化,创建块设备,访问块设备以及删除块设备 的功能。以下小结依次介绍驱动层的各模块实现方法。2.1 VxBus 驱动注册在VxBus驱动程序设计方法中,驱动程序首先调用API接口 vxbDevRegisterO 通知VxWorks操作系统该驱动可用,并且提供关于该驱动的必要信息,包括设备 ID、挂载总线类型、驱动版本、驱动名以及初始化函数集。CF卡挂载在PLB(processor local bus)总线上,当PLB驱动初始化以后,它就会发现CF卡 直接连接在处理器本地总线上, VxWorks 系统将驱动与设备匹配在一起组成实例。 此时,输入vxBusShow命令,就可以在注册驱动列表中找到挂载到PLB总线上的 SATA 驱动,设备实例列表中也出现了 SATA 实例。驱动注册完毕以后,进行 CF 卡块设备驱动的初始化。该过程经过以下 3 个阶段: v xbF s lSataInit , vxbFslSatalnit2 和 vxbFslSataConnect。因为存储类驱动依赖 XBD 库和 VxWorks IO 系统的其它部分,所以块设备驱动必须在它们之后进行初始化,这就意味 着大部分初始化过程必须在第三阶段 vxbFslSataConnect 进行。在初始化的第三 阶段,首先进行 SATA 控制器的初始化,初始化完成后,创建驱动程序的设备服 务线程 fslSataPortMonitorTask。22 CF卡控制器SATA Controller和CF卡初始化CF卡控制器SATA Controller的初始化,包括以下内容:(1)、构建命令头(Command Header)和命令描述符(Command Descriptor) 的内存区并初始化。( 2)、将 SATA 控制器设为离线模式。(3)、将命令头内存区的首地址写入到CHBA寄存器中。( 4)、初始化相关各寄存器。( 5)、将 SATA 控制器设为在线模式。( 6)、等待物理层连接就绪。( 7 )、等待设备通知信号更新。23 启动设备服务任务fslSataPortMonitorTask 任务程序流程如图 3 所示。主线程实现一个死循化 每循环一次检查 CF 卡是否刚插入,如果刚插入,将 CF 卡进行初始化,并且在 VxWorks 中创建块设备;如果卡刚拔出,将 CF 卡块设备从操作系统中删除。卡是否插入否丕XBD设备是否_是任务入口创建XBD设备删除XBD设备初始化CF卡图 3- 设备服务任务流程图2.2创建XBD块设备当 CF 卡控制器 SATA Controller 以及 CF 卡初始化进行完毕以后,下一步将 CF 卡作为块设备加入操作系统中。首先创建并初始化任务同步所需信号量,然 后创建执行I/O任务的线程fslSataPortBioTask,最后通知XBD块设备抽象层 新设备的加入。通知XBD块设备抽象层新设备的加入过程通过以下3步完成:(1) 在CF卡驱动中使用ERF子系统提供的API接口函数erfHandlerRegister 向ERF子系统登记一个程序fslSataXbdDevCreateSyncHandler。当XBD完全初 始 化 后 , ERF 系 统 会 发 出 xbdEventInstantiated 事 件 , 程 序 fslSataXbdDevCreateSyncHandler 收到这一事件后将被触发。为了避免再次被 触发进而阻塞设备创建程序,由 fslSataXbdDevCreateSyncHandler 指向的函数 仅仅需要调用erfHandlerRegister将自己从ERF中注消掉。因此,在XBD初始 化之前,设备创建程序都不会退出。(2) 调用API接口 xbdAttach向XBD块设备抽象层注册访问CF卡设备的3个 操作函数,fslSataXbdIoctl,fslSataXbdStrategy 和 fslSataXbdDump。注册完 毕后,xbdAttach通过参数返回该设备的句柄,在ERF系统中,该句柄可以标识 这一设备。(3) 调用 ERF 程序 erfEventRaise 提出 xbdEventPrimaryInsea 事件来通知 E 层软件系统创建了新设备。至此, XBD 块设备创建完成。输入 devs 命令,系统 设备列表中已经出现块设备CF卡“ /cf:1”。2.4访问XBD块设备操作系统访问 CF 卡块设备是通过上一小节提到的 3 个操作函数实现的,它 们是:fslSataXbdIoctl,fslSataXbdStrategy 和 fslSataXbdDump,下面依次介 绍这3 个函数。(1) 、fslSataXbdIoctl 函数为多种驱动功能提供了接口,比如:设备弹出、 能源管理、诊断报告、获取设备物理信息、XBD栈初始化等。当设备弹出时,调 用函数 erfEventRaise 提出 xbdEventRemove 事件来通知上层软件系统。获取设 备物理信息以一张128M的CF卡为例,物理信息包括磁头数8、每磁道扇区数32、 柱面数 980、块大小 512。 XBD 栈初始化完成以后,通过函数 erfEventRaise 提 出 xbdEventlnstantiated 事件来通知上层软件系统块设备初始化完毕,创建块 设备阶段的函数 fslSataXbdDevCreateSyncHandler 收到这一事件后将被触发。(2) 、fslSataXbdStrategy将访问存储驱动的I / O任务排成队列。当接到读 写操作命令时, XBD 子系统将调用 fslSataXbdStrategy 函数处理文件系统传递 过来的 BIO 数据结构,将这些 BIO 结构加入队列,然后释放信号量 bioReady, 线程fslSataPortBioTask得到信号量bioReady后,解析BIO结构,提取出数据 传输方向、传输大小、起始块号信息,将它们作为参数传递给CF卡硬件驱动层的数据传输模块,实现指定I / O任务。(3) 、fslSataXbdDump,当出现灾难性系统失败时,该程序完成最后的写数 据处理。2.6删除XBD块设备删除各个信号量;调用 ERF 程序 erfEventRaise 提出 xbdEventRemove 事件 来通知上层软件系统该设备已经被删除;调用xbdDetach(),在XBD子系统中删 除该设备。3. CF 卡驱动的移植我们 从 VxWorks 官方提 供的 FreeScale 的 BSP 中 , 可 以直接找 到 vxbFslSataStorage.c 和 vxbFslSataStorage.h 两个文件,这两个文件是 SATA 的驱动程序源文件。阅读源码可以发现, VxWorks 官方提供的 SATA 驱动源码不 仅可以驱动CF卡,类似CF卡的大容量块设备都是可以通过XBD工具与SATA控 制器连接起来的,不过这里需要说明的一点就是硬件上需要有协议转接芯片,如 JM20330 芯片,它可以将处理器发出的 SATA 信号转化为磁盘设备能识别的 IDE 信号。我们需要做的就是,如何将官方驱动代码与我们的 P1010 处理器结合起来, 能够正常与外界块设备-CF卡通信,具体修改如下:3.1 添加中断信息在 hwconf.c 中 找 到 epicInputs 结 构 体 数 组 , 添 加 成 员 EPIC_SATAl_INT_VEC,fslSata,0, 0 ,将SATA控制器的中断信息添加到系 统配置中。3.2添加SATA资源在hwconf.c中添加SATA控制器对应的资源结构体,结构体中包含SATA控 制器的寄存器基地址和对应的中断信息两个资源。conststructhcfResource fslSata0Resources = regBase,HCF_RES_INT, (void *) (CCSBAR + 0x18000) ,irq, HCF_RES_INT, 58,;3.3添加SATA设备在hwconf.c中找到hcfDeviceList结构体数组,并添加成员 fslSa ta,0, VXB_BUSID_PLB, 0, fslSataONum, fslSataOResources ,将 SATA 设备添加到 系统对应的设备列表中,供系统初始化时使用。3.5 修改3.4修改SATA初始化因为在调试中发现了一些问题,并将问题最终定位到初始化引起的,我们结 合了 P1010 UBoot 对驱动中的 SATA 控制器的初始化过程作了修改,详见 fslSataPortInit()。35 实现 satalntEnable()接 口由于 FreeScale 官方提供的驱动代码不是针对 P1010 编写的,所以我们需要 阅读 P1010 的芯片手册来实现使能 SATA 控制器中断的接口函数。然后,我们需 要在合适的时机调用这个接口,以保证我们的 SATA 控制器可以正确地初始化。 我们在fslSataDrvVxblnit()接口的最后,也就是fslSataCtrllnit()接口结束 后,调用 satalntEnableO。4.CF 卡设备访问设备驱动程序建立后,对CF卡进行格式化dosFsVolFormat(),应用程序就 可以使用FAT32文件系统的基本I/O函数访问CF卡了,这些函数包括open()、 read()、write()、mkdir()、ll()、copy ()等,方便了在系统中管理数据文件; 同时,用户也可以在命令行模式下输入命令进行文件操作。下面一段应用程序是在CF上对文件进行读写的示例代码:int Test(void)FILE * fd = NULL;charbuf32=abcdefg;charrdback256 = 0;int ret =0;printf(bn);fd=fopen(/cf:1/a.txt,a+);if(fd = NULL)printf(fisrt: open file error!n);return -1;ret = fwrite(buf,1,7,fd);if(ret=0)printf(fwriteerrorn!); fclose(fd);return -2;fd=fopen(/cf:1/a.txt,r); printf(second : open file error!n); return -3;ret = fread(rdback,1,32,fd);if(ret = 0) printf(read error!n); fclose(fd);return -4;elseprintf(%s, %dn,rdback,ret); fclose(fd);return 0;对于命令行下对CF卡的操作,请参见CF卡操作说明一文,此处不再赘 述。
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 模板表格


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!