保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

基于VxWorks的bootrom代码改进


函数,开始初始化系统硬件、内核以及其它外围设备。

壳函数usrInit()代码如下:

void usrInit(void){

volatile FUNCPTR absEntry;

if(inflate((UCHAR*)ROM_OFFSET(_binArrayStart),

(UCHAR *)(RAM_LOW_ADRS),&_binArrayEndbinArrayStart)!=OK)

return;

absEntry=(FUNCPTR)(RAM_LOW_ADRS);

(absEntry)();

}

其中RAM_LOW_ADRS为系统低地址,是操作系统运行的起始地址,但bootrom可以利用低地址来实现在系统高地址的运行。宏ROM_OFFSET用于准确定位函数地址,因为bootrom中运行的代码要求以相对地址方式来寻址,而不能以绝对地址方式寻址。_binArrayStart为压缩后二进制代码的开始符,_binArrayEnd为压缩后二进制代码的结束符。Inflate()是VxWorks软件的解压缩函数,用于解压缩由deflate()压缩函数压缩的二进制文件映像。同时,需要将下述代码添加到编译规则文件rules.vxWorks中的相应部分:

$(CC)-c $(CFLAGS)$(BSP_DIR)/unzip.c-o$(BSP_DIR)/unzip.o

$(LD)$(LDFLAGS)-e sysInit -Ttext $(RAM_LOW_ADRS)o

unzip_obj.o sysALib.o $(BSP_DIR)/unzip.o $(LIBS)flex.z.o

其中,unzip.c中包含构造的壳函数usrInit()。SysInit()为解压软件入口函数。上述语句的功能:第一行完成壳文件的编译,第二、三行完成壳目标代码与第二份bootrom代码的链接。这样,一个具有解压功能的壳函数就被链接到第二份bootrom映像中了。

    图1、图2是修改前的系统运行方式与修改后系统运行方式比较。

通过这两种方式的比较可以看出,修改前系统运行式与修改后的运行方式有下面两点差异;①第一份bootrom启动后,前者存在解压缩自射映像的操作,而后者没有;②对于第二份bootrom,前者没有壳代码,而后者有。

2.3 缩减文件长度

通常第一份bootrom代码只有两个文件,一个是包含CPU和SDRAM初始化文件romInit.s,另外就是包含romStart()函数的bootInit.c文件。另外,根据需要还可以添加提供串口轮询显示功能的文件。对于第一份bootrom代码,通常只有10KB左右(这是针对系统修改后的方式),而对于包含壳函数代码的,通过建立工程并编译而生成的第二份bootrom比较大,通常为570KB左右。(注意:这几个数值是通过特定的产品来得出的结论,并不应用于所有产品,但遇到类似的情况可以借鉴处理。)而其后面的一部分完全是0,可以考虑去掉这些0,但不能影响软件的功能。经过测试得出结论:去掉后面的0对系统功能和性能没有任何影响。

通过文件的操作来实现两份bootrom合并,合并后的大小要求小于或等于512KB。如果不采用任何措施,直接将两个文件合并起来要在580KB左右,大于512KB,这是很多系统不能满足的。第二份bootrom映像的后面部分的内容类似表1所列的信息。

表1 bootrom映像部分二进制内容

000 210h EB E2 BD 95 BD 15

《基于VxWorks的bootrom代码改进(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/159712.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。