VxWorks啟動過程詳解(下)

來源:互聯網
上載者:User

上一節主要是從映像的分類和各種映像的大致載入流程上看VxWorks的啟動過程,這一節讓我們從函數級看一下VxWorks的啟動過程:

1. Boot Image + Loadable Images:

 

下面是具體的流程圖: 

其中第一階段的執行流程使用的是的左邊的源檔案中的那些函數(romInit->romStart->usrInit->sysHwinit->usrKernelinit->usrRoot);第二階段執行流程使用的是中右邊源檔案中的那些函數(sysInit-> usrInit->sysHwinit->usrKernelinit->usrRoot->usrAppInit)。下面具體解釋:

第一階段:

  •        romInit.s:romInit()

•         系統上電之後,首先調用的函數就是romInit()

•         禁止中斷

•         把啟動類型(冷啟動/暖開機)放在堆棧上

•         清除cache

•         初始化CPU基本寄存器,調用SDRAM初始化函數初始化UPM

•         直接跳轉到bootInit.c:romStart()

  •        bootInit.c:romStart()

 

•         把程式碼片段和資料區段從bootrom複製到RAM當中

•         完成程式映象的解壓縮(如果映象是壓縮版本的)

•         跳轉到bootConfig.c:usrInit()

•         bootConfig.c:usrInit()

•         VxWorks 中第一個C語言完成的代碼。執行作業系統核心所必須的初始化程式。

•         Cache程式庫的初始化

•         清零系統的BSS段

•         初始化中斷向量表

•         使硬體工作在一個“安靜”的狀態,盡量不產生各種中斷或者異常

•         控制權移交給KernelInit(),產生usrRoot根任務

•         在usrRoot根任務中解析Bootline,產生bootCmdLoop任務,用於啟動、載入VxWorks映像

 

此時,調試超級終端會有如下列印資訊:

VxWorks System Boot

Copyright 1984-1998  Wind River Systems, Inc.

CPU: MPC860

Version: 5.4

BSP version: 1.2/0

Creation date: Aug 2 2002, 09:19:47

Press any key to stop auto-boot...

 3

 

此時按任意鍵可停止自動啟動,修改啟動行參數

[VxWorks Boot]: p

boot device          : cpm

unit number          : 0

processor number     : 0

host name            : Michel

file name            : c:/ftpRoot/vxWorks

inet on ethernet (e) : 168.2.7.27:ffffff00

host inet (h)        : 168.2.7.10

user (u)             : target

Passwd(pw)           : target

flags (f)            : 0x0

―――――――――――――――――――――――――――

[VxWorks Boot]: @

boot device          : cpm

unit number          : 0

processor number     : 0

host name            : Michel

file name            : c:/ftpRoot/vxWorks

inet on ethernet (e) : 168.2.7.27:ffffff00

host inet (h)        : 168.2.7.10

user (u)             : target

Passwd(pw)           : target

flags (f)            : 0x0

 

Attached TCP/IP interface to cpm0.

Attaching network interface lo0... done.

第二階段:

  •        bootConfig.c: bootLoad( )

載入VxWorks映像,並轉向它的載入地址,從sysInit入口開始執行VxWorks映像

  •         sysALib.s : sysInit( )

與romInit.s : romInit()的初始化過程類似,但不再初始化SDRAM

  •         usrConfig.c : usrInit( )

設定cache的工作模式,板級硬體初始化,初始化Wind核心,啟動usrRoot( )根任務

  •         usrConfig.c : usrRoot( )

初始化記憶體,系統時鐘,I/O系統,標準輸入輸出錯,異常處理,添加使用者應用程式

此時調試超級終端列印如下資訊,Boot引導完成

/*VXWORKS Image Getting Loaded*/

Loading... 881680

Starting at 0x10000…

 

Attached TCP/IP interface to cpm unit 0

Attaching network interface lo0... done.

 

VxWorks

Copyright 1984-1998 Wind River Systems, Inc.

         CPU : MPC860

     vxWorks : 5.4

  BSP version: 1.2/0

Creation date: Aug 2 2000

         WDB : Ready

 2. ROM-based Images(壓縮/沒有壓縮):

和上面那種啟動方式相比,這種啟動方式省去了一些步驟,執行完romStart()之後就已經載入VxWorks 到RAM中了,因此,下一步就是把控制權交給VxWorks,有VxWorks從sysInit()開始執行即可。下面是具體的流程:

  •        romInit.s:romInit()

•         系統上電之後,首先調用的函數就是romInit()

•         禁止中斷

•         把啟動類型(冷啟動/暖開機)放在堆棧上

•         清除cache

•         初始化CPU基本寄存器,調用SDRAM初始化函數初始化UPM

•         直接跳轉到bootInit.c:romStart()

  •        bootInit.c:romStart()

•         把程式碼片段(如果是VxWorks_romResident映像,則不拷貝程式碼片段)和資料區段從bootrom複製到RAM當中

•         完成程式映象的解壓縮(如果映象是壓縮版本的)

•         跳轉到sysALib.s:sysInit()

  •         sysALib.s:sysInit()

•         重新進行CPU核心(主要是cache)的初始化。這些工作在romInit()裡面曾經進行過,由於系統剛剛進入RAM中執行,需要再次初始化。

•         無論使用何種系統(包括模擬器)引導,RAM版本的VxWorks都是從這裡開始執行的。

•         控制權移交給 usrInit()

  •        usrConfig.c:usrInit()

•         VxWorks 中第一個C語言完成的代碼。執行作業系統核心所必須的初始化程式。

•         Cache程式庫的初始化

•         清零系統的BSS段

•         初始化中斷向量表

•         使硬體工作在一個“安靜”的狀態,盡量不產生各種中斷或者異常

•         控制權移交給KernelInit(),產生usrRoot根任務

 

此時,調試超級終端會有如下列印資訊:

/*VXWORKS Image Getting Loaded*/

Loading... 881680

Starting at 0x10000…

 

Attached TCP/IP interface to cpm unit 0

Attaching network interface lo0... done.

 

VxWorks

Copyright 1984-1998 Wind River Systems, Inc.

         CPU : MPC860

     vxWorks : 5.4

  BSP version: 1.2/0

Creation date: Aug 2 2000

         WDB : Ready

3. ROM-Resident Images:

這種啟動方式的流程和上面那種基本相同,只是不需要載入text段到RAM中而已,故在此不作介紹了。

 VxWorks借鑒了傳統PC作業系統的引導原理,其將整個引導過程分為兩個階段:1. BOOTROM啟動,2. 通過BOOTROM載入VxWorks核心。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.