閱讀952 返回首頁    go 阿裏雲 go 技術社區[雲棲]


ROM型啟動方式概述

ROM 型啟動方式概述

    所有的VxWorks 內核映像類型中,隻有VxWorks 類型使用的bootrom 引導程序進行啟動,此時VxWorks 內核映像放置在主機端,由目標板bootrom 完成VxWorks 的下載,一般通過網口(或串口)方式進行。其他類型(文件名中帶有rom字樣的)無須bootrom的配合,也即不需要bootrom。因為這些VxWorks 類型的內核映像自身(而非bootrom)被燒入開發板係統ROM或者Flash中,均無須進行下載,係統上電時,將直接跳轉到VxWorks內核映像入口函數執行操作係統的初始化工作。

    ROM型啟動方式下的VxWorks內核映像類型有以下幾類。

    ① VxWorks_rom.bin:非壓縮版VxWorks內核映像類型不含內核符號表。如果需要包含內核符號表,則在config.h文件中定義INCLUDE_STANDALONE_SYM_TBL組件。

    ② VxWorks.res_rom.bin:非壓縮版代碼駐留ROM 中執行的VxWorks內核映像類型(含內核符號表)。

    ③ VxWorks.res_rom_nosym.bin:非壓縮版代碼駐留ROM中執行的,不包含內核符號表的VxWorks內核映像類型。

    ④ VxWorks.st_rom.bin:壓縮版本的內含內核符號表的VxWorks內核映像類型。

    ⑤ VxWorks_romCompress.bin:壓縮版的不含內核符號表的VxWorks內核映像類型。

    不同的VxWorks內核版本下,在內核映像名稱上會有所變化,但一般都包含在以上類型中。從這些映像類型來看,主要有以下區分:

  l 是否為ROM駐留方式,即代碼是否被複製到RAM中執行。

  l 是否進行了壓縮。

  l 是否包含符號表。

    VxWorks內核映像是否包含內核符號表對於後續函數的調用非常重要,如在串口命令行下輸入一個函數名稱,如果內核映像不包含內核符號表,即使在內核中包含該函數定義,在終端也會給出“undefined symbol”錯誤。

    以下從三個不同角度介紹它們的不同點,首先以VxWorks_rom.bin文件類型介紹執行的基本流程(采用“文件名:函數名”方式)。

    1)romInit.s:romInit。

    此處romInit函數完成的工作同bootrom,實際上,二者使用相同的romInit函數實現。

    2)bootInit.c:romStart。

    首先將其自身複製到RAM_HIGH_ADRS變量指向的RAM 區,以便從RAM執行。注意與上文中bootrom 的區別,雖然使用的是相同的romStart 函數實現,但在RAM 地址上存在差別,關鍵點在於VxWorks內核映像被複製到RAM_LOW_ADRS指向的內存地址處。

    romStart函數完成如下任務:

  l 由於是非壓縮版本的VxWorks 內核映像,故所有的代碼一次性從ROM 複製到由RAM_LOW_ADRS變量指向的RAM 內存處。

  l 對於cold boot(冷啟動)方式,將其他BSS區清零。

  l 最後跳轉到usrInit(注意:是usrConfig.c文件中定義的)函數進行執行。

    3)此後的執行流程為:usrConfig.c:usrInit→usrConfig.c:usrRoot。usrConfig.c:usrRoot 函數執行完畢後,VxWorks操作係統即已完成啟動,係統進入正常運行狀態。

    其他ROM型VxWorks內核映像啟動流程差別如下:

    1)是否為ROM 駐留方式。

    對於ROM 駐留方式而言,在以上第一步中隻將數據部分從ROM 載入到由RAM_LOW_ADRS指向的內存區域,代碼仍然滯留在ROM中,此後一直從ROM 中讀取代碼執行,此種執行方式造成效率的部分損失,一般也較少使用。涉及的文件類型為:

    VxWorks.res_rom.bin和VxWorks.res_rom_nosym.bin

    2)是否進行了壓縮。

    對於壓縮的VxWorks內核映像,在以上第一步複製中,將分兩個階段完成:第一階段完成非壓縮代碼(romInit函數、romStart函數)的複製,這部分代碼被複製到RAM_HIGH_ADRS指向的RAM 內存處;第二階段完成壓縮代碼的解壓縮和複製過程,這部分代碼被解壓縮到RAM_LOW_ADRS指向的RAM 內存處。

    3)是否包含了符號表。

    所謂符號表,是內核中定義的所有函數與其(虛擬)地址的對應關係表。符號表與VxWorks內核映像一般是分離的,為了調試方便,一般需要獨立的載入符號表,當然也可以將符號表納入VxWorks 內核映像中作為一個整體。VxWorks.st_rom.bin文件類型即將符號表作為了內核映像的一部分。

    符號表最大的作用是在命令行直接輸入函數名即可運行該函數,內核查詢符號表獲得對應的地址並轉到該地址處執行。另外,在調試時,也可以對地址進行函數名標注,從而方便調試,符號表與VxWorks內核通常是獨立的,所以無論是否包含符號表,都不會對內核初始化流程造成影響。當VxWorks內核映像被載入RAM後,進入usrInit函數執行時,最終分布圖如圖3-5 所示。

    ROM型VxWorks內核映像類型啟動流程總結如下(由於其中隻涉及VxWorks內核,故采用“文件名:函數名”方式)。

    romInit.s:romInit→bootInit.c:romStart→完成VxWorks 內核從ROM到RAM 的複製(和解壓縮)→usrConfig.c:usrInit→usrConfig.c:usrRoot→VxWorks操作係統啟動完成。

最後更新:2017-04-03 12:55:38

  上一篇:go 微機課設——交通信號燈自動控製模擬指示係統
  下一篇:go NYOJ528-找球號(三)