eCos精典概要

转载地址:http://www.devbone.com/LeadBBS/Announce/Announce.asp?BoardID=100&ID=2247

eCos 簡介
介紹redboot 前,先介紹eCos 這套針對嵌入式系統所設計的即時作業系統。
eCos(Embedded Configurable Operating System),是個開放原碼的軟體,開發者
可用GNU 開放源碼發展工具(GCC、GDB 等)在其上的開發自己的應用程式,
其專利受eCos license 所保護,這是一個GPL license 的修改版,其准許開發者在
其上開發的應用程式(eCos 以外自行撰寫的部分)可以不用跟著GPL 一起散佈。
應用程式開發者可免費的取得其完整的源碼(buyout-free),並針對其作任意的
修改與在其上開發自己的應用程式並散佈,唯一的限制只是若有修改到eCos 本
身,其需將修改的源碼回報給eCos 開發小組。當開發者將其當為產品時,也不
需支付版稅(royalty-free)。其已直接支援了時下絕大部分的硬體,可在eCos 官
方網站[2]上找到支援列表。
2.2 eCos 功能概觀
高可設定性
eCos 最大的特色就是字面上C 表示的「高可設定性」。eCos 可以讓開發者
像在玩積木般地自由選擇其執行期的元件,應用程式開發者可以針對自己的應用
程式來設定一個對其最小的作業系統環境,這跟以往應用程式就是跑在一個完整
的作業系統上本質上不同,在嵌入式系統資源與記憶體寸土寸金的環境上,這樣
的開發方式是很重要的。在以往的嵌入式開發方式都是自己手工的將作業系統作
縮減[1],對經驗不足或對該作業系統不夠熟悉的人將會花去許多時間,或是根
本很難將作業系統拆開,但在eCos 上,由於設計之初就是朝向可設定的原則,
各種元件都遵守著模組化的開發方式,而應用程式開發者只要使用eCos 所附的
設定化工具(圖2),即可輕鬆簡單的對eCos 元件作量身打造,也不需對其內部
實作有所瞭解。
圖2 eCos 設定工具
即時作業系統的核心並提供標準系統API
eCos 的核心支援一般OS 常見的項目如裝置驅動程式(Device Driver)、記
憶體管理(Memory managemant)、例外處理(exception handling)、中斷處理
(exception handling)、執行緒的支援(thread support)、計時器(Timer)、計數
器(Counter),對於即時作業系統的支援如完全優先(full preemptability)、最小
中斷延遲(minimal interrupt latencies )、多樣的同步方法(synchronization
primitive)、可自訂的排程原則(schedule policies)。此外也支援POSIX 等作業系
統的標準API 及ANSI C 與常用的數學函式。
支援常用的周邊及通訊協定組( networking stacks)
支援以太網路卡,串列埠,USB slave(被動式USB)等常用周邊。並支援
一般常用的通訊協定組如IP、IPV6、ICMP、UDP、TCP、SNMP、HTTP、TFTP、
FTP 等。網路設定部分,可將靜態IP 寫死在程式中,或是透過DHCP 自己抓取
IP。 GDB 除錯支援
可支援主控端使用GDB 遠端透過序列埠或是以太網路對應用程式除錯。
2.3 eCos 上開發的應用程式架構
圖3 中File system 指的是對檔案系統如ext2 等的支援,library 是上節所提
包括POSIX,ANSI C 等的函式庫。這張圖,由上到下,表示從高層到底層的eCos
架構。最底層的是我們的硬體,在硬體上面有HAL 與裝置驅動程式,而我們大
部分會利用eCos 設定工具去設定中間kernel、networking stack、library 那層(OS
層),只留下我們需要的部分。最上層的應用程式就是我們自行撰寫的部分,透
過中間OS 層的輔助來達成我們的目的。由這張圖,我們可以看出,Redboot 是
一個架構在eCos HAL 與Device Driver 上的一套應用程式。
其中與硬體最關係密切的就
是HAL,可以用「最接近硬體的
軟體」來形容,HAL 將所有與硬
體相關的地方對外隱藏在裡面。
針對不同的硬體時,只需抽換掉
HAL,換上針對新硬體而撰寫的
HAL 即可。下節將以x86 為例,
說明eCos HAL 在開機後作了哪些動作。
圖3 eCos 應用程式架構圖
2.4 eCos HAL
表1,以x86 的平台為例,說明eCos HAL 在開機時,會進行哪些細部動作。這
個起始化的動作的主要目的是要初始CPU、RAM、週邊,使在HAL 之後的程式
可正確無誤的執行。。 步驟名稱 解釋
1. CPU INIT 初始CPU,這裡主要是對一些與CPU 有關的暫存器作一些
處理。
2. SMP INIT 對SMP(symmetric multiprocessor 對稱式多處理器)的支
援,在某些平台這部分會拿掉。
3. DIAG INIT 作定義一些診斷系統目前狀態用的巨集。
4. MMU INIT 對記憶體管理所做的初始化,主要是為了處理虛擬記憶體
位置與真實記憶體位置間的轉換。
5. MEMC INIT 在x86 系統中會開啟A20 gate,這個與x86 記憶體定址有
悠久歷史淵源的東西。
6. INTC INIT 將所有的中斷預設為關閉。
7. CACHE INIT 將CPU 的快取系統作初始。
8. TIMER INIT 初始系統的計時器。
9. IDT INIT 設定IDT(Interrupt Descriptor Table 中斷描述表格)以初
始中斷堆疊區段,以後有中斷發生時就會使用到這些區段。
10. MON INIT 當程式是放在ROM 中被執行時,這個函式會去確定所有
例外情形的例外處理器是否皆已裝設。
11. FPU INIT 初始許多與浮點運算單元相關的暫存器。
12. BSS INIT 會去清除記憶體中的BSS 區段,BSS 會放所有被宣告成靜
態(static)的變數。
13. ROM INIT 在這邊會檢查程式本身是否被放在ROM 上被執行,如果
是的話需要將程式中的資料區段拷貝到RAM 上。
14. STACK INIT 設定堆疊使我們可以call c 函式。在這個步驟之前執行的
全是組合語言,這步過後就可以開始呼叫C 的函式了。
15. PLATFROM
INIT
初始virtual vector table,virtual vector 是使用在eCos 上用
來指向許多資料與函式的指標。
16. GDB_STUB
INIT
如果需要有與主控端的GDB 作除錯的動作的話,就會安裝
與除錯相關的trap 與初始相關硬體。
17. GOTO
PROGRAM
總算HAL 的初始硬體的部分大功告成,這時已經具備足夠
的環境給Redboot 此類應用程式了。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值