當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]如何構(gòu)建eCos嵌入式系統(tǒng)

摘要 eCos是一個優(yōu)秀的嵌入式實時操作系統(tǒng)。eCos的體系結(jié)構(gòu)是一種分層結(jié)構(gòu),硬件抽象層將操作系統(tǒng)與硬件隔離開,這為把eCos移植到不同的硬件平臺提供了便捷的方法,抽象層就像軟件與硬件之間的橋梁。主要的移植思想是,按照eCos的模塊化設(shè)計,完成硬件抽象層。
關(guān)鍵詞 eCos 移植 硬件抽象層 嵌入式 可配置操作系統(tǒng)

引言

  目前,嵌入式操作系統(tǒng)的種類較多,其中比較流行的有VxWorks、Windows CE、Psos、Palm OS、嵌入式Linux等。這些嵌入式操作系統(tǒng)在開放性、實用性以及性能等方面各有千秋,但大多數(shù)為商用產(chǎn)品。除了商用產(chǎn)品外,還有一些免費的嵌入式操作系統(tǒng),uClinux是其中比較流行的,而eCos則是另一個選擇。嵌入式可配置操作系統(tǒng)eCos(Embedded Configureable Operating System)的特點是可配置性、可裁減性、可移植性和實時性。它的一個主要技術(shù)特色就是功能強大的配置系統(tǒng),可以在源碼級實現(xiàn)對系統(tǒng)的配置和裁減。與Linux的配置和裁減相比,eCos的配置方法更清晰、更方便;且系統(tǒng)層次也比Linux清晰明了,移植和增加驅(qū)動模塊更加容易。正是由于這些特性,eCos引起了越來越多的關(guān)注,同時也吸引越來越多的廠家使用eCos開發(fā)其新一代嵌入式產(chǎn)品。

  eCos現(xiàn)在由Red Hat維護,可支持的處理器包括:ARM、StrongARM、XScale、SuperH、Intel X86、PowerPC、MIPS、AM3X、Motorola 68/Coldfire、SPARC、Hitachi H8/300H和NEC V850等。源代碼及開發(fā)工具可在Red Hat的網(wǎng)站上免費下載,網(wǎng)頁地址是http:/sources.redhat.com/ecos。

1  eCos的層次結(jié)構(gòu)

  eCos采用模塊化設(shè)計,由不同的功能組件構(gòu)成,eCos系統(tǒng)的層次結(jié)構(gòu)如圖1所示。

  這種層次結(jié)構(gòu)的最底層是硬件抽象層(Hardware Abstraction Layer),簡稱為HAL,它負責(zé)對目標(biāo)系統(tǒng)硬件平臺進行操作和控制,包括對中斷和例外的處理,為上層軟件提供硬件操作接口。只需提供新硬件的抽象層,就可以將整個eCos系統(tǒng)包括基于eCos的應(yīng)用移植到新的硬件平臺上。

2  構(gòu)建eCos系統(tǒng) 

  構(gòu)建eCos系統(tǒng)首先要搭建自己的硬件抽象層,然后創(chuàng)建驅(qū)動程序,之后就可以編制應(yīng)用程序了。

3  硬件抽象層的移植

  硬件抽象層分為三個不同的子模塊:體系結(jié)構(gòu)抽象層(Architecture HAL)、變體抽象層(Variant HAL)和平臺抽象層(Platform HAL)。

  體系結(jié)構(gòu)抽象層。eCos所支持的不同處理器系列具有不同的體系結(jié)構(gòu),如ARM系列、PowerPC系列、MIPS系列等。體系結(jié)構(gòu)抽象層對CPU的基本結(jié)構(gòu)進行抽象和定義,此外它還包括中斷的交付處理、上下文切換、CPU啟動以及該類處理器結(jié)構(gòu)的指令系統(tǒng)等。

  變體抽象層指的是處理器在該處理器系列中所具有的特殊性,這些特殊性包括Cache、MMU、FPU等。eCos的變體抽象層就是對這些特殊性進行抽象和封裝。


