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