嵌入式實(shí)時(shí)操作系統ECOS在S3C2510上的移植實(shí)現
摘 要: 本文介紹了實(shí)時(shí)操作系統ECOS的特點(diǎn)及基本結構,并具體研究了ECOS在三星公司以ARM940T為內核的S3C2510嵌入式芯片上的移植方法。文章著(zhù)重討論了移植過(guò)程中的重點(diǎn)與難點(diǎn)部分:ECOS的硬件抽象層(HAL)移植。該移植方案已經(jīng)過(guò)實(shí)際測試,系統穩定可靠,可運行多任務(wù)式應用程序。
關(guān)鍵詞:實(shí)時(shí)操作系統;ECOS;硬件抽象層;移植;ARM
引言
ECOS(Embedded Configurable Operating System,嵌入式可配置操作系統)是一種針對16位、32位和64位處理器的可移植嵌入式實(shí)時(shí)操作系統。由于其源代碼是公開(kāi)的,因而有越來(lái)越多的設計人員開(kāi)始關(guān)注ECOS操作系統。ECOS最大的特點(diǎn)是模塊化,內核可配置。最小版本的ECOS只有幾百字節,非常適合小型嵌入式系統的開(kāi)發(fā)。相對于嵌入式Linux來(lái)說(shuō),ECOS有配置靈活和節省資源的優(yōu)勢。它的另一個(gè)優(yōu)點(diǎn)是使用多任務(wù)搶占機制,具有最小的中斷延遲,支持嵌入式系統所需的所有同步原語(yǔ),并擁有靈活的調度策略和中斷處理機制,因而具有良好的實(shí)時(shí)性。與Clinux和COS等操作系統相比,ECOS更適合于處理實(shí)時(shí)信號的設備,如移動(dòng)通信、WLAN等通信設備的開(kāi)發(fā)。
S3C2510是一款低功耗、高效能、面向以太網(wǎng)系統的微處理器。它的系統時(shí)鐘可達133MHz,并包含了16/32位寬的ARM940T核、4KB的I-CACHE和4KB的D-CACHE。S3C2510帶有兩個(gè)獨立的10/100Mbps的以太網(wǎng)控制器,這兩個(gè)接口能夠以硬件完成IEEE802.3的MAC層處理,因此更適合用作SOHO路由器、internet網(wǎng)關(guān),甚至寬帶無(wú)線(xiàn)接入設備的開(kāi)發(fā)。ECOS操作系統也非常適合這些網(wǎng)絡(luò )設備的開(kāi)發(fā),本文將介紹S3C2510的移植方案,給各種以ARM為內核處理器的ECOS底層移植開(kāi)發(fā)提供一個(gè)系統的范例。
圖 1 ECOS操作系統結構圖
ECOS底層移植的基礎知識
ECOS系統的主要組成部分如圖1所示。操作系統的主要功能 及特點(diǎn)是由其內核所決定的,底層移植一般不會(huì )涉及到系統內核的內容。由圖1可見(jiàn),硬件抽象層是嵌入式操作系統和硬件直接接觸的基本層,其將系統內核和具體的硬件平臺徹底隔離開(kāi), 實(shí)現了系統內核與硬件的無(wú)關(guān)性,這就是操作系統具有良好可移植性的體現。因此,對于開(kāi)發(fā)人員來(lái)說(shuō),移植操作系統真正的意義和工作在于移植操作系統的硬件抽象層。
硬件抽象層HAL對處理器結構和系統硬件平臺進(jìn)行抽象,當要在一個(gè)新的目標平臺上運行ECOS時(shí),只需要對底層的硬件抽象層進(jìn)行修改,便可迅速地將整個(gè)ECOS系統移植到新的平臺上。硬件抽象層主要包括三大模塊――體系結構抽象層(Architecture HAL)、變體抽象層(Variant HAL)和平臺抽象層(Platform HAL)。體系結構抽象層主要是指ECOS所支持的具有不同體系結構的處理器系列,如ARM系列、PowerPC系列、MIPS系列等等。變體抽象層指的是處理器系列中某款處理器在Cache、MMU和FPU等方面所具有的特殊性。如S3C2510屬于A(yíng)RM系列中的ARM940T,在變體抽象層中就會(huì )具體地針對ARM940T的Cache等方面作出定義。平臺抽象層則是對當前系統硬件平臺的抽象,包括了平臺的啟動(dòng)、芯片選擇與配置、定時(shí)設備、I/O寄存器訪(fǎng)問(wèn)以及中斷寄存器等等。平臺抽象層代碼的編寫(xiě)是ECOS移植工作的重點(diǎn)。
HAL移植的主要步驟
建立適當的文件目錄
ECOS本身有一個(gè)完整的文件目錄,只有把新建的底層文件放在適當的文件目錄下面,才能確保配置和編譯工作的成功,也有助于利用ECOS本身已有的源代碼,如結構體系層和變體層中的許多成熟可用的代碼。由于本系統中S3C2510處理器的內核是ARM940T,因而可以把S3C2510的目錄建立在ECOS庫路徑packages/hal/arm/arm9/下。
建立S3C2510的cdl文件
cdl文件使用cdl腳本語(yǔ)言描述該硬件設備(包或平臺)的特性和常用指標。cdl文件實(shí)現系統在源碼級的功能和指標配置,猶如一個(gè)項目管理高層對其倉庫中組件特性的登記,只有登記后的包、組件和選項才能被操作系統配置工具識別和配置。
以下是S3C2510的cdl文件中的幾段重要描述。
* cdl_package CYGPKG_ HAL_ARM_ ARM9_S3C2510
這是S3C2510在ecos.db中所登記的包的名字,它下面包含了該板的一些基本設置和組件,如母體體系結構(parent)、包含的頭文件、編譯的C文件等。
* cdl_component CYG_HAL _STARTUP
系統啟動(dòng)方式,有3種選擇:ram啟動(dòng)、rom啟動(dòng)、romram啟動(dòng)。
* cdl_component CYGNUM_ HAL_CPUCLOCK
平臺的系統時(shí)鐘設置,以便于ECOS其他組件以此時(shí)鐘為標準。該平臺系統時(shí)鐘的默認值設為133MHz。
* cdl_option CYGNUM_HAL_ RTC_PERIOD
ECOS內核的運行時(shí)鐘單位。ECOS內核以一個(gè)tick為時(shí)鐘單位,而一個(gè)tick的長(cháng)度就等于該選項的設定值。
在ecos.db中登記
S3C2510的硬件包
ecos.db是關(guān)于ECOS系統的一個(gè)數據庫文件(在packages目錄下),它包含了硬件包管理工具和一些在組件配置庫中的包。與cdl文件相比,ecos.db登記了倉庫中的物品,而cdl文件則登記每種物品的特性。只有在ecos.db中登記了的包,才能被ECOS的庫編譯工具(configtool)選中和使用。如果要在配置工具的模板選項中(template)增加可供選擇的硬件目標板,那么,需要先在ecos.db中登記其包描述,再增加其目標板描述。一般的輔助硬件(如網(wǎng)卡、串口等)只需要第一步的登記。因此,在ecos.db中登記S3C2510平臺硬件包的基本步驟就是登記硬件平臺的包描述(package CYGPKG_HAL_ARM_ ARM9_ S3C2510)和目標描述(target S3C2510)。需要注意的是,target S3C2510中所包含的3個(gè)硬件描述包CYGPKG_HAL_ARM、CYGPKG_HAL_ARM_ARM9和CYGPKG_HAL_ARM_ARM9_ S3C2510是不能缺少的,因為它們是標板的核心――主體系結構包、子體系結構包和主芯片包。另外,還可以可選地添加其他輔助硬件包(如網(wǎng)卡、串口等)。
編寫(xiě)平臺抽象層的有關(guān)代碼
硬件平臺層所需編寫(xiě)的代碼文件的一般功能如下所示。
* include /plf_cache.h ―― 平臺專(zhuān)用cache處理 (可選)。在本系統中不需要編寫(xiě),可直接調用ARM9變體層的hal_cache.h。
* include / hal_platform_ints.h ―― 平臺專(zhuān)用中斷處理,定義平臺中斷向量號。
* include / plf_io.h ―― I/O 定義和系統寄存器的宏定義。
* include ¬/ hal_platform_setup.h ―― 平臺啟動(dòng)代碼。本文件主要用ARM匯編指令編寫(xiě),實(shí)現平臺上電后程序的啟動(dòng)和執行。
* src/s3c2510_misc.c ―― HAL的底層標準函數,包括時(shí)鐘平臺初始化、時(shí)鐘延時(shí)函數、中斷使能、中斷屏蔽、中斷響應等。
* src/ hal_diag.c ―― 硬件抽象層診斷輸出函數,包含ECOS系統中printf打印的硬件設備驅動(dòng)程序。
* misc/ redboot_primary_ ram.ecm ―― 基于RAM啟動(dòng)方式的redboot最小配置文件。
* misc/redboot_primary_ rom.ecm ―― 基于ROM啟動(dòng)方式的redboot最小配置文件。
硬件啟動(dòng)過(guò)程
編寫(xiě)硬件啟動(dòng)的初始化過(guò)程是HAL移植的一個(gè)難點(diǎn)。當硬件重新上電后,系統的程序指針會(huì )自動(dòng)指向地址0(通常地址0存放著(zhù)bootloader代碼段)。在ECOS操作系統中,程序首先會(huì )運行vectors.S文件(該文件存在于hal/arm/arch/src/目錄下),它定義了reset_vector、start等各種啟動(dòng)標號。接著(zhù)調用S3C2510平臺層的hal_platform_ setup.h文件中的宏platform_setup1和arm9變體層arm9_misc.c文件中的函數 hal_hardware_init。
hal_platform_setup.h定義了宏platform_setup1以供vectors.S調用。該宏定義了目標板上SDRAM和FLASH的初始化啟動(dòng),其中包括了它們的取數方式和內存大小。然后根據不同的啟動(dòng)方式執行程序。對于RAM啟動(dòng)方式,無(wú)需進(jìn)行程序段與數據段的搬移,系統已認為SDRAM的起始地址即為程序的起始地址;對于ROM啟動(dòng)方式,需要搬移數據段,而程序段無(wú)需搬移;對于ROMRAM啟動(dòng)方式,程序段與數據段都需要進(jìn)行搬移,然后再把程序起始地址映射為SDRAM的起始地址。
在程序搬移完成后,系統會(huì )進(jìn)行其他硬件的初始化過(guò)程,包括系統時(shí)鐘、系統CACHE、監控串口等基本硬件設備。
內存布局文件編寫(xiě)
平臺的內存布局文件在include/pkgconf目錄下。通常,每個(gè)平臺包括了RAM、ROM和ROMRAM 3種不同啟動(dòng)方式的內存布局文件集。每種啟動(dòng)方式的內存布局文件集都由3個(gè)類(lèi)型的描述文件組成:.h文件包含內存域的C宏定義;.ldi文件定義內存域和內存段位置的鏈接腳本文件;.mlt文件包括由MLT工具產(chǎn)生的對內存布局的描述。當需要手動(dòng)修改內存布局時(shí),只有.h和.ldi文件可以被修改,.mlt文件只能由MLT工具生成。
下面以S3C2510的ram啟動(dòng)方式內存布局為例,主要說(shuō)明mlt_arm_s3c2510_ram.h和mlt_arm_s3c2510_ram.ldi的程序結構。
由于S3C2510的開(kāi)發(fā)板有兩個(gè)16MB的SDRAM,因而要定義兩個(gè)內存域ram1和ram2。系統設置寄存器在初始化時(shí)已經(jīng)把內存段重新映射,因而兩個(gè)SDRAM的基地址就是0x0和0x40000000,兩個(gè)內存域的大小是16MB,分配方式都是可讀寫(xiě)的內存段。
在mlt_arm_s3c2510_ram.ldi中分為兩大部分。首先是MEMORY部分,它定義了在RAM啟動(dòng)方式下所需要的內存域,以及該內存域的起始地址和長(cháng)度。MEMORY部分的內容必須與mlt_arm_s3c2510_ ram.h中定義的宏一致。其次是SECTIONS部分,它定義了RAM啟動(dòng)方式下所規定的內存段,這些內存段的定義與系統內存管理功能有關(guān)。在SECTION_XXX后帶有相應的參數,這些參數包括了內存段所屬的內存域、起始地址(或者是對齊方式)、虛擬內存地址(VMA)和加載內存地址(LMA)。
以SECTION_fixed_vectors (ram1, 0x200, LMA_EQ_VMA)為例,它表示fixed_vectors段屬于ram1內存域,起始地址為0x200,加載內存地址等于虛擬內存地址。LMA_EQ_VMA同時(shí)也可以解釋為該內存段不需要在程序運行后重新分配加載。
調試結果
S3C2510目標板上帶有1塊4MB的FLASH和2塊16MB的SDRAM。
利用ECOS的自帶編譯工具configtool對新建的S3C2510目標板進(jìn)行編譯,生成ECOS的庫文件。然后把庫目錄下的install目錄內容復制到應用工程目錄下,使ECOS庫包含到應用工程中。然后把該工程的.elf文件利用EMBEST公司開(kāi)發(fā)的IDE仿真器直接下載到目標板的SDRAM中。此時(shí)的ECOS操作系統應為RAM啟動(dòng)方式。
通過(guò)IDE對程序的調試與測試結果表明,本文提出的S3C2510移植方案使ECOS操作系統在目標板中運行正常穩定。該操作系統支持多個(gè)工作線(xiàn)程的應用程序。S3C2510的串口、網(wǎng)口均能與pc機正常傳輸數據。
結語(yǔ)
ECOS是一款非常年輕的嵌入式操作系統,1997年才正式推廣使用?,F階段有關(guān)ECOS開(kāi)發(fā)的參考資料和專(zhuān)門(mén)從事人員仍然很少,造成了ECOS產(chǎn)品研發(fā)周期和開(kāi)發(fā)成本的增加。因此,本文提出的ECOS操作系統的驅動(dòng)底層代碼編寫(xiě)方法對于使用ECOS開(kāi)發(fā)產(chǎn)品具有相當重要的指導意義。
評論