圖1

  平臺抽象層是對當(dāng)前系統(tǒng)的硬件平臺進行抽象,包括平臺的啟動、芯片選擇和配置、定時設(shè)備、I/O寄存器訪問以及中斷寄存器等。

  硬件抽象層的這三個子模塊之間沒有明顯的界線。對于不同的目標(biāo)平臺,這種區(qū)分具有一定的模糊性。例如,MMU和Cache可能在某個平臺上屬于體系結(jié)構(gòu)抽象層,而在另一個平臺上則可能屬于變體抽象層的范圍;再比如,內(nèi)存和中斷控制器可能是一種片內(nèi)設(shè)備而屬于變體抽象層,也可能是片外設(shè)備而屬于平臺抽象層。

  eCos的移植通過這三個子模塊來完成,即平臺抽象層的移植、變體抽象層的移植和體系結(jié)構(gòu)抽象層的移植。對一個新的體系結(jié)構(gòu)來說,其系統(tǒng)結(jié)構(gòu)抽象層的建立相對來說比較困難。eCos支持大部分當(dāng)前廣泛使用的嵌入式CPU,已具有了支持各種體系結(jié)構(gòu)的硬件抽象層。因此,eCos的移植很少需要進行體系結(jié)構(gòu)抽象層的編寫。

4  平臺抽象層的移植

  一般來說,進行eCos開發(fā)時,移植的主要工作在于平臺抽象層,這是由于eCos已實現(xiàn)了絕大多數(shù)流行嵌入式CPU的體系結(jié)構(gòu)抽象層和變體抽象層。平臺抽象層主要完成的工作包括:內(nèi)存的布局、平臺早期初始化、中斷控制器以及簡單串口驅(qū)動程序等。

  構(gòu)建一個新的平臺系統(tǒng),最簡單的方法是利用eCos源碼提供的具有相同體系結(jié)構(gòu)和CPU型號的參考平臺硬件抽象層,將其作為模板,復(fù)制并修改所有與新平臺相關(guān)的文件。若eCos沒有這樣的平臺,則可用另一種體系結(jié)構(gòu)或CPU型號的類似硬件抽象層作為模板。比如,eCos提供了以三星公司ARM CPU S3C4510b為核心的平臺SNDS4110,當(dāng)需要移植eCos到ARM CPU S3C44B0上時,這將是一個很好的起點。

   移植工作最好是從RedBoot開始,實現(xiàn)的第一個目標(biāo)是使RedBoot運行在新平臺上。RedBoot是eCos自帶的啟動代碼,它比eCos要簡單,沒有使用中斷和線程機制,但包含了大部分最基本的功能。

   建立目標(biāo)平臺的RedBoot通常按以下步驟進行(以構(gòu)建S3C44b0的新平臺為例)。

   ①  復(fù)制eCos源碼中選定的參考平臺,根據(jù)需要對目錄及文件更名。更名的主要內(nèi)容有:新平臺的目錄名、組件定義文件(CDL)、內(nèi)存布局文件(MLT)、平臺初始化的源文件和頭文件
   ②  調(diào)整組件定義文件(CDL)選項。包括選項的名字、實時時鐘/計數(shù)器、CYGHWR_MEMORY_LAYOUT 變量、串口參數(shù)以及其他的一些選項。
   ③  在頂層ecos.db文件中加入所需要的包,并增加對目標(biāo)平臺的描述。在最初,該目標(biāo)平臺的入口可以只包含硬件抽象層包,其他硬件支持包以后再加入。經(jīng)過修改后,就可在eCos配置程序中選擇新的平臺進行配置。
   ④  修改include/pkgconf中的內(nèi)存布局(MLT)文件。按照新的硬件平臺內(nèi)存布局修改MLT文件。MLT文件對應(yīng)每種啟動類型有三個不同后綴的文件:.h文件以及.ldi文件和mlt文件。手工修改時只需修改.h文件和.ldi文件,并保證兩個文件同步修改。修改的主要內(nèi)容有ROM的起始地址、ROM的大小、RAM的起始地址和RAM的大小。
   ⑤  修改平臺的io宏定義。在include/plt_io.h文件中完成對平臺的各種IO宏定義,包括各種CPU的系統(tǒng)配置寄存器、內(nèi)存配置寄存器、串口配置寄存器、LCD配置寄存器、以太網(wǎng)配置寄存器等的I/O地址。
   ⑥  修改平臺的Cache代碼。在include/hal_cache.h文件中修改有關(guān)Cache的宏定義。在開發(fā)初期,最好先將Cache關(guān)閉,等移植穩(wěn)定后再打開。
   ⑦  實現(xiàn)簡單的串口驅(qū)動程序。串口的初始化、接收和發(fā)送在src/hal_diag.c文件完成。主要的函數(shù)如下:
  cyg_hal_plf_serial_init_channel(),完成對某個串口的具體初始化工作;
  cyg_hal_plf_serial_putc(),從串口發(fā)送一個字符;
  cyg_hal_plf_serial_getc(),從串口接收一個字符;
  cyg_hal_plf_serial_getc_nonblock(),以無阻塞的方式接收一個字符,即緩沖區(qū)中無數(shù)據(jù)時立即返回;
  cyg_hal_plf_serial_isr(),串口中斷服務(wù)程序;
  cyg_hal_plf_serial_init(),調(diào)用cyg_hal_plf_serial_init_channel()函數(shù)初始化各串口,并向內(nèi)核注冊串口中斷服務(wù)程序、串口的讀寫例程和配置例程。
   ⑧  修改或增加平臺初始化程序。平臺初始化在3個文件文件中完成:src/s3c44b0_misc.c、include/hal_platform_setup.h和include/hal_platform_ints.h。
  hal_platform_ints.h完成系統(tǒng)的中斷宏定義。在不同的平臺中設(shè)備數(shù)量和類型不同,中斷的譯碼方式也不一致,需要根據(jù)具體情況作出調(diào)整。
  hal_platform_setup.h主要完成系統(tǒng)硬件的初步配置,這里一般要在看門狗和中斷關(guān)閉后,配置系統(tǒng)時鐘頻率、ROM和RAM的初始化參數(shù)。
  s3c44b0_misc.c文件完成目標(biāo)板的進一步初始化、中斷處理、延時例程和操作系統(tǒng)時鐘設(shè)置。

  經(jīng)過以上修改,底層的平臺抽象層就基本完成了,這時可用eCos的配置工具生成RedBoot進行測試。

  RedBoot測試成功后,說明平臺已經(jīng)能正確完成初始化操作,且串口驅(qū)動也能正常工作,接著要完成中斷和Cache等測試工作??衫靡恍┒嗑€程的小程序測試,檢測時鐘配置是否正確,同時也檢測了中斷能否正常工作。

