VxWorks啟動解析

2021-05-17 22:38:41 字數 2827 閱讀 8452

一,啟動順序的一些概念

上電啟動vxworks image發生事件的順序

處理器跳到rom或flash中的boot-strap程式的起點,主要作用

關閉中斷(來自cpu內部)

初始化目標記憶體

裝載要執行的vxworks iamge segment

jumps to code to place target in quiet state

啟動順序----loadable vxworks image

bootstrap n.【自】自展(指把已能執行的語言編譯程式作為工具來寫所要實現的編譯程式); 引導

從rom或flash 啟動**,自展**執行,同時載入**段的資料段,到ram

具體如下:

boot code compressed-decompression during copy

boot code uncompressed-copy

boot code is rom-resident-copy data segment only

執行這段啟動**,載入vxworks映象檔案到ram,跳轉到vxworks的入口點

system initialization code statically linked into loaded vxworks

iamge executes and completes initialization

啟動順序---vxworks的初始化

以下過程

準備硬體環境

初始化wind kernel並開始之

spawn a tast to complete system initialization

系統初始化的工作主要完成對支援終端使用者的特性的支援同時執行最終

使用者的應用程式

第一階段:

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

附: rom-based images(壓縮/沒有壓縮):

和上面那種啟動方式相比,這種啟動方式省去了一些步驟,執行完

romstart()之後就已經載入vxworks到ram中了,因此,下一步就是把控制權交給vxworks,由vxworks從sysinit()開始執行即可。

我理解為,和上面的第一階段相比少了romstart後面的一些步驟。

下面是具體的流程:

rominit.s:rominit()

系統上電之後,首先呼叫的函式就是rominit()

禁止中斷

把啟動型別(冷啟動/熱啟動)放在堆疊上

清除cache

初始化cpu基本暫存器,呼叫sdram初始化函式初始化upm

直接跳轉到bootinit.c:romstart()

bootinit.c:romstart()

把**段(如果是vxworks_rom resident映像,則不拷貝**段)

和資料段從bootrom複製到ram當中

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

跳轉到sysalib.s:sysinit()

sysalib.s:sysinit()

重新進行cpu核心(主要是cache)的初始化。這些工作在

rominit()裡面曾經進行過,由於系統剛剛進入ram中執行,

需要再次初始化。

無論使用何種系統(包括**器)引導,ram版本的

vxworks都是從這裡開始執行的。

控制權移交給 usrinit()

usrconfig.c:usrinit()

vxworks 中第乙個c語言完成的**。執行作業系統核心所必須的

初始化程式。

cache程式庫的初始化

清零系統的bss段

初始化中斷向量表

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

控制權移交給kernelinit(),產生usrroot根任務

此時,除錯超級終端會有列印資訊

rom 高位址位

壓縮的vxworks imgage

rom 低位址位

沒有壓縮的rominit.s和romstart()在rom的起始位置,系統

power up後,從這個起始位開始執行,即執行rominit(),起

始位置由硬體定義,一般為0x00000000

其中 ram_low_adrs, ram_high_adrs 等一些位址在makefile 和bsp config.h中定義

VxWorks 基本啟動方式

rom型啟動方式 vxworks直接從rom中執行,不借助於bootrom引導程式。此時vxworks核心映像被燒入rom 中,無bootrom程式。對於不同的啟動方式,vxworks作業系統核心映像的組成也略有不同。bootrom引導程式一般稱為vxworks boot image。該程式由如下檔...

uboot 啟動 VxWorks除錯記錄

硬體環境p2020,作業系統vxworks6.9 板卡狀態 可以啟動uboot,啟動不了bootrom。前期板卡啟動bootrom無果,可能是遇到了版型適配的問題。解決無果,只能另尋他路。從uboot去引導vxworks。網上看了一堆相關uboot啟動vxworks的方法。主要思路為 1 燒寫ubo...

VxWorks平台使用mini XML解析庫

雖然這個mini xml庫不是很難,但是還是折騰了幾天,其中fopen 函式開啟檔案的路徑是個問題,關於這個講解很少被提到 也許大神們不屑於討論路徑問題了,或者我太弱 這個部落格已經有乙個例子了,但是執行有問題再次基礎上進行修改,怕以後我自己也忘了 include include include i...