vxWorks/BootROM Imageq啟動順序詳解
vxWorks/BootROM Imageq啟動順序詳解
VxWorks image
分為在ROM中運行和在RAM中運行兩種,兩者啟動順序的區別在於sysInit()函數的調用,該函數在RAM運行的VxWorks中初始化RAM。
1.ROM中運行的VxWorks :
VxWorks在ROM中運行,即寫入ROM中的VxWorks是非壓縮的,不需要解壓,係統直接跳到ROM的首地址運行VxWorks。注意:ROM運行的VxWorks並不支持所有的主扳,應以主板手冊為準。
1.1執行順序
romInit.s中的romInit()-->
bootInit.c中的romStart()-->
usrConfig.c中的usrInit()-->sysHwInit()-->usrKernelInit()-->KernelInit(usrRoot,...)
1.2優點
VxWorks在ROM中運行主要是為了節省RAM空間,以便應用程序有更大的空間運行。隻把VxWorks image的data段複製到RAM的LOCAL_LOW_ADRS,text部分留在ROM並在ROM中執行。
1.3缺點
ROM中運行的VxWorks缺點是運行速度慢。
2. RAM中運行的VxWorks
VxWorks在RAM中運行,即寫入ROM中的Boot或VxWorks Image是壓縮的,需要先解壓copy所有的text和data到RAM的LOCAL_LOW_ADRS中。下麵sysInit()主要是初始化RAM用的,係統直接跳到RAM的首地址運行VxWorks。usrInit()前麵不壓縮,即romInit()、romStart()不能壓縮。
2.1程序執行順序
romInit.s中的romInit()-->
bootInit.c中的romStart()-->
sysaLib.s中的sysInit()-->
usrConfig.c中的usrInit()-->sysHwInit()-->usrKernelInit()-->KernelInit(usrRoot,...)
BootROM image
BootROM image 最少的係統初始化,主要用於啟動裝載VxWorks image。一般有壓縮和不壓縮兩種形式,如bootrom和boot_uncmp。與VxWorks image的區別在於一個Bootrom調用bootConfig.c,而VxWorks調用usrConfig.c。
1.1程序執行順序
romInit.s中的romInit()-->
bootInit.c中的romStart()-->
bootConfig.c中的usrInit()-->sysHwInit()-->usrKernelInit()-->KernelInit(usrRoot,...)
其中/target/config/all/bootConfig.c是Boot ROM設置模塊,用於通過網絡加載VxWorks image。
usrRoot()-->bootCmdLoop(void)命令行選擇,或autobooting-->bootLoad(pLine, &entry)加載模塊到內存(網絡,TFFS,TSFS...)-->netifAttach()-->go(entry)-->(entry)()從入口開始執行,不返回.
1.2各個函數的主要作用
romInit()---
power up,disable interrupt,put boot type on the stack,clears caches.
romStart()---
load Image Segments into RAM.
usrInit()---
Interrupt lock out,save imformation about boot type,handle all the Initialization before the kernel is actually started,then starts the kernel execution to create an initial task usrRoot(),This task completes the start up.
sysHwInit()---
Interrupt locked,Initializes hardware,registers,activation kernel
KernelInit(usrRoot,...)---
Initializes and starts the kernel.
Defines system memory partition.
Activates a task tUsrRoot to complete initalization.
Unlocks inierrupts.
Uses usrInit()stack.
usrRoot()---
初始化內存分區表(memory partition library)
初始化係統係統時鍾(system clock)
初始化輸入輸出係統(I/O system)----可選
Create devices----可選
設置網絡(Configure network)--------可選
激活WDB目標通信(Activate WDB agent)---------可選
調用程序(Activate application)
Boot或VxWorks image的text段或data段會從ROM複製到RAM,在RAM中運行。其中usrRoot()是VxWorks啟動的第一個任務,由它來初始化 driver、network等描述。romInit.s first execute in flash,minal initiliz,then jump to romStart。romStart() 開始裝載和解壓image到RAM,sysaLib.s是在RAM中執行的第一個函數。
VxWorks 在ROM中的情況
ROM 低地址位為沒有壓縮的romInit.s和romStart()在ROM的起始位置,係統power up後,從這個起始位開始執行,即執行romInit(),起始位置由硬件定義,一般為0x00000000。ROM 高地址位為壓縮的VxWorks Imgage
其中 RAM_LOW_ADRS, RAM_HIGH_ADRS 等一些地址在makefile 和BSP config.h中定義。
最後更新:2017-04-03 12:55:36