開發(fā)RTEMS實(shí)時系統(tǒng)的板級支持包
發(fā)布時間:2007/8/28 0:00:00 訪問次數(shù):2686
一個優(yōu)秀的RTOS(Real-Time Operating system)不但要擁有一個高可靠、多任務(wù)的實(shí)時內(nèi)核,還應(yīng)具有可剪裁和可移植的能力。RTEMS(the Real - Time Executivefor Multiprocessor Systems)[1]就是這樣的系統(tǒng),它提供的環(huán)境可以滿足高性能的嵌入式多任務(wù)實(shí)時應(yīng)用。目前,RTEMS支持的CPU系列有:A29k、ARM、H8300、1386、1960、M68k、MIPS、PPC和SPARC等。
板級支持包BSP(Board Support Package)是嵌入式實(shí)時系統(tǒng)的基礎(chǔ)部分,也是實(shí)現(xiàn)系統(tǒng)可移植性的關(guān)鍵。它負(fù)責(zé)上電時的硬件初始化、啟動嵌入式操作系統(tǒng)或應(yīng)用程序模塊、提供底層硬件驅(qū)動,為上層軟件提供訪問底層硬件的手段。BSP針對目標(biāo)板設(shè)計,其結(jié)構(gòu)和功能隨目標(biāo)板的不同而呈現(xiàn)較大的差異。在將嵌入式系統(tǒng)移植到一種新的CPU時,必須提供相應(yīng)的板級支持包。
本文參考SPARC微處理器ERC32的BSP,主要討論RTEMS的BSP開發(fā)過程。
1 RTEMS體系結(jié)構(gòu)
RTEMS采用微內(nèi)核基礎(chǔ)上的層次化結(jié)構(gòu),如圖l所示。這種結(jié)構(gòu)只把那些絕對必需的系統(tǒng)功能置于內(nèi)核之中(如中斷管理、上下文切換、內(nèi)存訪問管理、時間管理、線程及線程間的通信與同步管理等),而把那些并非必需的系統(tǒng)功能(如文件系統(tǒng)、網(wǎng)絡(luò)、遠(yuǎn)程過程調(diào)用等)置于微內(nèi)核之上在用戶模式下運(yùn)行。
RTEMS的板級支持包是啟動代碼、連接器腳本和編譯規(guī)范文件(specs)和設(shè)備驅(qū)動程序的集合[2],它們針對不同目標(biāo)機(jī)的硬件環(huán)境剪裁RTEMS。
2 RTEMS啟動過程
處理器加電或復(fù)位時,基于RTEMS的應(yīng)用程序初始化或者重新初始化[3]。BSP中的啟動代碼負(fù)責(zé)為RTEMS應(yīng)用程序建立運(yùn)行環(huán)境。
RTEMS啟動過程的順序如下:
① 執(zhí)行BSP中的啟動代碼;
② 調(diào)用rtems_initialize_executive;
③ 局部和全局應(yīng)用程序的初始化。
處理器復(fù)位時,首先執(zhí)行BSP的啟動代碼。BSP必須將所有的硬件初始化為一個靜止?fàn)顟B(tài),然后操作系統(tǒng)才能初始化。rtems_initialize_executive指令不返回啟動代碼,它將導(dǎo)致最高優(yōu)先級的初始化任務(wù)開始執(zhí)行。初始化任務(wù)用于完成局部或全局依賴于RTEMS的應(yīng)用程序初始化。
3 BSP開發(fā)過程
下面以SPARC微處理器ERC32為例,說明RTEMSBSP的開發(fā)步驟:
①建立開發(fā)環(huán)境。開發(fā)模式采用宿主機(jī)/目標(biāo)機(jī)模式。宿主機(jī)運(yùn)行環(huán)境采用Linux系統(tǒng),目標(biāo)機(jī)為ERC32。宿主機(jī)和目標(biāo)機(jī)通過串口連接。交叉開發(fā)工具采用添加了RTEMS補(bǔ)丁的GNU工具鏈(GCC,GDB,Newlib,binary utilities)。
② 選擇BSP模板。通常是根據(jù)操作系統(tǒng)提供的BSP模板,選擇與應(yīng)用硬件環(huán)境最為相似的參考設(shè)計,針對具體的目標(biāo)機(jī)對參考BSP進(jìn)行必要的修改和增刪,以形成自己的BSP。選擇一個適當(dāng)?shù)腂SP模板可以達(dá)到事半功倍的效果。
③建立新bsp目錄。將模板BSP整個目錄拷貝到適當(dāng)?shù)哪夸浵?如libbsp/),重命名為mybsp。
④ 建立bsp配置文件?截惾我庖粋BSP.cfg,重命名為mybsp.cfg,修改相關(guān)的體系結(jié)構(gòu)定義,如:RTEMS_CPU_MODEL,RTEMS_BSP,CPU_CFLAGS和制定make_exe規(guī)則。
⑤修改makefile文件。對mybsp-bsp中每一個Makefile.in文件,運(yùn)行acpolish,并檢查運(yùn)行的結(jié)果,例如:
cd /mybsp - bsp/some_subdir
/path_to_SACOS/t00ls/update/acpolish
再次運(yùn)行acpolish:
/path_to_SACOS/tools/update/acpolish
將Makefile.new和Makefile.in進(jìn)行比較。如果不相同,則重新編輯Makefile.new,多次運(yùn)行acpolish,直到連續(xù)兩次產(chǎn)生的Makefile.in相同。
⑥ 修改啟動代碼。建立自陷表、基本的CPU初始化、設(shè)置中斷堆棧等。
⑦ 配置RTEMS。設(shè)置RTEMS相關(guān)全局變量和常量、RTEMS配置表、CPU依賴信息表、系統(tǒng)初始化任務(wù)表,以及用戶初始化任務(wù)表等,除完成相關(guān)的系統(tǒng)功能之外,提供板上外設(shè)的設(shè)備驅(qū)動程序。
⑧調(diào)試和測試。建立RTEMS執(zhí)行映像,利用串口下載可執(zhí)行映像到目標(biāo)機(jī),測試BSP的正確性。
3.1 啟動代碼實(shí)現(xiàn)
BSP的啟動代碼主要包含在五個文件中。它們是Start.s、boardinit.S、bootcard.c、bspstart.C和main.C。
Start.s包含了用于硬件初始化的匯編語言代碼,它是RTEMS的引導(dǎo)ROM入口。入口點(diǎn)SYM(start)是目標(biāo)機(jī)上電后執(zhí)行的第一段程序。SYM(start)的工作是完成將控制轉(zhuǎn)移到C程序boot_card()所需要的最少的設(shè)置,如初始化堆棧和禁止外部中斷等。它的具體操作包括:
①定義自陷表。這個自陷表是SPARC V7體系共有的,可從參考BSP中復(fù)制。
②初始化處理器。
a)初始化自陷基地址寄存器TBR,即將自陷表地址寫入TBR;
b)初始化處理器狀態(tài)寄存器PSR,設(shè)置系統(tǒng)為最高優(yōu)先級運(yùn)行模式,禁止所有可屏蔽中斷;
c)設(shè)置窗口無效寄存器WIM;
d)初始化堆棧,設(shè)置堆棧指針。
③調(diào)用SYM(_bsp_board_init)(在boardinit.S中定義,這些代碼是目標(biāo)板專
一個優(yōu)秀的RTOS(Real-Time Operating system)不但要擁有一個高可靠、多任務(wù)的實(shí)時內(nèi)核,還應(yīng)具有可剪裁和可移植的能力。RTEMS(the Real - Time Executivefor Multiprocessor Systems)[1]就是這樣的系統(tǒng),它提供的環(huán)境可以滿足高性能的嵌入式多任務(wù)實(shí)時應(yīng)用。目前,RTEMS支持的CPU系列有:A29k、ARM、H8300、1386、1960、M68k、MIPS、PPC和SPARC等。
板級支持包BSP(Board Support Package)是嵌入式實(shí)時系統(tǒng)的基礎(chǔ)部分,也是實(shí)現(xiàn)系統(tǒng)可移植性的關(guān)鍵。它負(fù)責(zé)上電時的硬件初始化、啟動嵌入式操作系統(tǒng)或應(yīng)用程序模塊、提供底層硬件驅(qū)動,為上層軟件提供訪問底層硬件的手段。BSP針對目標(biāo)板設(shè)計,其結(jié)構(gòu)和功能隨目標(biāo)板的不同而呈現(xiàn)較大的差異。在將嵌入式系統(tǒng)移植到一種新的CPU時,必須提供相應(yīng)的板級支持包。
本文參考SPARC微處理器ERC32的BSP,主要討論RTEMS的BSP開發(fā)過程。
1 RTEMS體系結(jié)構(gòu)
RTEMS采用微內(nèi)核基礎(chǔ)上的層次化結(jié)構(gòu),如圖l所示。這種結(jié)構(gòu)只把那些絕對必需的系統(tǒng)功能置于內(nèi)核之中(如中斷管理、上下文切換、內(nèi)存訪問管理、時間管理、線程及線程間的通信與同步管理等),而把那些并非必需的系統(tǒng)功能(如文件系統(tǒng)、網(wǎng)絡(luò)、遠(yuǎn)程過程調(diào)用等)置于微內(nèi)核之上在用戶模式下運(yùn)行。
RTEMS的板級支持包是啟動代碼、連接器腳本和編譯規(guī)范文件(specs)和設(shè)備驅(qū)動程序的集合[2],它們針對不同目標(biāo)機(jī)的硬件環(huán)境剪裁RTEMS。
2 RTEMS啟動過程
處理器加電或復(fù)位時,基于RTEMS的應(yīng)用程序初始化或者重新初始化[3]。BSP中的啟動代碼負(fù)責(zé)為RTEMS應(yīng)用程序建立運(yùn)行環(huán)境。
RTEMS啟動過程的順序如下:
① 執(zhí)行BSP中的啟動代碼;
② 調(diào)用rtems_initialize_executive;
③ 局部和全局應(yīng)用程序的初始化。
處理器復(fù)位時,首先執(zhí)行BSP的啟動代碼。BSP必須將所有的硬件初始化為一個靜止?fàn)顟B(tài),然后操作系統(tǒng)才能初始化。rtems_initialize_executive指令不返回啟動代碼,它將導(dǎo)致最高優(yōu)先級的初始化任務(wù)開始執(zhí)行。初始化任務(wù)用于完成局部或全局依賴于RTEMS的應(yīng)用程序初始化。
3 BSP開發(fā)過程
下面以SPARC微處理器ERC32為例,說明RTEMSBSP的開發(fā)步驟:
①建立開發(fā)環(huán)境。開發(fā)模式采用宿主機(jī)/目標(biāo)機(jī)模式。宿主機(jī)運(yùn)行環(huán)境采用Linux系統(tǒng),目標(biāo)機(jī)為ERC32。宿主機(jī)和目標(biāo)機(jī)通過串口連接。交叉開發(fā)工具采用添加了RTEMS補(bǔ)丁的GNU工具鏈(GCC,GDB,Newlib,binary utilities)。
② 選擇BSP模板。通常是根據(jù)操作系統(tǒng)提供的BSP模板,選擇與應(yīng)用硬件環(huán)境最為相似的參考設(shè)計,針對具體的目標(biāo)機(jī)對參考BSP進(jìn)行必要的修改和增刪,以形成自己的BSP。選擇一個適當(dāng)?shù)腂SP模板可以達(dá)到事半功倍的效果。
③建立新bsp目錄。將模板BSP整個目錄拷貝到適當(dāng)?shù)哪夸浵?如libbsp/),重命名為mybsp。
④ 建立bsp配置文件?截惾我庖粋BSP.cfg,重命名為mybsp.cfg,修改相關(guān)的體系結(jié)構(gòu)定義,如:RTEMS_CPU_MODEL,RTEMS_BSP,CPU_CFLAGS和制定make_exe規(guī)則。
⑤修改makefile文件。對mybsp-bsp中每一個Makefile.in文件,運(yùn)行acpolish,并檢查運(yùn)行的結(jié)果,例如:
cd /mybsp - bsp/some_subdir
/path_to_SACOS/t00ls/update/acpolish
再次運(yùn)行acpolish:
/path_to_SACOS/tools/update/acpolish
將Makefile.new和Makefile.in進(jìn)行比較。如果不相同,則重新編輯Makefile.new,多次運(yùn)行acpolish,直到連續(xù)兩次產(chǎn)生的Makefile.in相同。
⑥ 修改啟動代碼。建立自陷表、基本的CPU初始化、設(shè)置中斷堆棧等。
⑦ 配置RTEMS。設(shè)置RTEMS相關(guān)全局變量和常量、RTEMS配置表、CPU依賴信息表、系統(tǒng)初始化任務(wù)表,以及用戶初始化任務(wù)表等,除完成相關(guān)的系統(tǒng)功能之外,提供板上外設(shè)的設(shè)備驅(qū)動程序。
⑧調(diào)試和測試。建立RTEMS執(zhí)行映像,利用串口下載可執(zhí)行映像到目標(biāo)機(jī),測試BSP的正確性。
3.1 啟動代碼實(shí)現(xiàn)
BSP的啟動代碼主要包含在五個文件中。它們是Start.s、boardinit.S、bootcard.c、bspstart.C和main.C。
Start.s包含了用于硬件初始化的匯編語言代碼,它是RTEMS的引導(dǎo)ROM入口。入口點(diǎn)SYM(start)是目標(biāo)機(jī)上電后執(zhí)行的第一段程序。SYM(start)的工作是完成將控制轉(zhuǎn)移到C程序boot_card()所需要的最少的設(shè)置,如初始化堆棧和禁止外部中斷等。它的具體操作包括:
①定義自陷表。這個自陷表是SPARC V7體系共有的,可從參考BSP中復(fù)制。
②初始化處理器。
a)初始化自陷基地址寄存器TBR,即將自陷表地址寫入TBR;
b)初始化處理器狀態(tài)寄存器PSR,設(shè)置系統(tǒng)為最高優(yōu)先級運(yùn)行模式,禁止所有可屏蔽中斷;
c)設(shè)置窗口無效寄存器WIM;
d)初始化堆棧,設(shè)置堆棧指針。
③調(diào)用SYM(_bsp_board_init)(在boardinit.S中定義,這些代碼是目標(biāo)板專
熱門點(diǎn)擊
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究
- 嵌入式操作系統(tǒng)FreeRTOS的原理與實(shí)現(xiàn)
- μC/OS—II的嵌入式串口通信模塊設(shè)計
- UC系列通用嵌入式軟硬件平臺
- 關(guān)于uC/OS-II中優(yōu)先級翻轉(zhuǎn)問題
- Cache在嵌入式處理器中的使用問題
推薦技術(shù)資料
- 羅盤誤差及補(bǔ)償
- 造成羅盤誤差的主要因素有傳感器誤差、其他磁材料干擾等。... [詳細(xì)]
- AMOLED顯示驅(qū)動芯片關(guān)鍵技
- CMOS圖像傳感器技術(shù)參數(shù)設(shè)計
- GB300 超級芯片應(yīng)用需求分
- 4NP 工藝NVIDIA Bl
- GB300 芯片、NVL72
- 首個最新高端芯片人工智能服務(wù)器
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究