实现嵌入式实时系统从优盘启动的可行性探析

引 言
随着usb技术的发展,优盘在pc机系统上已得到广泛的应用,基本上取代了软盘,pc机系统可以实现从优盘启动。由于优盘性能稳定,体积小巧,访问速度快,因此它也非常适合作为嵌入式实时系统的存储设备。这为嵌入式实时系统的启动提供了一种崭新的思路,即从优盘启动。这种方法对嵌入式实时系统板上的程序存储空间要求不高,只要在flash中存储嵌入式实时系统的bootrom程序即可,将系统的映像文件放在优盘上,实现实时操作系统从优盘加载。
目前基于vxworks设计的嵌入式实时系统应用非常广泛。嵌入式实时系统的启动方式多种多样,windriver公司提供的参考bsp(board support package)包中就提供了几种启动方法。另外在参考文献[2]中,作者也提出了几种基于vxworks的嵌入式系统的启动方法。这些方法可根据具体的应用需求,适当选取。笔者在开发cablemodem时也都曾实现过这些方法。这些方法存在的共同问题是:虽然能更新板载程序存储器中的映像文件,但由于程序存储器一旦设计后就无法再扩展其存储空间;而在实际应用中,由于嵌入式系统功能的增强,系统映像文件的体积会不断增大,会出现超过目标板的程序存储空间的问题,从而使得新的映像文件无法烧录到目标板中。
嵌入式实时系统从优盘启动的显著优点主要表现在:更新系统映象文件方便(替换优盘中的影像文件即可,无需重新烧录);启动快速(usb接口传输速度快),可适用于多种实时操作系统(保存在优盘中的映像文件也可以是使用其他嵌入式实时操作系统,如psos、nuclues等开发生成的);对系统的flash存储容量要求小(flash中主要存储bootrom程序,而系统映像文件保存在优盘中)。
本文给出了实现嵌入式实时系统优盘启动的嵌入式主机硬件结构、软件协议栈以及主要程序流程,探讨了实现嵌入式实时系统从优盘启动的可行性。
1 嵌入式usb主控制器的硬件结构及驱动
嵌入式系统是软硬件紧密结合的系统。要实现从优盘启动,硬件上必须在嵌入式微处理器外围添加usbhost主控制器;在软件上必须设计主控制器驱动程序 (hcd)、usb驱动程序、usb client驱动程序以及应用程序。
1.1 嵌入式usb主机硬件结构
嵌入式usb主机硬件结构比较简单,只是在嵌入式微处理器外部加上usb主控芯片即可。在本项目中,嵌入式微处理器采用的是motorola公司的mpc860t,usb主控制芯片采用的是sl811hs芯片。sl81lhs芯片是cypress公司生产的、可支持全速数据传输的usb控制芯片,芯片内含usb主,主/从控制器,支持全速(full speed)/低速(low speed)数据传输,并能自动识别全速或低速设备。sl811hs所提供的接口遵从usbl.1标准。关于sl811hs更详细的使用方法请见参考文献[3]。使用sl811hs作为嵌入式usb主机控制器的系统硬件结构如图1所示。
1.2 嵌入式usb主机上的软件结构
从参考文献[4]可知,嵌入式主机要实现对其usb外设操作,必须有图2所示的3个软件结构层次:usb主控制器驱动器(hcd)、usb主驱动器(usbd)、usb没备驱动器。
在协议栈的最底部是usb主控制器usb hc(usbhost controller),这是主系统中控制每一个usb设备的硬件部分。口前主要有两大类usb主控制器:一种是通用主控制器接口uhci(universal host controller inter-face),另一种是开放主控制器接口ohci(open hostcontroller interface)。硬件厂商一般根据这两个规范设计usb主控制器。对于每一类型的主控制器都有一个与硬件独立的usb主控制器驱动器hcd(host controllerdriver)。windriver公司提供了两类驱动:usbheduhcilib(uhcl主控制器库)和usbhcdohcilib(ohci主控制器库)。
usb主驱动器usbd(usb host driver)和hcd之间的接口允许一个或超过一个的底层主控制器,而且windriver公司的usbd能够同时连接多个usb hcd。这样的设计特点可以使开发者建立复杂的usb系统。usbd是在hcd之上的与硬件独立的模块。usbd管理每一个与主机相连的usbd设备,向更高层次提供了可与usbd设备通信的路径。它还负责自动处理usbd电力管理以及usbd带宽管理;而且,usbd还管理usbhub。hub能否正确工作,是对usbd进行评价的标准之一,因此windriver公司的usbd设计者要使usbd透明地实现huh的功能。这意味着usbd还能处理usbhub和设备的动态插拔。
usb客户模块在usbd主驱动协议栈的顶端。usb类驱动(usb class driver)是client模块的典型例子。usbd类驱动负责管理连接到usbd上的不同类型的设备,它们依靠usbd提供与每个设备的通信路径。usbclient模块的其他例子就是那些利用usbd与usb设备通信的应用程序。
2 嵌入式实时系统优盘启动软件程序设计
为实现对优盘的操作,在基于vxworks设计的嵌入式实时系统中,需要设计的程序包括:usb主控制器驱动器、usbd主驱动器、usb块存储设备驱动程序、文件系统的安装以及应用程序通过文件系统读写优盘设备程序等,如图3所示。故要实现从优盘启动,需要在bootconfig..c文件中的usrroot函数巾添加4个函数。
(1)初始化usb主控制器的函数
初始化hcd(usb host controler driver)函数,即初始化sl81lhs并将其连接到指定总线上:local int fn-cattach(phrb_attach phrb)。
该函数词用sl811init()初始化sl811控制芯片。执行函数taskspawn(“tsl81lint”,0,0,0x4000,(funcptr)intthread,(int)phost,0,0,0,0,0,0。0,0,o),创建intthread任务对发生的中断作出处理。
这里的inttbaead调用oss_sem_take(phost-》in-tpendi
ng,interval)阻塞,与中断服务程序inthandle同步。
调用函数processsl811hinterrupt()处理硬件中断,读取中断状态寄存器判断中断类型。
调用uhc_int_connect(phost,inthandler,phost,&s)函数连接sl811主控制器芯片中断。uhc_int_connect是一个宏定义。
函数inthandler完成对中断的处理,调用函数oss_sem_give(phost-》impending),释放用于中断和任务之间同步的二进制信号量。
(2)初始化usbd的函数
函数usbdinitialize()初始化内部usbd数据结构,并依次调用其他usb驱动栈模块的入口。
函数usbdlnitialize()调用usbdhcdattach(execfunc,&s1811iocfg,ptoken)把hcd连接到usbd上。这里的execfunc就是函数usbhcdsl811hexee()。
函数usbdinitialize()调用usbenumerate(usbd_client_handle clienthandle,file*fout)列举所有连接到系统上的usb主控制器、hub和usb设备。
(3)初始化usb存储设备的函数
函数usbbulkdevinit()完成usb盘的初始化并安装dos文件系统。
函数usbbulkdevlnit调用函数usbdclientregister(“bulk_class”,&usbdhandle)及函数usbddynamicat-tachregister(usbdhandle,usb_class_mass_storage,usb_subclass_scslcommand_set,usb_interface_protocol_bulk_only,usbbulkdc-vattachcallback),建立同usb的连接,注册回调例程。
函数usbbulkdevlnit调用函数oss_threai)_cre-ate(bulkclientthread,(pvoid) fout,oss_priorityinterrupt,“tbulkclnt”,&bulktaskid),创建一个任务,管理优盘的插入和移出。
其中bulkcliemthread例程调用pbulkblkdev=(blk_dev*)usbbulkblkdevcreate (bulknodeld,null,null,usb_scsi_flag_read_writel0);安装usb设备。 调用pbulkdosvol=dosfsdevinit(“/ud0/”,pbutkblkdev,null);安装dos文件系统。
(4)从优盘加载映像文件的函数
设计usbdload(),实现映像文件vxworks从优盘设备加载。usbdload()函数主要包括以下语句:
修改bootconfig.c文件中的bootload函数,加入对从优盘启动的支持。主要加入以下语句:
重新编译、链接生成新的bootrom.hex,烧录到板子上的flash中,将vxworks映像文件拷贝到优盘上,将优盘插入到嵌入式主机的usb接口上。在启动的过程中,系统会自动装载优盘的vxworks系统映像文件,实现基于vxworks的嵌入式实时系统优盘启动。
3 总 结
在基于mpc860和vxworks设计的嵌入式实验板上可实现嵌入式实时系统从优盘的启动。当然,在实际应用中还可以将嵌入式实时系统采集到的数据保存到优盘上,这样能方便地实现嵌入式设备和pc机设备资源的共享。

Xilinx全新UltraScale架构介绍
机器视觉与plc信号如何对接?
小米手机终极杀手锏 小米5C还有这张王牌让小米更加便宜?
圆针和正反三角形切割针刃口锋利度测试仪
片式电感器的优势有哪些
实现嵌入式实时系统从优盘启动的可行性探析
村民普法课堂:多媒体助力乡村普法宣传
2019年中国工业互联网平台概述、简述及研究报告!
国芯思辰|可替换上海贝岭BL8023D的国产大电流双向继电器驱动芯片CN8023,典型静态电流10nA
KONICAMINOLTA柯尼卡美能达CA-410色彩分析仪
机器人技术基础系列:规划与导航
铝电解电容制作过程和铝电解电容寿命计算原理解析
索尼PS4版游戏成为亚马逊与日本的畅销商品
未来LED显示不只是一个产品,而会是一个应用!
iPhone13新品发布_iPhone12价格直降千元
PCB设计中的DVI布线技巧
我国锂硫电池技术获新突破
区块链技术将重新定义资本市场
MAX6969 16端口、5.5V恒流LED驱动器(含应用电
e络盟为关键应用领域推出最新的创新半导体工具及开发套件