版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
VxWorks的引導(dǎo)過程
此文為學(xué)習(xí)記錄,非正式文檔
相關(guān)術(shù)語說明如下:
Boot:引導(dǎo)或加載
BootROM:用來存放boot程序的ROM,boot程序首先對(duì)硬件作必要的基本的始化后
搬運(yùn)boot程序到RAM空間。然后啟動(dòng)加載程序通過網(wǎng)口、串口或者擴(kuò)展
FLASH加教VxWorks系統(tǒng)。BootROM程序可看作是一個(gè)獨(dú)立的系統(tǒng),具有
自加載功能和通過串口、網(wǎng)口或擴(kuò)展FLASH加載VxWorks系統(tǒng)的功能.
RAM_HIGH_ADRS:拷貝bootROM映像的目標(biāo)地址
RAM_LOW_ADRS:VxWorks映像的起始地址:
1.1啟動(dòng)過程
以下啟動(dòng)過程是通過串口或者網(wǎng)口加載VxWorks系統(tǒng)的過程,并不代表所有的加載過程.
1.上電復(fù)位后第一條被執(zhí)行的指令位置0xfff00100(針對(duì)MPC8240)
上電復(fù)位后CPU從0xfff00100取指令開始執(zhí)行.這個(gè)地址位于bootROM空間內(nèi)。
1)完成啟動(dòng)所必要的初始化
設(shè)置狀態(tài)字并創(chuàng)建一個(gè)啞堆棧(dummystack)
2)初始化存儲(chǔ)器接口
2.跳到C程序的入口地址
第一個(gè)被執(zhí)行的C程序是romStart()。
程序首先拷貝bootROM內(nèi)的部分boot程序到RAM空間。(我認(rèn)為這以后程序都在RAM中運(yùn)行).
然后根據(jù)啞堆棧中的參數(shù)決定是否清零內(nèi)存RAM(如是冷啟動(dòng)(coldstart)則清零),再把
ROM段的剩余部分拷貝到RAM的RAM_HIGH_ADRS地址(如果ROM代碼是壓縮的,還要解壓)。
3.處理器跳到RAM的入口地址RAM_HIGH_ADRS(bootConfigoc)。
在這里執(zhí)行的程序是usrInit();
使cache無效,清零bss段,初始化向量表,進(jìn)行板級(jí)初始化。
4.啟動(dòng)多任務(wù)內(nèi)核
VxWorks的bootROM本身就是一個(gè)獨(dú)立的應(yīng)用。到此步為止可看作是bootROM內(nèi)的這個(gè)獨(dú)立
系統(tǒng)已經(jīng)被加載且運(yùn)行起來了。
5.加載VxWorks系統(tǒng)
通過串口、網(wǎng)口或者從擴(kuò)展FLASH中加載系統(tǒng),VxWorks被加載到RAM的地端地址,起始地址為
RAM_LOW_ADRSo
6.應(yīng)用程序加載
各步所調(diào)用函數(shù)先后順序如下:
上電復(fù)位---》romlnit()----》romStart()---》usrInit()---》initVectBaseSet
()----》sysHwInit()----》usrKerneIInit()---》kernelInit()---》usrRoot()(啟動(dòng)
串口或者網(wǎng)口加載程序)---》〔完成對(duì)VxWorks系統(tǒng)的加載.)一》sysInit()----》usrInit()
----》initVectBaseSet()---》sysHwlnit()----》usrKerneIInit()—》kerneIInit()
----》usrRoot()(和前一個(gè)usrRoot。不一樣,這里啟動(dòng)用戶程序)
romlnit():
這是上電復(fù)位后首先執(zhí)行的程序
(a)設(shè)置啞堆棧,初始化CPU內(nèi)的寄存器,無效Cache,禁止中斷;
(b)保存啟動(dòng)類型,啟動(dòng)類型分為冷啟動(dòng)和熱啟動(dòng)
(c)硬件初始化,主要是初始化存儲(chǔ)器接口。
(d)調(diào)用romStart();
romStart():
這是第一個(gè)被執(zhí)行的C程序。
BootROM程序分為兩個(gè)部分,第一部分是上電復(fù)位后的首先執(zhí)行的程序,完成硬件的必要初始
化和搬運(yùn)程序到RAM,如果第二部分的程序被壓縮這部分程序還包括解壓程序;第二部分是Boot
ROM的其余部分程序,完成加載VxWorks系統(tǒng)的功能。這部分程序是可被壓縮的。如果第二部分程
序沒有被壓縮,則在搬運(yùn)時(shí)可把bootROM內(nèi)的程序一次搬運(yùn)到RAM中。下面的步驟是針對(duì)第二部
分程序被壓縮的情況。
完成功能如下:
(a)搬運(yùn)bootROM的第一部分程序到RAM。
(b)如果是冷啟動(dòng)則需要一些存儲(chǔ)區(qū)清0,這些存儲(chǔ)區(qū)是除了堆棧區(qū)(為啟動(dòng)所設(shè)的啞堆棧)
和(a)步所搬運(yùn)程序覆蓋的區(qū)域外的其他存儲(chǔ)區(qū)。
(c)解壓并搬運(yùn)bootROM的其余程序到RAM
(d)跳至被解壓的程序的入口點(diǎn)執(zhí)行,即執(zhí)行usrlnit();
usrInit():
這是運(yùn)行在VxWorks下的第一個(gè)C程序
完成功能如下:
(a)設(shè)置Cache模式,禁止Cache
(b)對(duì)bss段清0
(0保存啟動(dòng)類型
(d)調(diào)用函數(shù)intVecBaseSet()設(shè)置中斷式量表基本地址
(e)調(diào)用sysHwInit()初始化硬件到靜止?fàn)顟B(tài)(QuiescentState),這主要是讓可能產(chǎn)生中
斷的設(shè)備復(fù)位和禁止其產(chǎn)生中斷.
(f)調(diào)用usrKernelInit(),根據(jù)定義的的常數(shù)選擇適當(dāng)?shù)某跏蓟瘮?shù)完成初始化。
調(diào)用kernelInit(),初始化多任務(wù)環(huán)境,孵化任務(wù)usrRoot(),此函數(shù)不返回。
UsrRoot():
完成功能如下:(有些步驟根據(jù)需要選擇)
(a)初始化系統(tǒng)時(shí)鐘
(b)初始化I/O系統(tǒng)和驅(qū)動(dòng)
(c)Console設(shè)備的建立
(d)標(biāo)準(zhǔn)輸入輸出的配置
(e)例外處理的安裝
⑴管道驅(qū)動(dòng)的初始化
(g)標(biāo)準(zhǔn)I/O的初始化
(h)文件系統(tǒng)設(shè)備的建立和磁盤驅(qū)動(dòng)的安裝.
⑴性能監(jiān)控的設(shè)置
(j)目標(biāo)機(jī)管理的初始化
(k)用戶特定的代碼,例如網(wǎng)口加載程序
可以在usrRoot()添加網(wǎng)口或者串口加載程序來加載VxWorks系統(tǒng)。加載VxWorks系統(tǒng)后,程序
進(jìn)入syslnit()中執(zhí)行。
SysInit():
這是依賴特定系統(tǒng)的匯編代碼模塊,它是VxWorks的入口點(diǎn),執(zhí)行完后會(huì)跳至usrInit。(所
以u(píng)srlnit()是VxWorks下的第一個(gè)執(zhí)行的C代碼).
完成功能如下:
(a)鎖住中斷,無效Cache
(b)初始化處理器的寄存器(包括C堆棧指針)到默認(rèn)值
(c)清除所有懸置的中斷
(d)調(diào)用usrInit()
usrInit()調(diào)用kerneIInit()孵化任務(wù)usrRoot(),usrRoot()完成應(yīng)用程序執(zhí)行前所必要的
初始化.
以上步驟適用于通過串口或者網(wǎng)口加載VxWorks系統(tǒng)的過程。在開發(fā)階段通常采用這種方式。
實(shí)際的產(chǎn)品是可能是從FLASH加載VxWorks系統(tǒng)的。一個(gè)可能的過程如下:
上電復(fù)位----》romlnit()----》romStart()(此處把bootROM的內(nèi)容和FLASH內(nèi)的系統(tǒng)
程序都加載到RAM,VxWorks的加載在此步就完成了)一》sysInit()---》usrInit()----》
initVectBaseSet()---》sysHwInit()----》usrKerneIInit()----》kerne11nit()----》
usrRoot()(啟動(dòng)用戶應(yīng)用程序)
另外:
對(duì)于程序駐留在ROM中運(yùn)行的方式,在加載時(shí)只需要加載數(shù)據(jù)段。
2.1函數(shù)sysHwInit()
從上面的啟動(dòng)過程可以注意到硬件初始化的一個(gè)主要函數(shù)是sysHwlnit().
下面以BigHammer中扣板的BSP為例來分析一下該函數(shù)。
該函數(shù)完成如下功能:
(a)調(diào)用sysMemMapDetect。檢測(cè)存儲(chǔ)映射配置,然后對(duì)相關(guān)的全局變量賦相應(yīng)的值??梢圆?/p>
檢測(cè)而直接賦值。
(b)記錄物理存儲(chǔ)區(qū)的長(zhǎng)度,計(jì)算sysPhysMemDesc的人口數(shù)
(c)調(diào)用ppc8240pciInit()初始化8240PCI接口
(d)配置CPLD內(nèi)的寄存器(與扣板相關(guān),可參看扣板的硬件設(shè)計(jì)文檔)
(e)初始化寄存器EUMBBAR,此寄存器的值決定了EPIC,DMA等的相關(guān)寄存器的基本地址.
⑴確認(rèn)所用的CPU類型
(g)調(diào)用sysEpicInit0完成EPIC(嵌入式中段控制器)初始化
(h)調(diào)用GnetPciHwInit。初始化GaInet48303的PCI
(i)調(diào)用sysSeriaIHwInit()初始化串口
(j)調(diào)用sysNetHwInit()初始化網(wǎng)絡(luò)接口
下面的內(nèi)容引自一已有文檔
3.1件和程序說明
romlnitoS:romlnit()
關(guān)白斷,把啟動(dòng)類型(cold/warm)人棧,清零cache后跳到romStart的入口.
bootInit.C:romStart()
把ROM代碼和數(shù)據(jù)段拷貝并重定位到RAM,清零RAM的未用部分,需要的話要進(jìn)行解壓縮,然
后跳到syslnir。的入口地址。
拷貝的過程如下:
A,代碼段不是駐留在ROM中,要拷貝代碼段和數(shù)據(jù)段;
B,如代碼段是駐留在ROM中的,則只拷貝數(shù)據(jù)段;
C,未用的內(nèi)存清零;
D,需要時(shí),要進(jìn)行解壓縮。
sysALiboS:syslnit0
syslnit()是VxWorks映像的入口地址,起始地址由RAM—L0W-ADR定義。它首先關(guān)中斷,使cache
無效,初始化處理器的寄存器為缺省值,使tracing無效,清除中斷寄存器,初始化usrlnit。
的堆棧并激活usrInit().
注意,在syslnit。中必須重新初始化在romlnit()中所做的硬件初始化。
usrConfig.CandbootConfig.C:usrInit()
它是VxWorks運(yùn)行的第一個(gè)C代碼,在supervisormode中激活.它關(guān)中斷,存儲(chǔ)有關(guān)啟動(dòng)類型
(boottype)的信息,在VxWorks內(nèi)核運(yùn)行前進(jìn)行必要的初始化.
A,初始化cache的模式,設(shè)置為安全狀態(tài),在usrlnit()結(jié)束時(shí)使cache有效;
B,清零系統(tǒng)bss段;
C,初始化中斷向量表,調(diào)用VectBaseSet(),exeVectInit();
D,初始化系統(tǒng)硬件,但使之無效(QuiescentState),調(diào)用sysHwlnit(),這是一個(gè)與硬
件有關(guān)的過程,是我們要針對(duì)不同的目標(biāo)板進(jìn)行修改的重要部分,其中涉及到串口,網(wǎng)口的初始
化,CONSOLE的配置等;
E,調(diào)用usrKernelInit(),并使能cache;
F,調(diào)用kernelInit(),創(chuàng)建usrRoot()。
usrKerneIoC:kernelInitO
初始化內(nèi)核可選組件(kernelfaciIity)。
kerneILib.C:usrKerneIInit()
初始化多任務(wù)環(huán)境。
調(diào)用intLockLeveISet。,使時(shí)間片(round-robin)方式無效,在內(nèi)存的高端創(chuàng)建中斷堆棧,
ROOT堆棧和TCB,創(chuàng)建usrRoot(),中斷usrlnit。的運(yùn)行,然后打開中斷,注意要清除中斷寄存
器。
usrConfig.CandbootConfig.C:usrRoot()
初始化I/O系統(tǒng),驅(qū)動(dòng)器,設(shè)備(在configAI。h和config.h中指定).
3.2程序列表
對(duì)于硬件初始化的順序,大致可按下表中形式進(jìn)行:
函數(shù)函數(shù)功能所在文件
sys1nit()(a)鎖住中斷;(b)禁用緩沖;sysALibos
(c)用缺省值初始化系統(tǒng)中斷表(僅
i960);
(d)用缺省值初始化系統(tǒng)錯(cuò)誤表(僅
i960):
(e)初始化處理器寄存器到一缺省值;
(千)使回流失效;(g)清除所有懸置中斷;
(h)激活usrInit(),指明啟動(dòng)類型.
usr1nit()(a)對(duì)bss賦零;usrConfig.c
(b)保存bootType于sysStartType;
(c)調(diào)用excVecInit(),初始化所有系統(tǒng)
和缺省中斷向量;
(d)依次調(diào)用sysHwInit(),
usrKerne11nit(),kerne11nit()0
usrKernelInit()依次調(diào)用classLiblnit(),taskLiblnitusrKerne1.c
(),taskHookInit(),
semBLiblnit(),semMLib1nit(),semCL
ib1nit(),semOLiblnit(),wdLiblnit
(),msgQLiblnit(),qlnit(),
workQInit()
kerne11nit()初始化并啟動(dòng)內(nèi)核。kerne1Liboc
(a)激活intLockLeveISet();
(b)從內(nèi)存池頂部創(chuàng)建根堆棧和TCB;
(c)調(diào)用tasklnit(),taskActivate
(),用于usrRoot();
(d)調(diào)用usrRoot()。
usrRoot()初始化I/O系統(tǒng),驅(qū)動(dòng)器,設(shè)備(在usrConfigoc
configAII.h和config.h中指定)
(a)調(diào)用
sysCIkConnect(),sysCIkRateSet(),
iosInit(),[ttyDrv()];
(b)初始化exclnit(),
IogInit(),sigInit()o
(c)初始化管道,pipeDrvO;
(d)stdiolnit(),mathSoftInit()
或mathHardlnit()
(e)wdbConfig():配置并初始化目標(biāo)代
理機(jī)
在大多數(shù)目標(biāo)板的板級(jí)支持包中,VxWorks的入口點(diǎn)由兩個(gè)函數(shù):romlnit0^romStart()
來完成,而非syslnit。。具體基于ROM的VxWorks的初始化過程如下表所示:
函數(shù)函數(shù)功能所在文件
1.romlnit()(a)禁止中斷;romlnit。s
(b)保存啟動(dòng)類型;
(c)硬件初始化;
2.romStart()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年北京市朝陽區(qū)十八里店第二社區(qū)衛(wèi)生服務(wù)中心招聘?jìng)淇碱}庫及完整答案詳解一套
- 2025年中共南充市委對(duì)外聯(lián)絡(luò)辦公室下屬事業(yè)單位公開考調(diào)工作人員的備考題庫及1套參考答案詳解
- 大學(xué)教育學(xué)教學(xué)中教育技術(shù)發(fā)展趨勢(shì)與教學(xué)改革研究教學(xué)研究課題報(bào)告
- 簡(jiǎn)約商務(wù)風(fēng)企業(yè)年會(huì)
- 2025年國(guó)家空間科學(xué)中心質(zhì)量管理處招聘?jìng)淇碱}庫帶答案詳解
- 鄭州一中鄭東校區(qū)2025年教師招聘?jìng)淇碱}庫及參考答案詳解一套
- 2025年德化二中頂崗教師招聘?jìng)淇碱}庫含答案詳解
- 2025年寧波交投公路營(yíng)運(yùn)管理有限公司公開招聘勞務(wù)派遣人員備考題庫及一套參考答案詳解
- 成都中醫(yī)藥大學(xué)針灸推拿學(xué)院2025年12月招聘勞務(wù)派遣人員備考題庫參考答案詳解
- 2025年環(huán)磨科技控股(集團(tuán))社會(huì)招聘計(jì)劃11人備考題庫含答案詳解
- 牧場(chǎng)安全生產(chǎn)培訓(xùn)
- “寧波文化知多少”全市知識(shí)競(jìng)賽考試題庫(含答案)
- 南京鐵道職業(yè)技術(shù)學(xué)院?jiǎn)握小墩Z文》高頻難、易錯(cuò)點(diǎn)題附完整答案詳解(名校卷)
- 藥店藥品定價(jià)管理制度
- 銅及銅合金熔鑄安全設(shè)計(jì)與生產(chǎn)規(guī)范-編制說明
- 公安聯(lián)考試題真題及答案
- 光纖激光技術(shù)在天然氣管道泄漏檢測(cè)中的應(yīng)用
- (正式版)DB3301∕T 0495-2025 《大型活動(dòng)餐飲服務(wù)規(guī)范》
- 無人機(jī)物流配送服務(wù)操作手冊(cè)
- 2025年公共營(yíng)養(yǎng)師《三級(jí)》試題及答案
- 2024年云南省曲靖市數(shù)學(xué)七上期末學(xué)業(yè)水平測(cè)試模擬試題含解析
評(píng)論
0/150
提交評(píng)論