1 引言
嵌入式實時操作系統的使用,可以增強系統性能,確保系統穩定性和可靠性,便于維護開發應用程序.因此越來越廣泛 的使用于各種嵌人式系統中。eCos(Embedded Cofigurable Operating System)是一種開源的、免版稅的、實時的嵌入式操作系統,適合于深度嵌入式應用,主要應用于消費電子、通信產品、汽車電子等領域。與其它嵌入式實時操作系統不同,eCos具有獨特的可配置能力和配置機制。同時eCos具有良好的開放性、兼容性、穩定性、可擴展性和可移植性,而且支持ARM、MIPs、M68K、PowerPC等眾多微處理器。因此ecos日益受到嵌入式設計人員的關注,正在越來越多應用于嵌入式產品中。
2 eCos體系結構介紹
ecos使用多任務搶占機制,具有中斷延遲小,支持同優先級調度,支持嵌入式系統所需的所有同步原語,擁有靈活的調度策略和中斷處理機制。而且ecos提供了完備的嵌入式開發功能,包括設備驅動程序、內存管理、例外處理、標準庫函數、GNU編譯工具集等。
eCos采用模塊化的設計,將不同功能的軟件分為不同的組件,這些組件具有可重用性,分別位于系統的不同層次,這種分層結構使eCos具有良好的可配置性、可移植性、可兼容性和可擴展性。eCos的層次結構如圖1所示。
在eCos體系中最底層的是硬件抽象層HAL(Hardware Abstraction Layer),它負責對目標系統硬件平臺進行操作和控制,包括硬件初始化,中斷和異常的處理。HAL屏蔽了底層硬件的 不同,為上層提供了統一的接口。在進行eCos的移植中,關鍵要對HAL進行修改,即可將整個eCos系統移植到新的硬件平臺上。HAL根據所描述的硬件對象的不同可以分為體系結構抽象層(Architecture HAL)、變體抽象層(Variant HAL)、平臺抽象層(Platform HAL)。
圖1 eCos的層次結構
RedBoot是eCos提供的一個Boot Loader程序,RedBoot可以引導eCos系統,加載eCos應用程序,提供Debug支持,對目標系統環境參數進行管理等。
設備驅動程序負責對硬件設備進行控制管理,并完成設備數據的讀寫操作。驅動程序為上層軟件提供API函數,應用層使用API函數對設備進行訪問.完成對設備的操作。
內核是eCos中的核心,它負責完成任務調度、同步原語、處理中斷和例外、進行內存管理、負責定時機制,保證系統的實時性等功能。
OS抽象層中實現了TCP/IP網絡協議、文件系統、標準庫函數調用等,為嵌入式應用層軟件和應用程序提供API接口函數。
eCos的分層結構,使整個軟件結構清晰、有良好的可維護性和可移植性。
3 LPC2294硬件平臺
LPC2294是NXP公司的嵌入式微處理器芯片.屬于ARM7TDMI-S系列。LPC2294有豐富片內資源,而且功耗低.性價比高,可以應用在通信網關、工業控制、醫療設備等多種嵌入式領域中。如圖2是硬件平臺的結構框圖:
圖2硬件平臺框圖
硬件平臺以LPC2294處理器為核心,外嗣器件包括8MB NOR nash(SST39VF6401B)、512kB SRAM(IS61LV51216)、標準20針JTAG接口、RTL8019網卡芯片、RS232串口等組成。本文以此硬件平臺為基礎.介紹eCos的移植工作,為以ARM內核為處理器的eCos移植開發提供一個范例。
4 eCos在LPC2294上的移植
由于eCos支持大部分嵌入式CPU,可移植性強,故eCos的移植丁作主要是HAL的移植。其中平臺抽象層的移植是HAL移植的重點,包括內存布局、平臺初始化、中斷控制器、串口驅動程序等修改。在移植過程中,如果要將eCos移植到還不支持CPU體系結構,簡便高效的方法是利用eCos已經支持的相同體系結構CPU的硬件平臺作為模版,建立CDL文件。在ecos.db中進行登記,以與新的目標平臺相適應,進而進行移植工作。最新版本的eCos已經支持LPC2294處理器,故ecos在LPC2294上的移植的主要工作是對平臺抽象層的相關文件進行修改.采用圖形化配置工具進行配置編譯和生成鏡像文件,完成調試和 移植工作。
4.1建立交叉編譯環境和配置工具
eCos的源碼可以在eCos維護公司eCosCentric的網站中下載.地址是http://www.ecoscentric.com。由于eCos采用GNU工具集進行編譯.因此本文的主機使用RedHat9.0操作系統,并安裝gcc-3.2.1、binutils-2.13.1、newlib-1.11.0、insight-5.3、wxGTK-2.4.0工具,同時安裝交叉編譯器arm-elf-tools工具,建立起eCos針對ARM平臺的交叉編譯環境。
另外還要根據主機環境,生成eCos的配置丁具步驟如下:
將eCos解壓到/opt目錄中,并在/opt目錄中建立src、wxbuild、infra-build、ecos-tools、configtool-build目錄。首先要配置wxWidget靜態鏈接支持,編譯并安裝wxGTK,執行如下命令:cd /opt/wx build;/opt/src/wxGTK-2.4.0/configure disable-shared disable sockets\ prefix=/opt/wxGTK-2.4.0;make;make install
配置,編譯和安裝eCos的主機基礎環境,執行如下命令:
cd /opt/infra -build; /opt/ecos/host/configure prefix=/opt/ecos-tools; make; make install
編譯安裝ecos配置工具,執行如下命令:
cd /opt/configtool -build; make f /opt/ecos/host/tools/configtool/standalone/wxwin/makefile.\ gnu install WXDIR=/opt/wxGTK2.4.0 ECOSSRCDIR=/opt/ecos/host INSTALLDIR=/opt/ecos-\ tools
這樣,就完成了eCos的配置工具安裝,它位于/opt/ecos-tools/bin目錄中,包括了圖形配置工具configtools和命令行配置工具ecosconfig。
4.2 配置基本硬件平臺
與LPC2294相關的文件在ecos\packages\hal\arm\lpc2xx 目錄中,在/opt/ecos-tools/bin中運行圖形化配置工具configtools,在huild選項的Templates選擇和LPC2294相近的模板.就可以進行具體的平臺級配置。本文選擇phyCORE-LPC2294/92 development board HAL模板作為基本配置平臺,根據實際目標系統平臺修改ecos中的選項,主要修改包括:
a) 修改ARM vector at 0x14選項的值,LPC2XXX系列處理器將ox14處的值作為有效用戶代碼判斷條件,應該滿足向量表所以數據32位累加和為0的要求;
b) 修改CPU xtal frequency選項的值,這是CPU晶振值,默認為10MHz,根據實際情況修改為11059200;
c) 修改CPU PLL multiplier選項的值,內部PLL倍頻值默認為6,修改為4;
d) 修改eCos kernel選項的值,根據需要刪減內核中不需要的選項;
e) 修改I/O sub-system選項的值,根據實際I/0設備的情況,配置I/0選項;
f) 修改其它配置選項,以適應目標系統平臺。
這樣就通過圖形化配置工具,配置完成了eCos的大部分選項。然而,圖形化配置工具并不能完成所有的eCos配置功能.因此還需要對內存分布文件、Flash驅動文件進行修改。
4.3 修改內存布局
內存布局文件在ecos/packages/hal/arm/lpc2xxx/phycore229x/current/include/pkgconf目錄中,里面包含了RAM、ROM兩種不同啟動方式的配置文件,而每種啟動方式又對應三種文件格式,分別為:
ldi文件,鏈接腳本文件,定義了LPC2294的內存域起始地址和長度和段地址,為程序鏈接時使用。
h文件,使用c宏定義描述LPC2294存儲器起始地址和大小.指定程序運行時堆起始地址和大小。
mlt文件,配置工具保存文件,只能由配置工具生成和改變,不能手動修改。
以LPC2294為例,在ROM啟動時需要修改mlt_arm_lpc2xxx_phycore229x_rom.h文件中的定義,以片外ROM的分配和堆地址分配為例,其代碼如下:
#define CYGMEM_REGlON—flash(0x80000000)
#define CYGMEM_REGl0N_flash_SIZE(CYGHWR_HAL_ARM_PHYCORE229X_FLASH_SIZE)
#define CYGMEM_REGlON_flash_ATTR (CYCMEM_REGION_ATTR_R)
#define CYGMEM_SECCTION_heap1 (CYG_LABEL_NAME(_heap1))
#define CYGMEM_SECTION_heap1_SIZE(0x81000000+CYGHWR_HAL_ARM_PHYCORE229X_SRAM_SIZE - (size_t) CYG_LABEL_NAME (_heap 1))
這樣,定義了片外ROM的起始地址為0x80000000,大小為宏定義中flash的尺寸;定義了程序的堆起始地址為0x81000000,大小也在宏定義中規定。
4.4添加Flash驅動
本文的硬件平臺Flash型號為SST39VF6401B,在eCos中并不支持此型號的Flash,所以要為eCos添加Flash的驅動程序。SST39VF6401B是8MB的16位NOR型Flash,塊空間數為128,每個塊大小為64KB。選擇eCos已支持的與此Flahh相近的型號AT49系列進行修改.將flash_dev_info_t中的block_size和block_count值分別改為0x10000和0x80。并且編寫與Flash底層驅動對應的CDL文件,使配置工具能夠正確配置編譯F1ash驅動程序,參照AT49驅動包的CDL,將cdl_package定義改為CYGPKG_DEVS_Flash_SST_39VF6401B。在命令體中給出配置參數。最后,在ecos.db中注冊Flash的底層驅動軟件包,這樣再次使用圖形化配置工具,就可以在eCos配置選項選擇SST39VF6401B型Flash。
4.5修改初始化程序
在eCos啟動時要運行初始化程序,以完成LPC2294的運行模式設定、時鐘頻率設定、串口波特率設定等操作,初始化程序在hal/arm/lpc2xxx/phycore229x_misc.c文件中,phycore229x_misc.c調用hal_platform_ints.h的宏定義完成系統中斷定義,之后調用hal_platform_setup.h中的宏定義完成中斷初始化,配置系統時鐘,和內部存儲器初始化等操作。修改phycore229x_misc.c中的有關函數,完成針對本系統平臺的初始化。
4.6運行結果
在完成上述驅動的編寫和文件的修改之后,重新使用configtools工具進行配置,使用build選項完成eCos操作系統的編譯,產生內核庫文件和鏈接腳本以及頭文件,將生成的文件與應用程序一起編譯、鏈接,生成最終的可執行映像文件。將可執行影像文件下載到Flash中運行,經測試eCos支持多個線程的應用程序操作,且其串口、網口均能與PC機進行正常通信,說明eCos在LPC2294上的移植是成功的。
5 總結
嵌入式可配置操作系統eCos與其他嵌入式實時操作系統相比,有著更好的可配置性和可移植性,這使其在嵌入式系統的應用日益廣泛。本文將eCos成功的應用在了以LPC2294為核心的硬件平臺上,并編寫了相應的Flash驅動程序和應用程序,對于eCos在ARM7FDMI系統中的應用提供一些借鑒和指導。
本文的創新點:實現了eCos在LPC2294上的移植和應用。在實際應用中eCos內核中斷響應快,代碼量小,穩定性好,為嵌入式實時操作系統的應用提供了參考。
責任編輯:gt
-
嵌入式
+關注
關注
5082文章
19105瀏覽量
304829 -
汽車電子
+關注
關注
3026文章
7943瀏覽量
166914 -
操作系統
+關注
關注
37文章
6803瀏覽量
123285
發布評論請先 登錄
相關推薦
評論