開發RTEMS實時系統的板級支持包
發布時間:2007/8/28 0:00:00 訪問次數:2674
一個優秀的RTOS(Real-Time Operating system)不但要擁有一個高可靠、多任務的實時內核,還應具有可剪裁和可移植的能力。RTEMS(the Real - Time Executivefor Multiprocessor Systems)[1]就是這樣的系統,它提供的環境可以滿足高性能的嵌入式多任務實時應用。目前,RTEMS支持的CPU系列有:A29k、ARM、H8300、1386、1960、M68k、MIPS、PPC和SPARC等。
板級支持包BSP(Board Support Package)是嵌入式實時系統的基礎部分,也是實現系統可移植性的關鍵。它負責上電時的硬件初始化、啟動嵌入式操作系統或應用程序模塊、提供底層硬件驅動,為上層軟件提供訪問底層硬件的手段。BSP針對目標板設計,其結構和功能隨目標板的不同而呈現較大的差異。在將嵌入式系統移植到一種新的CPU時,必須提供相應的板級支持包。
本文參考SPARC微處理器ERC32的BSP,主要討論RTEMS的BSP開發過程。
1 RTEMS體系結構
RTEMS采用微內核基礎上的層次化結構,如圖l所示。這種結構只把那些絕對必需的系統功能置于內核之中(如中斷管理、上下文切換、內存訪問管理、時間管理、線程及線程間的通信與同步管理等),而把那些并非必需的系統功能(如文件系統、網絡、遠程過程調用等)置于微內核之上在用戶模式下運行。
RTEMS的板級支持包是啟動代碼、連接器腳本和編譯規范文件(specs)和設備驅動程序的集合[2],它們針對不同目標機的硬件環境剪裁RTEMS。
2 RTEMS啟動過程
處理器加電或復位時,基于RTEMS的應用程序初始化或者重新初始化[3]。BSP中的啟動代碼負責為RTEMS應用程序建立運行環境。
RTEMS啟動過程的順序如下:
① 執行BSP中的啟動代碼;
② 調用rtems_initialize_executive;
③ 局部和全局應用程序的初始化。
處理器復位時,首先執行BSP的啟動代碼。BSP必須將所有的硬件初始化為一個靜止狀態,然后操作系統才能初始化。rtems_initialize_executive指令不返回啟動代碼,它將導致最高優先級的初始化任務開始執行。初始化任務用于完成局部或全局依賴于RTEMS的應用程序初始化。
3 BSP開發過程
下面以SPARC微處理器ERC32為例,說明RTEMSBSP的開發步驟:
①建立開發環境。開發模式采用宿主機/目標機模式。宿主機運行環境采用Linux系統,目標機為ERC32。宿主機和目標機通過串口連接。交叉開發工具采用添加了RTEMS補丁的GNU工具鏈(GCC,GDB,Newlib,binary utilities)。
② 選擇BSP模板。通常是根據操作系統提供的BSP模板,選擇與應用硬件環境最為相似的參考設計,針對具體的目標機對參考BSP進行必要的修改和增刪,以形成自己的BSP。選擇一個適當的BSP模板可以達到事半功倍的效果。
③建立新bsp目錄。將模板BSP整個目錄拷貝到適當的目錄下(如libbsp/),重命名為mybsp。
④ 建立bsp配置文件。拷貝任意一個BSP.cfg,重命名為mybsp.cfg,修改相關的體系結構定義,如:RTEMS_CPU_MODEL,RTEMS_BSP,CPU_CFLAGS和制定make_exe規則。
⑤修改makefile文件。對mybsp-bsp中每一個Makefile.in文件,運行acpolish,并檢查運行的結果,例如:
cd /mybsp - bsp/some_subdir
/path_to_SACOS/t00ls/update/acpolish
再次運行acpolish:
/path_to_SACOS/tools/update/acpolish
將Makefile.new和Makefile.in進行比較。如果不相同,則重新編輯Makefile.new,多次運行acpolish,直到連續兩次產生的Makefile.in相同。
⑥ 修改啟動代碼。建立自陷表、基本的CPU初始化、設置中斷堆棧等。
⑦ 配置RTEMS。設置RTEMS相關全局變量和常量、RTEMS配置表、CPU依賴信息表、系統初始化任務表,以及用戶初始化任務表等,除完成相關的系統功能之外,提供板上外設的設備驅動程序。
⑧調試和測試。建立RTEMS執行映像,利用串口下載可執行映像到目標機,測試BSP的正確性。
3.1 啟動代碼實現
BSP的啟動代碼主要包含在五個文件中。它們是Start.s、boardinit.S、bootcard.c、bspstart.C和main.C。
Start.s包含了用于硬件初始化的匯編語言代碼,它是RTEMS的引導ROM入口。入口點SYM(start)是目標機上電后執行的第一段程序。SYM(start)的工作是完成將控制轉移到C程序boot_card()所需要的最少的設置,如初始化堆棧和禁止外部中斷等。它的具體操作包括:
①定義自陷表。這個自陷表是SPARC V7體系共有的,可從參考BSP中復制。
②初始化處理器。
a)初始化自陷基地址寄存器TBR,即將自陷表地址寫入TBR;
b)初始化處理器狀態寄存器PSR,設置系統為最高優先級運行模式,禁止所有可屏蔽中斷;
c)設置窗口無效寄存器WIM;
d)初始化堆棧,設置堆棧指針。
③調用SYM(_bsp_board_init)(在boardinit.S中定義,這些代碼是目標板專
一個優秀的RTOS(Real-Time Operating system)不但要擁有一個高可靠、多任務的實時內核,還應具有可剪裁和可移植的能力。RTEMS(the Real - Time Executivefor Multiprocessor Systems)[1]就是這樣的系統,它提供的環境可以滿足高性能的嵌入式多任務實時應用。目前,RTEMS支持的CPU系列有:A29k、ARM、H8300、1386、1960、M68k、MIPS、PPC和SPARC等。
板級支持包BSP(Board Support Package)是嵌入式實時系統的基礎部分,也是實現系統可移植性的關鍵。它負責上電時的硬件初始化、啟動嵌入式操作系統或應用程序模塊、提供底層硬件驅動,為上層軟件提供訪問底層硬件的手段。BSP針對目標板設計,其結構和功能隨目標板的不同而呈現較大的差異。在將嵌入式系統移植到一種新的CPU時,必須提供相應的板級支持包。
本文參考SPARC微處理器ERC32的BSP,主要討論RTEMS的BSP開發過程。
1 RTEMS體系結構
RTEMS采用微內核基礎上的層次化結構,如圖l所示。這種結構只把那些絕對必需的系統功能置于內核之中(如中斷管理、上下文切換、內存訪問管理、時間管理、線程及線程間的通信與同步管理等),而把那些并非必需的系統功能(如文件系統、網絡、遠程過程調用等)置于微內核之上在用戶模式下運行。
RTEMS的板級支持包是啟動代碼、連接器腳本和編譯規范文件(specs)和設備驅動程序的集合[2],它們針對不同目標機的硬件環境剪裁RTEMS。
2 RTEMS啟動過程
處理器加電或復位時,基于RTEMS的應用程序初始化或者重新初始化[3]。BSP中的啟動代碼負責為RTEMS應用程序建立運行環境。
RTEMS啟動過程的順序如下:
① 執行BSP中的啟動代碼;
② 調用rtems_initialize_executive;
③ 局部和全局應用程序的初始化。
處理器復位時,首先執行BSP的啟動代碼。BSP必須將所有的硬件初始化為一個靜止狀態,然后操作系統才能初始化。rtems_initialize_executive指令不返回啟動代碼,它將導致最高優先級的初始化任務開始執行。初始化任務用于完成局部或全局依賴于RTEMS的應用程序初始化。
3 BSP開發過程
下面以SPARC微處理器ERC32為例,說明RTEMSBSP的開發步驟:
①建立開發環境。開發模式采用宿主機/目標機模式。宿主機運行環境采用Linux系統,目標機為ERC32。宿主機和目標機通過串口連接。交叉開發工具采用添加了RTEMS補丁的GNU工具鏈(GCC,GDB,Newlib,binary utilities)。
② 選擇BSP模板。通常是根據操作系統提供的BSP模板,選擇與應用硬件環境最為相似的參考設計,針對具體的目標機對參考BSP進行必要的修改和增刪,以形成自己的BSP。選擇一個適當的BSP模板可以達到事半功倍的效果。
③建立新bsp目錄。將模板BSP整個目錄拷貝到適當的目錄下(如libbsp/),重命名為mybsp。
④ 建立bsp配置文件。拷貝任意一個BSP.cfg,重命名為mybsp.cfg,修改相關的體系結構定義,如:RTEMS_CPU_MODEL,RTEMS_BSP,CPU_CFLAGS和制定make_exe規則。
⑤修改makefile文件。對mybsp-bsp中每一個Makefile.in文件,運行acpolish,并檢查運行的結果,例如:
cd /mybsp - bsp/some_subdir
/path_to_SACOS/t00ls/update/acpolish
再次運行acpolish:
/path_to_SACOS/tools/update/acpolish
將Makefile.new和Makefile.in進行比較。如果不相同,則重新編輯Makefile.new,多次運行acpolish,直到連續兩次產生的Makefile.in相同。
⑥ 修改啟動代碼。建立自陷表、基本的CPU初始化、設置中斷堆棧等。
⑦ 配置RTEMS。設置RTEMS相關全局變量和常量、RTEMS配置表、CPU依賴信息表、系統初始化任務表,以及用戶初始化任務表等,除完成相關的系統功能之外,提供板上外設的設備驅動程序。
⑧調試和測試。建立RTEMS執行映像,利用串口下載可執行映像到目標機,測試BSP的正確性。
3.1 啟動代碼實現
BSP的啟動代碼主要包含在五個文件中。它們是Start.s、boardinit.S、bootcard.c、bspstart.C和main.C。
Start.s包含了用于硬件初始化的匯編語言代碼,它是RTEMS的引導ROM入口。入口點SYM(start)是目標機上電后執行的第一段程序。SYM(start)的工作是完成將控制轉移到C程序boot_card()所需要的最少的設置,如初始化堆棧和禁止外部中斷等。它的具體操作包括:
①定義自陷表。這個自陷表是SPARC V7體系共有的,可從參考BSP中復制。
②初始化處理器。
a)初始化自陷基地址寄存器TBR,即將自陷表地址寫入TBR;
b)初始化處理器狀態寄存器PSR,設置系統為最高優先級運行模式,禁止所有可屏蔽中斷;
c)設置窗口無效寄存器WIM;
d)初始化堆棧,設置堆棧指針。
③調用SYM(_bsp_board_init)(在boardinit.S中定義,這些代碼是目標板專