eCos 是一個優秀的嵌入式實時操作系統。 eCos 的體系結構是一種分層結構,硬件抽象層將操作系統與硬件隔離開,這為把 eCos 移植到不同的硬件平臺提供了便捷的方法,抽象層就像軟件與硬件之間的橋梁。主要的移植思想是,按照 eCos 的模塊化設計,完成硬件抽象層。
引言
目前,嵌入式操作系統的種類較多,其中比較流行的有 VxWorks 、 Windows CE 、 Psos 、 Palm OS 、嵌入式 Linux 等。這些嵌入式操作系統在開放性、實用性以及性能等方面各有千秋,但大多數為商用產品。除了商用產品外,還有一些免費的嵌入式操作系統, uClinux 是其中比較流行的,而eCos則是另一個選擇。嵌入式可配置操作系統eCos(Embedded Configureable Operating System )的特點是可配置性、可裁減性、可移植性和實時性。它的一個主要技術特色就是功能強大的配置系統,可以在源碼級實現對系統的配置和裁減。與 Linux 的配置和裁減相比,eCos的配置方法更清晰、更方便;且系統層次也比 Linux 清晰明了,移植和增加驅動模塊更加容易。正是由于這些特性,eCos引起了越來越多的關注,同時也吸引越來越多的廠家使用 eCos 開發其新一代嵌入式產品。
eCos 現在由 Red Hat 維護,可支持的處理器包括: ARM 、 StrongARM 、 XScale 、 SuperH 、 Intel X86 、 PowerPC 、 MIPS 、 AM3X 、 Motorola 68/Coldfire 、 SPARC 、 Hitachi H8/300H 和 NEC V850 等。源代碼及開發工具可在 Red Hat 的網站上免費下載,網頁地址是 http:/sources.redhat.com/ecos 。
1 、 eCos 的層次結構
eCos 采用模塊化設計,由不同的功能組件構成, eCos 系統的層次結構如圖 1 所示。
這種層次結構的最底層是硬件抽象層( Hardware Abstraction Layer ),簡稱為 HAL ,它負責對目標系統硬件平臺進行操作和控制,包括對中斷和例外的處理,為上層軟件提供硬件操作接口。只需提供新硬件的抽象層,就可以將整個 eCos 系統包括基于 eCos 的應用移植到新的硬件平臺上。
2 、構建 eCos 系統
構建 eCos 系統首先要搭建自己的硬件抽象層,然后創建驅動程序,之后就可以編制應用程序了。
3 、硬件抽象層的移植
硬件抽象層分為三個不同的子模塊:體系結構抽象層( Architecture HAL )、變體抽象層( Variant HAL )和平臺抽象層( Platform HAL )。
體系結構抽象層。 eCos 所支持的不同處理器系列具有不同的體系結構,如 ARM 系列、 PowerPC 系列、 MIPS 系列等。體系結構抽象層對 CPU 的基本結構進行抽象和定義,此外它還包括中斷的交付處理、上下文切換、 CPU 啟動以及該類處理器結構的指令系統等。
變體抽象層指的是處理器在該處理器系列中所具有的特殊性,這些特殊性包括 Cache 、 MMU 、 FPU 等。 eCos 的變體抽象層就是對這些特殊性進行抽象和封裝。
平臺抽象層是對當前系統的硬件平臺進行抽象,包括平臺的啟動、芯片選擇和配置、定時設備、 I/O 寄存器訪問以及中斷寄存器等。
硬件抽象層的這三個子模塊之間沒有明顯的界線。對于不同的目標平臺,這種區分具有一定的模糊性。例如, MMU 和 Cache 可能在某個平臺上屬于體系結構抽象層,而在另一個平臺上則可能屬于變體抽象層的范圍;再比如,內存和中斷控制器可能是一種片內設備而屬于變體抽象層,也可能是片外設備而屬于平臺抽象層。
eCos 的移植通過這三個子模塊來完成,即平臺抽象層的移植、變體抽象層的移植和體系結構抽象層的移植。對一個新的體系結構來說,其系統結構抽象層的建立相對來說比較困難。 eCos 支持大部分當前廣泛使用的嵌入式 CPU ,已具有了支持各種體系結構的硬件抽象層。因此, eCos 的移植很少需要進行體系結構抽象層的編寫。
4 、平臺抽象層的移植
一般來說,進行 eCos 開發時,移植的主要工作在于平臺抽象層,這是由于 eCos 已實現了絕大多數流行嵌入式 CPU 的體系結構抽象層和變體抽象層。平臺抽象層主要完成的工作包括:內存的布局、平臺早期初始化、中斷控制器以及簡單串口驅動程序等。
構建一個新的平臺系統,最簡單的方法是利用eCos源碼提供的具有相同體系結構和 CPU 型號的參考平臺硬件抽象層,將其作為模板,復制并修改所有與新平臺相關的文件。若 eCos 沒有這樣的平臺,則可用另一種體系結構或 CPU 型號的類似硬件抽象層作為模板。比如, eCos 提供了以三星公司 ARM CPU S 3C 4510b 為核心的平臺 SNDS4110 ,當需要移植 eCos 到 ARM CPU S 3C 44B0 上時,這將是一個很好的起點。
移植工作最好是從RedBoot開始,實現的第一個目標是使RedBoot運行在新平臺上。 RedBoot 是eCos自帶的啟動代碼,它比 eCos 要簡單,沒有使用中斷和線程機制,但包含了大部分最基本的功能。
建立目標平臺的RedBoot通常按以下步驟進行(以構建 S3C44b0 的新平臺為例)。
① 復制 eCos 源碼中選定的參考平臺,根據需要對目錄及文件更名。更名的主要內容有:新平臺的目錄名、組件定義文件( CDL )、內存布局文件( MLT )、平臺初始化的源文件和頭文件。
② 調整組件定義文件( CDL )選項。包括選項的名字、實時時鐘 / 計數器、 CYGHWR_MEMORY_LAYOUT 變量、串口參數以及其他的一些選項。
③ 在頂層ecos.db文件中加入所需要的包,并增加對目標平臺的描述。在最初,該目標平臺的入口可以只包含硬件抽象層包,其他硬件支持包以后再加入。經過修改后,就可在 eCos 配置程序中選擇新的平臺進行配置。
④ 修改include/pkgconf 中的內存布局( MLT )文件。按照新的硬件平臺內存布局修改 MLT 文件。 MLT 文件對應每種啟動類型有三個不同后綴的文件: .h 文件以及 .ldi 文件和 mlt 文件。手工修改時只需修改 .h 文件和 .ldi 文件,并保證兩個文件同步修改。修改的主要內容有 ROM 的起始地址、 ROM 的大小、 RAM 的起始地址和 RAM 的大小。
⑤ 修改平臺的 io 宏定義。在 include/plt_io.h 文件中完成對平臺的各種 IO 宏定義,包括各種 CPU 的系統配置寄存器、內存配置寄存器、串口配置寄存器、 LCD 配置寄存器、以太網配置寄存器等的 I/O 地址。
⑥ 修改平臺的Cache代碼。在 include/hal_cache.h 文件中修改有關 Cache 的宏定義。在開發初期,最好先將 Cache 關閉,等移植穩定后再打開。
⑦ 實現簡單的串口驅動程序。串口的初始化、接收和發送在 src/hal_diag.c 文件完成。主要的函數如下:
cyg_hal_plf_serial_init_channel() ,完成對某個串口的具體初始化工作;
cyg_hal_plf_serial_putc() ,從串口發送一個字符;
cyg_hal_plf_serial_getc() ,從串口接收一個字符;
cyg_hal_plf_serial_getc_nonblock() ,以無阻塞的方式接收一個字符,即緩沖區中無數據時立即返回;
cyg_hal_plf_serial_isr() ,串口中斷服務程序;
cyg_hal_plf_serial_init() ,調用 cyg_hal_plf_serial_init_channel() 函數初始化各串口,并向內核注冊串口中斷服務程序、串口的讀寫例程和配置例程。
⑧ 修改或增加平臺初始化程序。平臺初始化在 3 個文件文件中完成: src/s 3c 44b0_misc.c 、 include/hal_platform_setup.h 和 include/hal_platform_ints.h 。
hal_platform_ints.h 完成系統的中斷宏定義。在不同的平臺中設備數量和類型不同,中斷的譯碼方式也不一致,需要根據具體情況作出調整。
hal_platform_setup.h 主要完成系統硬件的初步配置,這里一般要在看門狗和中斷關閉后,配置系統時鐘頻率、 ROM 和 RAM 的初始化參數。
s3c44b0_misc.c 文件完成目標板的進一步初始化、中斷處理、延時例程和操作系統時鐘設置。
經過以上修改,底層的平臺抽象層就基本完成了,這時可用 eCos 的配置工具生成 RedBoot 進行測試。
RedBoot測試成功后,說明平臺已經能正確完成初始化操作,且串口驅動也能正常工作,接著要完成中斷和 Cache 等測試工作。可利用一些多線程的小程序測試,檢測時鐘配置是否正確,同時也檢測了中斷能否正常工作。
5 、驅動程序設計
平臺抽象層完成后,接著要完成系統的設備驅動程序。 eCos 設備驅動程序的中斷模塊分為三個層次:中斷服務程序 ISR 、中斷滯后服務程序 DSR 和中斷線程。 ISR 在響應中斷時立即調用, DSR 由 ISR 發出調用請求后調用,而中斷線程為驅動程序的客戶程序。
硬件中斷在最短的時間內交付給ISR處理。硬件抽象層對硬件中斷源進行譯碼并調用對應的中斷 ISR 。 ISR可以對硬件進行簡單的操作,應使ISR的處理時間盡量短。當ISR返回時,它可將自己的中斷滯后服務程序DSR放入操作系統的任務調度中, DSR可以在不妨礙調度器正常工作時安全運行。大多數情況下, DSR 將在ISR執行完成后立即運行。
-
嵌入式系統
+關注
關注
41文章
3564瀏覽量
129224 -
eCos
+關注
關注
1文章
19瀏覽量
15207
發布評論請先 登錄
相關推薦
評論