VxWorks 引導程序
前言:vxworks 的一些文件,如 usrconfig.c 在 config,comp目錄中均有出現,因編譯方式而選擇某一個文件,命令行方式采用 config 目錄文件,tornado 圖形界麵配置選擇comp 目錄文件。此處采用命令行方式編譯。
Bootrom 完成 vxworks 啟動前的基本引導工作,如最簡初始化硬件,下載映像文件並解壓到RAM中等操作。值得一提的是某些型號處理器對 cache 等部件初始化有特殊要求,可能需在 bootrom 中進行特殊處理。
一、vxworks映像類型
Bootrom、vxworks兩種映像。
Bootrom 用於引導 vxworks,功能如上所述。該映像直接燒在FLASH中,也可用UBoot代替。
Vxworks 多任務的係統映像文件。
二、Bootrom 啟動策略
共三種:bootrom、bootrom_uncmp、bootrom_res。
1、bootrom 壓縮型,占用 flash 空間小,其中大部分被壓縮過,完成將自身從FLASH中解壓並搬運到RAM中的操作,該步驟完成後將跳到RAM中繼續執行 bootrom 程序(聽起來神奇,看起來挺美)。優點:占用flash小,程序段代碼段均在RAM中執行,速度快。
2、bootrom_uncmp 非壓縮型,較 bootrom 型占用 flash 大些,完成將自身從flash到ram的搬運過程,無需解壓,其後與 bootrom 方式一致。個人認為速度會較 bootrom 方式忙些,因讀取 flash 的速度較慢,未壓縮,多讀取flash時間可能超過 bootrom 方式的解壓時間。
3、bootrom_res 駐留flash型,因未經壓縮,占用flash空間和 bootrom_uncmp 大小幾乎一致。運行時代碼段一致在flash中執行,導致速度較上兩種慢;數據段將被搬到RAM中。優點:占用RAM小;缺點:較1占用較多flash空間,較1、2的執行速度慢。
注:bootrom 與 vxworks 關係易混淆。vxworks 是真正係統運行時映像,因支持多種啟動策略,故由其他模塊(bootrom、uboot)完成加載。bootrom 在完成加載使命後將不再被執行。
三、bootrom 啟動流程
這裏描述的bootrom均由命令行方式編譯產生。
1、上電後執行順序
romInit() (romInit.s)
-->
romStart() (bootInit.c)
-->
usrInit() (bootConfig.c)
-->
excVecInit() (target\lib\arm\ARMARCH4\common\libarch.a)
-->
sysHwInit() (bootConfig.c)
-->
usrKernelInit() (target\src\config\usrKernel.c)
(included by bootConfig.c)
-->
kernelInit() (target\lib\arm\ARMARCH4\common\libwind.a)
-->
usrRoot() (bootConfig.c)
2、romInit() (romInit.s)
初始化中斷、時鍾、係統總線、內存。非 bootrom_res 型 bootrom,還將 bootrom 的 romInit 函數段從 flash 搬運到 ram 中,地址映射,之後該函數的執行將在 ram 中進行。對於 bootrom_res 型 bootrom 將一直在 flash 中執行。因 vxworks 係統啟動後,需對所有硬件重新初始化,該函數僅做必不可少的初始化部分。
注:該函數在 ld 的時候被映射到 RAM_HIGH_ADRS。如下:
ldarm -X -EL -N -e romInit \
-Ttext 0C500000 -o bootrom_uncmp romInit.o bootInit_uncmp.o version.o \
bootConfig.o sysALib.o sysLib.o ne2000End.o --start-group -LC:\Tornado2.2_
ARM\target/lib/arm/ARMARCH4/gnu -LC:\Tornado2.2_ARM\target/lib/arm/ARMARCH4/comm
on \
-lcplus -lgnucplus -lvxcom -larch -lcommoncc -ldcc -ldrv -lgcc -
lnet -los -lrpc -ltffs -lvxfusion -lvxvmi -lwdb -lwind -lwindview C:\Tor
nado2.2_ARM\target/lib/libARMARCH4gnuvx.a --end-group -T C:\Tornado2.2_ARM\targ
et/h/tool/gnu/ldscripts/link.RAM
-Ttext 0C500000 -o bootrom_uncmp romInit.o bootInit_uncmp.o version.o \
bootConfig.o sysALib.o sysLib.o ne2000End.o --start-group -LC:\Tornado2.2_
ARM\target/lib/arm/ARMARCH4/gnu -LC:\Tornado2.2_ARM\target/lib/arm/ARMARCH4/comm
on \
-lcplus -lgnucplus -lvxcom -larch -lcommoncc -ldcc -ldrv -lgcc -
lnet -los -lrpc -ltffs -lvxfusion -lvxvmi -lwdb -lwind -lwindview C:\Tor
nado2.2_ARM\target/lib/libARMARCH4gnuvx.a --end-group -T C:\Tornado2.2_ARM\targ
et/h/tool/gnu/ldscripts/link.RAM
3、romStart() (bootInit.c)
bootrom 型:將 code 段、data 段從 flash 中拷貝到 ram中,清內存,之後對code段進行解壓縮。
bootrom_uncmp 型:將 code 段、data 段從 flash 中拷貝到 ram中,清內存。
bootrom_res 型:將 data 段從 flash 中拷貝到 ram。
最後更新:2017-04-03 12:55:36