閱讀135 返回首頁    go 微軟 go Office


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
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

  上一篇:go Android抽屜效果 DrawerLayout 入門經驗總結
  下一篇:go 2013藍橋杯【模擬賽】運送馬匹