摘要:以VxWorks嵌入式实时操作系统为例,介绍了改进启动代码(Bootrom)功能的四点经验:(1)具备故障保护功能的Bootrom的自我在线更新;(2)增加重启功能;(3)自动运行应用软件;(4)多种应用软件的选择。
关键词:Bootrom 嵌入式实时操作系统 FTP
VxWorks是美国WindRiver System公司于1983年设计开发后个运行在目标机上的高性能、可裁减的嵌入式实时操作系统(RTOS)。它是一种功能强大而且比较复杂的操作系统,包括了进程管理、存储管理、设备管理、文件系统管理、网络协议及系统应用等几部分。VxWorks为程序员提供了高效的实时多任务调度、中断管理、实时的系统资源以及实时的任务间通信。其核心功能主要有微内核、任务间通信机制、网络支持、文件系统和I/O管理、POSIX标准实时扩展以及C++等其他标准支持。在各种CPU平台上提供了统一的编程接口和一致的运行特性,尽可能地屏蔽不同CPU之间的底层差异。应用程序员可以将尽可能多的精力放在应用程序本身,而不必关心系统资源的管理。VxWorks以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精类技术及实时要求极高的领域中,如卫星通信、弹道制导、飞机导航等。
设计师通常利用VxWorks开发Bootrom代码。Bootrom相当于PC机中的BIOS,它完成对加载过程中所需设备的初始化及驱动;然后,通过某种可选择的通信手段(如网口、串口),将VxWorks内核加载。VxWorks内核相关于PC机上的操作系统,如Linux、Windows。此外,Bootrom还提供了一些辅助功能,如地址内容查看、地址内容修改和Bootrom菜单显示信息控制等功能。但是,在实际应用中,这些功能不够丰富,便利性不足。本文介绍了几点笔者在工作中行之有效的改进Bootrom功能的经验。
1 具备故障保护功能的Bootrom的自我在线更新
Bootrom一般以二进制文件的方式保存在非易失怀存储介质,例如Flash、CF卡、EPROM中。通常需要仿无休止器、烧结器或JTAG工具等才能将代码烧入这类介质,在实际应用中非常不便。以Flash为例介绍如何在线更新Bootrom。
首先,为了做到故障保护,防止在更新过程中发生更新文件出错、断电等灾难性故障,Bootrom的数据必须在更新之前备份在Flash的另一区域。因此,Flash中必须存在两片物理区域,暂且命名为PA和PB,每片512KB(假设Bootrom文件小于512KB)。两片物理区域的起始地址可以互换,其中一片区域的起始地址必须为系统的上电启动地址,这个地址因处理器而异,例如,PowerPC体系结构的处理器的启动地址一般是0xfff00100,而MIPS体系结构的处理器的启动地址是0xbfc00000。在逻辑上,以启动地址开始的区域为主Boot区,另一片区域为备Boot区。
为了实现地址互联换,在CPU模块和Flash芯片之间,增加了一片CPLD(可编程逻辑器件)和一个跳线或拨号开关,开关信号JP输入到CPLD。CPU访问Flash的地址信号和片选信号经过CPLD进行地址互换,再到Flash芯片。如果不跳线(默认情况),JP信号为高,则PA的起始地址为启动地址,PA为主Boot区,PB为备Boot区;否则,JP信号为低,PB的起始地址为启动地址,PB为主Boot区,PA为备Boot区。默认情况下,PA为主Boot区。如图1。
如果系统中有两片Flash芯片,可以不用CPLD,选用另一种地址互换方式,如图2。两个二选一逻辑实现两片Flash片选信号(CS)的互换,从而实现了地址的互换。
地址互换机制屏蔽了PA和PB实际物理位置的差别,给底层软件提供了一个统一的接口,带来的好处不言而喻。Bootrom数据总线是从主Boot区备份到备Boot区,系统总是从主Boot区启动。
其次,编写Flash擦写驱动函数。Flash是一种读写非对称器件,读数据与普通器件一样,比较简单;而写必须根据芯片厂商提供的算法,先擦除欲写入数据的区域,以扇区(Sector)为单位,然后写入数据。函数flashUpdate(char *sourceAddr,char *destAddr,int Length)集成了擦除和写入两个步骤。
再次,在文件bootConfig.cr Bootrom操作接口函数bootCmdLoop()中增加新命令“u”(update的编写)。
switch(*(pLine++)){
……
case "u"; /*更新Bootrom*/
…… /*下载更新代码并更新*/
break;
……
}
“u”命令的实现流程如图3。除了flashUpdate()之外,其它函数都由VxWorks本身提供。如果更新挫败,则改变JP设置,从备份Bootrom启动,再次更新Bootrom或运行应用软件。
2 增加重启功能
VxWorks的Bootrom用户命令缺少重启功能,给调试和实际应用带来诸多不便。与Bootrom在线更新方法相同,增加这项功能其实并不难,只要在函数bootCmdLoop()中增加新命令“r”(reset的缩写),在命令中调用系统重启函数sysReboot()即可。SysReboot()由设计师根据系统的不同自行编写。
Switch(*(pLine++)){
……
case "r"; /*重启系统*/
sysReboot();
break;
……
}
举一反三,还可以根据需要在Bootrom中增加许多自己的命令。完成之后,不要忘了在Bootrom命令解释函数bootHelp()中添加新增命令的用途、用法等帮助信息。
3 自动运行应用软件
在实际应用中,一般将上层软件和VxWorks映象链接在一起,暂且称之为应用程序。默认情况下,当Bootrom运行后,它会倒计时7s,然后从启动参数(BOOT_LINE)指定的路径下载应用程序。但是,因为Bootrom提供了启动参数修改命令,启动参数可能由于某些原因发生更改。例如调试时需要从FTP服务器下载,或者疏忽好奇等,给下次应用带来不少麻烦,很可能出现应用程序下载挫败等故障。
为了保证自动启动总是从固定路径下载应用程序,而不受启动参数的影响,需要修改文件bootConfig.c中的自动启动函数autoboot()。例如,自动启动总是从CF卡读取应用程序。
if(bytesRead ==0){ /*倒计时期间没有输入*/
LoadApplicationImage();/*复制应用程序映象到起始地址为Entry的内存中*/
go((FUNCPTR)ENTRY;/*从Entry地址开始运行*/
}
else{
……
}
Entry是应用程序的入口地址,VxWorks系统中该值是RAM_LOW_ADRS。LoadApplicationImage()函数将应用程序映旬从CF卡复制到起始地址为Entry的内存中,然后将PC指针指向该地址,启动系统。如果在倒计时期间有字符输入,则进入Bootrom的命令界面,用户可以修改启动参数,然后按“@”从启动参数指定的路径下载程序,而不影响调试,但是更改后的参数不会影响下次自动启动的下载路径。
4 多种应用软件的选择
在通信领域,许多产品的硬件平台其实相同,区别在于应用软件。不同的软件塑造出了一个个特色鲜明的产品。如果能够将不同的软件集成到一个硬件平台上,由用户在启动时选择,那么这个产品就拥有一机多能的特性,大大增强了产品的市场竞争力。
退而言之,即使硬件平台只适合于一种应用软件,将故障检测程序作为另一种应用软件,会带给产品测试和现场维修人员诸多的方便。
参考以上三点经验,在Bootrom中增加这项功能并非难事。以两个应用软件为例,在函数bootCmdLoop()中增加新命令“o”(other的编写),如下所示。
switch(*(pLine++)){
……
case "o": /*启动另一应用软件*/
LoadAnoterApplicationImage();/*复制另一应用程序映象到起始地址为Entry的内存中*/
AutoSystemVersionSet();/*询问用户是否将另一应用软件设置为默认启动*/
go((FUNCPTR)Entry);/*从Entry地址开始运行*/
break;
……
}
图3
在Bootrom代码中定义一个变量defaultVersion,用于记录谁是默认的启动软件,该变量保存在Flash等非易失媒质中。上电后,如果在倒计暑期间没有任何输入,系统自动启动defaultVersion指定的应用软件;否则,用户进入命令界面。如果键入“o”命令,Bootrom调用函数LoadAnotherApplicationImage()将另一应用程序映象复制到起始地址为Entry的内存区域,然后询问用户是否希望将另一应用程序设置为默认启动;如果用户回答“是”,更改defaultVersion值;否则,defaultVersion值不变。最后运行当前选定的应用软件。
上述的几点经验大部分是修改文件bootConfig.c的代码。因为bootConfig.c是一个公用文件,为了不影响其它底层软件的开发,建议将它复制到当前Bootrom开发目录下,并且在Makefile文件中增加定义:BOOTCONFIG=bootConfig.c。
嵌入式系统开发需要经常开辟新的思路,一些微小的简单改动通常能够带给产品新的功能和特征。启动代码是嵌入式系统的重要组成部分。笔者的以上四点经验在PowerPC处理器(MPC8260)平台和MIPS处理器(RM7000A)平台上得到了验证,希望对其它系统的启动代码的开发有所借鉴和启迪。
引用地址:Bootrom功能改进经验谈
上一篇:一种低成本的Ehternet嵌入式系统的设计
下一篇:利用ColdFire uClinux实现数据采集和传输
- 热门资源推荐
- 热门放大器推荐
小广播
热门活动
换一批
更多
最新应用文章
更多精选电路图
更多热门文章
更多每日新闻
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况
更多往期活动
11月17日历史上的今天
- 英唐智控拟取得上海芯石40%股权,加码SiC功率器件
- 洁美科技:目前塑料载带产能紧张 半导体客户有小批量供货
- A股半导体封测概念股盘点:九大厂商谁是“双料”之王呢?
- 深度绑定了世茂集团,云知声存“粉饰”业绩嫌疑
- 或明年量产,中电化合物半导体项目产品进入客户认证阶段
- 提高AI模型数据吞吐量 芯动力发明神经网络权值存储的方案
- 投资10亿元 石大胜华建锂电材料生产研发一体化项目
- 艰难!逆变器芯片涨价又缺货!关键时刻,国产芯片能不能顶的上?
- Imagination发布专为自主运算时代的安全关键系统所设计的 CPU IP ─ MIPS I6500-F
- 松灵机器人新品丨特种重载防水履带底盘BUNKER Pro,真的很强
厂商技术中心