<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 如何構建eCos嵌入式系統

如何構建eCos嵌入式系統

作者: 時(shí)間:2007-01-19 來(lái)源:網(wǎng)絡(luò ) 收藏

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

引言

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

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

1 eCos的層次結構

  eCos采用模塊化設計,由不同的功能組件構成,eCos系統的層次結構如圖1所示。

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

2 eCos系統 

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

3 硬件抽象層的移植

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

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

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


圖1

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

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

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

4 平臺抽象層的移植

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

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

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

   建立目標平臺的RedBoot通常按以下步驟進(jìn)行(以構建S3C44b0的新平臺為例)。

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

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

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

5 驅動(dòng)程序設計

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

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

  eCos設備驅動(dòng)程序一般可分為三個(gè)部分,如圖2所示。


圖2

  eCos的所用設備驅動(dòng)程序都使用設備表入口來(lái)描述。使用宏DEVTAB_ENTRY()可生成設備表入口。其格式為:

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

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

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

結論

  經(jīng)過(guò)硬件平臺的移植和驅動(dòng)程序的編寫(xiě),就可在此基礎上開(kāi)發(fā)各種應用程序了。

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

參考文獻

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

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


關(guān)鍵詞: 系統 嵌入式 eCos 構建 如何

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>