1. 程式人生 > >VxWorks 6.8啟動過程詳解

VxWorks 6.8啟動過程詳解

第一步: romInit( )
romInit 函式作為系統冷啟動的第一個函式,會初始化CPU和一段記憶體,當romInit函式正常初始化成功後,從LOCAL_MEM_LOCAL_ADRS 到 LOCAL_MEM_LOCAL_ADRS + LOCAL_MEM_SIZE的記憶體可以正常進行讀寫訪問。

第二步: romStart( )
將程式碼從ROM移植到RAM中,然後,跳到VxWorks 映象中。romStart函式將跳轉到ursInit 函式中。
1. 將資料段和text段的內容拷貝到ROM中。
2. 清除未使用的RAM。
3. romStart函式跳轉到RAM的入口函式usrInit。

第三步: usrInit( )
usrInit 函式初始化CPU,關閉其他硬體,為核心初始化做準備。當前有很多功能不能使用,包括(printf 函式)。沒有任務上下文,任務控制塊(TCB),程序棧,usrInit 函式僅僅只做必要的初始化,ursRoot函式完成整個裝置。
1. 初始cache暫存器,在usrInit函式結束時,指令cache和資料cache將被使能。
2. 清空BSS段。在C語言中,所有的未初始化的變數將存在BSS段。程式碼執行時將未初始化的變數設定為0。
3. 初始中斷向量。在使能中斷和啟動核心前,必須初始化中斷。
1) intVecBaseSet函式建立向量基址地址。
2) excVecInit 函式初始化所有的異常中斷處理函式。
4. 初始化系統硬體控制器
1) sysHwInit 函式初始化系統硬體暫存器,主要是重新啟動和禁止硬體暫存器。
2) 在VxWorks核心中系統的中斷向量直到呼叫ursRoot 函式才被連線。

第四步:執行kernellnit 函式
1. kernelInit函式的作用是啟動核心,進行更深入層次的裝置初始化。並作為一個任務進行執行。tRootTask ---- usrRoot函式。
1) 建立中斷棧,在記憶體池的首部,建立根棧,建立任務控制塊(TCB)。啟動usrRoot程序,並終止ursInit程序。
2) 同時使能ursInit函式中的所有中斷。

第五步:執行usrRoot 程序。
1. usrRoot 函式的目的是初始化系統核心和所有硬體暫存器。
1) 呼叫memInit 函式,所以在usrRoot 函式中可以執行memShowInit 函式和usrMmuInit 函式。
2) 並且當前系統的是多工的。呼叫sysClkConnect 函式,同時呼叫sysHwInit2 函式。
注:VxWorks 系統時鐘中斷使用者層註冊函式為sysClkInt 。系統時鐘中斷的註冊在sysClkConnect 函式中完成。sysClkConnect被usrRoot呼叫專門負責系統時鐘的初始化。

usrInit函式
步驟一: 執行sysStart函式;//清除BSS段,設定向量表的基地址,即:LOCAL_MEM_LOCAL_ADRS。
步驟二: 執行cacheLibInit 函式;//初始化Cache庫,並在sysHwInit函式中完成。
步驟三: 執行excVecInit函式;//初始化異常中斷向量。
步驟三: 執行sysHwInit 函式;// 初始化系統硬體
步驟四: 執行usrCacheEnable 函式;//使能cache
… …
執行usrKernelInit 函式;//最終呼叫usrRoot 程序