Bootrom功能改进经验谈
扫描二维码
随时随地手机看文章
摘要:以vxworks嵌入式实时操作系统为例,介绍了改进启动代码(bootrom)功能的四点经验:(1)具备故障保护功能的bootrom的自我在线更新;(2)增加重启功能;(3)自动运行应用软件;(4)多种应用软件的选择。 关键词:bootrom 嵌入式实时操作系统 ftpvxworks是美国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*/…… /*下载更新代码并更新*/