盧 飛 滕至陽 苗元亮
(東南大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院 南京 210000)
嵌入式實(shí)時(shí)操作系統(tǒng)的使用,可以增強(qiáng)系統(tǒng)性能,確保系統(tǒng)的穩(wěn)定性和可靠性,便于開發(fā)和維護(hù)應(yīng)用程序,因此越來越廣泛的被應(yīng)用于各種嵌入式系統(tǒng)。eCos(Embedded Configurable Operating System)是一種開源的、免版稅的、實(shí)時(shí)的嵌入式操作系統(tǒng),適合于深度嵌入式應(yīng)用。與其它嵌入式實(shí)時(shí)操作系統(tǒng)不同,eCos具有獨(dú)特的可配置能力和配置機(jī)制。同時(shí)eCos具有良好的開放性、兼容性、穩(wěn)定性、可擴(kuò)展性和可移植性,而且支持ARM、MIPs、M68K 、PowerPC 、ColdFire、v850、x86 等眾多微處理器[1]。因此eCos日益受到嵌入式設(shè)計(jì)人員的關(guān)注,正在越來越多應(yīng)用于嵌入式產(chǎn)品中。
IOP348是intel公司的一款基于XScale的io處理器,集成了雙核XScale處理器,最高頻率達(dá)到了1.2GHz,同時(shí)支持PCI-X和PCI-E(最高支持到PCI-E x8),還集成了 8個(gè) SAS 3Gb/s接口[8~9]。目前主要應(yīng)用在RAID控制卡,iSCSI控制器等數(shù)據(jù)存儲(chǔ)設(shè)備中。本文利用eCos的可配置性,分析eCos移植過程中的一般步驟,將eCos應(yīng)用到基于IOP348的開發(fā)板iq81348上。
eCos使用多任務(wù)搶占機(jī)制,具有中斷延遲小,支持同優(yōu)先級(jí)調(diào)度,支持嵌入式系統(tǒng)所需的所有同步原語,擁有靈活的調(diào)度策略(包括 bitmap和Multi-level queue)和中斷處理機(jī)制。eCos提供了完備的嵌入式開發(fā)功能,包括設(shè)備驅(qū)動(dòng)程序、內(nèi)存管理、例外處理、標(biāo)準(zhǔn)庫函數(shù)、基本的文件系統(tǒng)、網(wǎng)絡(luò)棧等。
eCos采用模塊化的設(shè)計(jì),將不同功能的軟件分為不同的組件,這些組件具有可重用性,分別位于系統(tǒng)的不同層次,這種分層結(jié)構(gòu)使eCos具有良好的可配置性、可移植性、可兼容性和可擴(kuò)展性。eCos的層次結(jié)構(gòu)如圖l所示。
圖 1 eCos層次結(jié)構(gòu)
在ecos體系中最底層的是硬件抽象層HAL(Hardware Abstraction Level),它負(fù)責(zé)對目標(biāo)系統(tǒng)硬件平臺(tái)進(jìn)行操作和控制,包括硬件初始化,中斷和異常的處理。HAL屏蔽了底層硬件的差異,為上層提供統(tǒng)一的接口。在進(jìn)行eCos的移植中,關(guān)鍵要對HAL進(jìn)行修改,即可將整個(gè)ecos系統(tǒng)移植到新的硬件平臺(tái)上。HAL根據(jù)所描述的硬件對象的不同可以分為體系結(jié)構(gòu)抽象層(Architecture HAL)、變體抽象層(Variant HAL)與平臺(tái)抽象層(Platform HAL),因此HAL的移植就可以分為三種不同的類型:體系結(jié)構(gòu)抽象層移植,變體抽象層移植和平臺(tái)抽象層移植[2,4~5]。
體系結(jié)構(gòu)抽象層移植針對的是HAL的體系結(jié)構(gòu)層。eCos支持的每種處理器系列都被看成是一種不同的體系結(jié)構(gòu)。在/eCOS/packages/hal目錄下每一種體系結(jié)構(gòu)都有對應(yīng)的子目錄,例如/eCOS/packages/hal/arm對應(yīng)于ARM體系結(jié)構(gòu)。每個(gè)子目錄中包含了用于支持特定處理器的平臺(tái)抽象層和變體抽象層子目錄,例如/eCOS/packages/hal/arm目錄下包含e7t子目錄與lpc2xxx子目錄,e7t包含的代碼用于支持arm e7t這個(gè)平臺(tái)的初始化,lpc2xxx包含的代碼用于支持LPC2000處理器系列的不同變體(包括 lpc2106,lpc2100等)。體系抽象層移植可以選擇相近的HAL作為模板。
變體抽象層移植針對的是HAL的變體層,該子層可支持特定CPU與同類體系結(jié)構(gòu)的普通CPU之間的差異。變體抽象層移植通過對中斷、高速緩存及其他特性的重定義來覆蓋體系結(jié)構(gòu)抽象層中的默認(rèn)實(shí)現(xiàn)。
平臺(tái)抽象層移植針對的是HAL平臺(tái)層,該子層次對應(yīng)于一系列的硬件,包括選擇的處理器或其變體。平臺(tái)抽象層移植時(shí)可采用eCos支持的且與新硬件平臺(tái)相近的平臺(tái)HAL作為模板,對內(nèi)存布局等初始化代碼進(jìn)行修改。
硬件抽象層的這3個(gè)子模塊之間沒有很明顯的界限。對于不同的目標(biāo)平臺(tái),這種區(qū)分具有一定的模糊性。一般來說,目標(biāo)系統(tǒng)應(yīng)該將體系結(jié)構(gòu)抽象層、變體抽象層和平臺(tái)抽象層分別使用不同的包來加以實(shí)現(xiàn)。
eCos的這種分層結(jié)構(gòu)使整個(gè)軟件結(jié)構(gòu)清晰,有良好的可維護(hù)性和可移植性。
硬件平臺(tái)以IOP348處理器為核心,外部器件包括8MB NOR Flash(StrataFlash·28F640J3C120B)、512MB DDRII內(nèi)存 、10針 JTAG 接口、82545GM 千兆以太網(wǎng)卡芯片、Rs232串口、PCI-E slot、PCI-X edge等。圖2是硬件平臺(tái)的結(jié)構(gòu)框圖[8]。
本文以此硬件平臺(tái)為基礎(chǔ),介紹eCos的移植工作。
圖2 IOP348硬件平臺(tái)框圖
本文所涉及的eCos移植是在Windows XP環(huán)境下實(shí)現(xiàn)的,需要用到Cygwin、GNU本地開發(fā)工具、ARM平臺(tái)交叉開發(fā)工具以及eCos配置工具[3]。本文使用了Macraigor公司提供cygwin環(huán)境和xscale toolchain安裝包。
Intel IOP348是基于Xscale架構(gòu)的一款CPU,其體系結(jié)構(gòu)抽象層對應(yīng)于XScale,在eCos中已經(jīng)有相關(guān)移植,所以eCos在IOP348上的移植主要包括變體抽象層和平臺(tái)抽象層的移植。
IOP348隸屬 Intel IOP34X系列,與之前的IOP310系列相似,可以把IOP310的HAL作為模板,實(shí)現(xiàn)變體抽象層的移植。
首先在 hal/arm/xscale/目錄下新建文件夾IOP34X,然后按照hal/arm/xscale/IOP310目錄下的文件結(jié)構(gòu)創(chuàng)建文件,文件名對應(yīng)IOP348。具體如下:
1)創(chuàng)建配置描述文件 hal_arm_xscale_iop34x.cdl,使其對IOP34X系列CPU所有組件特性進(jìn)行登記。修改內(nèi)容主要包括:cdl_package命令,主要用來在eCos.db文件中加入新平臺(tái)相應(yīng)的包,改變新加入的包在eCos配置工具中的描述和定義,同時(shí)改變包編譯時(shí)依賴的文件;cdl_component命令,它用來調(diào)整啟動(dòng)模式和時(shí)鐘設(shè)置;cdl_option命令,主要用來調(diào)整其他設(shè)置選項(xiàng)。
2)創(chuàng)建文件hal_iop34x.h。這個(gè)文件中主要是定義CPU相關(guān)寄存器地址[8~9]及一些基礎(chǔ)宏操作,包括移位操作、寄存器讀寫等。根據(jù)IOP34X系列CPU設(shè)置即可。
3)創(chuàng)建文件hal_var_ints.h。這個(gè)文件中主要是定義CPU的中斷編號(hào)以及中斷相關(guān)的常量,例如中斷ISR個(gè)數(shù)等[6~7,9]。
4)var_io.h文件主要是針對pci設(shè)備的讀寫操作,提供pci設(shè)備讀寫的函數(shù)接口以及部分底層pci操作的宏定義實(shí)現(xiàn)。這部分內(nèi)容也可以直接放到平臺(tái)抽象層處理。
5)創(chuàng)建文件iop34x_misc.c和iop34x_pci.c。iop34x_misc.c文件主要是硬件初始化函數(shù)及部分硬件初始化宏定義。iop34x_pci.c文件主要是針對pci設(shè)備的操作,由于IOP34X系列使用了PCIX和PCI-E,需要對cyg_hal_plf_pci_init函數(shù)進(jìn)行較大的改動(dòng)[9]。
變體抽象層到此就完成了。平臺(tái)抽象測移植與變體抽象層類似,可以以平臺(tái)iq80310作為模板移植,根據(jù)外圍芯片不同更改相應(yīng)的驅(qū)動(dòng)程序。在平臺(tái)抽象層移植過程中需要注意以下兩點(diǎn):
1)由于 iq81348支持 SAS控制器,需要在NOR Flash中預(yù)留出前2MB空間作為SAS Firmware,因此需要修改eCos的啟動(dòng)方式,使用ROMRAM方式(即把 eCos鏡像從 Flash中拷貝到RAM中運(yùn)行),同時(shí)留出2MB的偏移量。
2)FLASH起始地址是0xF0000000,大小為0x00800000,SDRAM 起始地址為0x00000000,大小為0x20000000,在內(nèi)存布局配置文件mlt_arm_xscale_iq8134x_romram.h和mlt_arm_xscale_iq8134x_romram.ldi文件中需要手動(dòng)修改,并且需要考慮偏移量的問題。
最后需要對eCos.db文件進(jìn)行更新,加入移植內(nèi)容。圖3是配置工具中加入iq81348成功后的模板選擇界面,圖4是加載iq81348成功后的eCos配置界面。
圖3 eCos配置工具中iq81348的模板
圖4 加載iq81348后eCos配置工具界面
在完成上述文件的修改以后,可以使用eCos的配置工具重新進(jìn)行配置,選擇需要的packages,執(zhí)行build命令完成eCos鏡像的編譯,生成內(nèi)核庫文件,鏈接腳本以及頭文件。
嵌入式可配置操作系統(tǒng)eCos與其他嵌入式實(shí)時(shí)操作系統(tǒng)相比,有著更好的可配置性和可移植性,這使eCos在嵌入式系統(tǒng)的應(yīng)用日益廣泛。本文將eCos成功的應(yīng)用在IOP348為核心的硬件平臺(tái)上,提供了eCos移植的具體步驟,對IOP34X系列的其他平臺(tái)移植也有借鑒意義,同時(shí)也為iq81348的后續(xù)開發(fā)提供了一個(gè)良好的平臺(tái)。
[1]eCosCentric Ltd.eCos Referance Manual[EB/OL].http://ecos.sourceware.org/docs-latest/pdf/ecos-ref.pdf,2003
[2]蔣句平.嵌入式可配置實(shí)時(shí)操作系統(tǒng)eCos開發(fā)與應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2004
[3]Anon.Building a Tool Chain for Use with eCos[EB/OL].http://ecos.sourceware.org,2007
[4]周永紅,于玲玲.如何構(gòu)建eCos嵌入式系統(tǒng)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2005(11):79~81
[5]王京起,黃健,沈中杰,等.嵌入式可配置實(shí)時(shí)操作系統(tǒng)eCos技術(shù)及實(shí)現(xiàn)機(jī)制[M].北京:電子工業(yè)出版社,2005
[6]Intel Ltd.3rd Generation Intel Xscale Microarchitecture Developer's Manual[EB/OL].http://download.intel.com/design/intelxscale/31628302.Pdf,2007
[7]Intel Ltd.Intel XScale·Core Developer's Manual[EB/OL].http://download.intel.com/design/intelxscale/27347302.Pdf,2004
[8]Intel Ltd.Intel·81348 I/O Processor Design Guide[EB/OL].http://download.intel.com/design/iio/docs/31505302.Pdf,2007
[9]Intel Ltd.Intel·81348 I/O Processor Developer's Manual[EB/OL].http://download.intel.com/design/iio/docs/31503602.pdf,2007