5  驅(qū)動程序設(shè)計

  平臺抽象層完成后,接著要完成系統(tǒng)的設(shè)備驅(qū)動程序。eCos設(shè)備驅(qū)動程序的中斷模塊分為三個層次:中斷服務(wù)程序ISR、中斷滯后服務(wù)程序DSR和中斷線程。ISR在響應(yīng)中斷時立即調(diào)用,DSR由ISR發(fā)出調(diào)用請求后調(diào)用,而中斷線程為驅(qū)動程序的客戶程序。

  硬件中斷在最短的時間內(nèi)交付給ISR處理。硬件抽象層對硬件中斷源進行譯碼并調(diào)用對應(yīng)的中斷ISR。ISR可以對硬件進行簡單的操作,應(yīng)使ISR的處理時間盡量短。當(dāng)ISR返回時,它可將自己的中斷滯后服務(wù)程序DSR放入操作系統(tǒng)的任務(wù)調(diào)度中,DSR可以在不妨礙調(diào)度器正常工作時安全運行。大多數(shù)情況下,DSR將在ISR執(zhí)行完成后立即運行。

  eCos設(shè)備驅(qū)動程序一般可分為三個部分,如圖2所示。


圖2

  eCos的所用設(shè)備驅(qū)動程序都使用設(shè)備表入口來描述。使用宏DEVTAB_ENTRY()可生成設(shè)備表入口。其格式為:

  DEVTAB_ENTRY(l, name, dep_name, handlers, init, lookup, priv)。

  l:設(shè)備表入口的“C”標(biāo)識符。
  name:該設(shè)備的“C”字符串名字,在搜索設(shè)備時用到。
  dep_name:對于一個層次設(shè)備,此參數(shù)是該設(shè)備下層設(shè)備的“C”字符串名字。
  handlers:I/O函數(shù)句柄指針,由宏DEVIO_TABLE實現(xiàn)的。
  init:當(dāng)eCos處于初始化階段時被調(diào)用的函數(shù),該函數(shù)可以進行查找設(shè)備,對硬件進行設(shè)置等操作。
  lookup:當(dāng)調(diào)用cyg_io_lookup()函數(shù)對該設(shè)備進行操作時調(diào)用的函數(shù)。
  priv:該設(shè)備驅(qū)動程序所需的專用數(shù)據(jù)。
  設(shè)備入口中的句柄handlers包含了一組設(shè)備驅(qū)動程序接口函數(shù),是設(shè)備函數(shù)表DEVIO_TAB的指針,DEVIO_TAB包含了一組函數(shù)的指針。設(shè)備I/O函數(shù)表通過DEVIO_TAB宏來定義,格式如下:
  DEVIO_TABLE(l, write, read, get_config, set_config)。
  l:改表的“C”標(biāo)識符,即在DEVTAB_ENTRY中的handlers。
  write:實現(xiàn)向設(shè)備傳送數(shù)據(jù)。
  read:實現(xiàn)從設(shè)備讀取數(shù)據(jù)。
  get_config:實現(xiàn)讀取設(shè)備配置信息。
  set_config:實現(xiàn)對設(shè)備的配置操作。
  在eCos的初始化引導(dǎo)過程中,對系統(tǒng)中的所有設(shè)備調(diào)用其相應(yīng)的init()函數(shù)(即DEVTAB_ENTRY宏注冊的初始化函數(shù)),所有對設(shè)備的I/O操作通過handlers完成。
  設(shè)備驅(qū)動程序包含如下內(nèi)容(xxx:表示某種設(shè)備)。

  ◆ 用宏定義DEVIO_TABLE設(shè)備I/O函數(shù)表。
