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