DEVIO_TABLE(xxx_handlers, // I/O函數(shù)句柄指針
      xxx_write, // 寫函數(shù)
      xxx_read, // 讀函數(shù)
      xxx_get_config, // 讀配置
      xxx_set_config)// 設(shè)置配置
  ◆ 用宏定義DEVTAB_ENTRY注冊設(shè)備入口。
DEVTAB_ENTRY(xxx_device, // 設(shè)備入口名
      “/dev/xxx”, // 設(shè)備名,查找設(shè)備時用到
      NULL,// 需用到的底層驅(qū)動,這里為空
      xxx_handles, // I/O函數(shù)句柄指針
      xxx_init, // 設(shè)備初始化函數(shù)
      xxx_lookup, // 設(shè)備搜索
      xxx_priv)// 設(shè)備專用數(shù)據(jù)指針
  ◆ 完成初始化函數(shù)xxx_init。完成對硬件的初始化,調(diào)用函數(shù)cyg_drv_interrupt_create建立中斷對象,然后調(diào)用函數(shù)cyg_drv_interrupt_attach完成中斷與硬件向量的連接。
  ◆ 完成中斷服務(wù)程序。
  ◆ 完成中斷滯后服務(wù)程序。
  ◆ 若有中斷線程,則完成中斷線程。
  ◆ 完成設(shè)備搜索函數(shù)xxx_lookup。
  ◆ 完成寫函數(shù)xxx_write。
  ◆ 完成讀函數(shù)xxx_read。
  ◆ 完成讀配置函數(shù)x xx_get_config。
  ◆ 完成設(shè)置配置函數(shù)xxx_set_config。

結(jié)論

  經(jīng)過硬件平臺的移植和驅(qū)動程序的編寫,就可在此基礎(chǔ)上開發(fā)各種應(yīng)用程序了。

  eCos具有非常優(yōu)秀的可移植性;使用多任務(wù)搶占機制,具有最小的中斷延遲;支持嵌入式系統(tǒng)所需的所有同步原語,提供包括設(shè)備驅(qū)動程序、內(nèi)存管理、例外處理、標(biāo)準(zhǔn)C和數(shù)學(xué)庫;提供各種開發(fā)嵌入式應(yīng)用所需的工具,是開發(fā)嵌入式系統(tǒng)的強有力工具。

參考文獻

1  eCos User?s Guide. Red Hat Inc. & eCosCentric Ltd, 2003
2  eCos Tutorial. Red Hat Inc, 2002
3  eCos Reference Manual. Red Hat Inc & eCosCentric Ltd, 2003
4  Bart Veer, John Dallaway. The eCos Component Writer?s Guide. Red Hat Inc, 2003
5  Antony J. Massa, Embedded Software Development with eCos. Prentice Hall PTR, 2002

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