Linux as an Embedded Operating System Linux有用作嵌入式操作系統的潛力嗎?本文討論了Linux的特點
健壯 性
局限以及最重要的一點
它的實時特性
近年來
PC硬件使用的增加是高端嵌入式系統最重要的發展之一
這種 趨勢造成高端系統硬件造價的大大跌落
從而使那些以前由於使用非P C結構的嵌入式硬件價格過高而不能做的項目成為可行的
但是嵌入式 PC平台上可選擇的軟件並不像硬件那樣有誘惑力
你可以選擇DOS
有 眾所周知的局限性
微軟Windows
缺乏實時性能
或者某種高端實時 操作系統
昂貴
專用
大多是不可移植的
Linux操作系統提供了另 外的有吸引力的選擇
並且沒有上面那些缺陷
Linux先前只是狂熱的 Unix迷們閒時專門在台式電腦上使用
後來發展成為必須認真對待的高 級的
穩定的操作系統
最近的發展之一是引入了實時性能
從而使L inux完成了重要的轉變
即從愛好者的玩具成為適合嵌入式系統設計者 的有價值的工具
當然
其實時性能還沒有那些高端RTOS那麼高級
並 且Linux永遠不會適合需要最小化RAM和ROM的系統
但是
對很多應用 來說
Linux的優勢勝過了不足
現在
大家都知道在嵌入式系統中使用PC硬件的好處
與很多專為嵌入 式市場設計的硬件比較
PC硬件是大規模生產的
容易獲得並且便宜
為VME總線設計的接口板價格是PC總線的兩倍多
比如模擬和數字I/O板
網絡接口
圖像采集與處理板等
隨著高性能PCI總線應用的增加
吞吐量不再是影響使用PC平台的問題
但是操作系統功能上已經發生革命性的變化
在要求硬件價格降低的同 時
高端嵌入式系統要求更多高級的功能
如圖形用戶界面和網絡支持
很多高端RTOS供應商已經提供了這些功能
一般是作為花更高價錢才 能得到的可選件
微軟Windows也有這些功能
卻不具備大多數嵌入式 系統要求的實時性能
也許有人想以DOS為基礎用單獨的第三方工具拼 湊一個系統
但這種努力將是白費並且不存在對這種系統的技術支持
現在需要的是一個便宜
成熟並且提供高端嵌入式系統所必須特性的操 作系統
因此
Linux操作系統近來開始吸引大家的注意
許多台式PC用戶被它 的特點和健壯性所吸引
並且獲得它只需支付通過FTP下載的網絡費用
Linux帶有Unix用戶熟悉的完善的開發工具
幾乎所有的Unix系統和 應用軟件都已移植到了Linux上
Linux還提供了TCP/IP網絡協議以及I nternet客戶和服務器軟件
還有可選擇多種窗口管理器的X Windows
C
C++
Java和其他語言的編譯器也可得到
用戶會發現這些比Windo ws提供的更成熟
更完善
更易於使用
許多公司至少會有一位Linux 的熱衷者
當出現用Windows解決不了的問題時(比如設置一台PC為撥 號服務器)會說
瞧
我們要是用Linux
現在
討論Bill Gates是否有所擔心是有些雜志的一個話題
重要的是 不屬於任何一家公司的Linux開始被台式電腦用戶接受
其中許多人並 不能被認為是電腦迷
這一方面是因為Linux的成熟
另一方面也因為 這幾年Internet的盛行
Linux用戶遇到問題時可以通過Internet新聞 組和郵件列表向網上成千上萬的在線用戶請教
你遇到的問題別人以前 肯定碰到過
一般他們都樂於幫忙
根據我的經驗
通常使用網絡資源 能比依賴RTOS技術支持部門更快地解決問題
你可能需要從十幾條新聞 組其他成員回答的相關信息中搜尋
但至少有一個回答應該是有用的
相比較而言
你從技術支持部門僅得到一個回答
如果是錯的
你不得 不重新開始整個過程
另外
致力於提供Linux支持的公司也已經出現
給那些覺得傳統的技術支持手段更舒服的用戶一個選擇
並且所有L inux是提供源代碼的
這使最困難的問題也有辦法解決
某些嵌入式系統設計者會發現Linux本來的樣子就很有用
對於沒有實 時要求的應用
或者有實時要求但可以用一定的硬件或協處理器滿足的 應用
Linux提供了Windows和DOS之外的選擇
但是那樣的應用幾乎沒 有
因此
用Linux實現一個實時操作系統才是真正需要的
並且為了 用它實現高端嵌入式應用已經做了充分的工作
總的來說
有兩條途徑 來實現實時Linux
在此稱之為POSIX路線和低層路線
POSIX和Linux POSIX是標准化類Unix操作系統必須具有的特征和接口的運動
POSIX的 思想是為了促進為Unix編寫的軟件的可移植性
使Unix程序員的工作更 容易
有些實時性的擴展
象POSIX
b或IEEE
b已經加入到標准 中
這些擴展中包括一些工具
比如信號燈
內存鎖定
時鐘和計數器
消息隊列以及優先級搶先調度
以POSIX為基礎來標准化實時操作系統已經受到指責
這個標准又大又 笨
包含了許多適合台式Unix工作站但無助於嵌入式系統的特征
因而 顯得很臃腫
標准制定群體被工作站制造商控制
他們不願對RTOS供應 商和用戶讓步
還有
POSIX系統調用反映了Unix系統調用的復雜和笨 重
在VxWorks或pSOS+中僅需一兩個調用即可完成的操作可能需要十幾 個POSIX調用
Unix程序員已經習慣了這種麻煩事
但是嵌入式系統程 序員卻覺得很難受
許多Linux開發者正在為了在Linux中實現POSIX
b的特征工作
這個活 動已經初見成效並且仍在繼續
POSIX內存鎖定工具和決定調度算法的 函數已經實現
另外
計數器函數和POSIX
b信號仍未完成
也許最糟 糕的是
對任何真正的RTOS都至關重要的信號燈和消息隊列也未實現
定義於POSIX
c(或IEEE
C)中的POSIX線程保證會為POSIX路線 的Linux開發實現
一個進程內可以有多個線程
共享相同的地址空間
這很符合我們熟悉的嵌入式系統中任務的概念
Linux已經部分實現 了POSIX線程
雖然POSIX路線對實現一個實時Linux做了保證
當前和可預見的將來只 有
軟
實時的應用能用POSIX
b函數來實現
移植POSIX
b函數到L inux上時要面對的根本問題是Linux的內核是不可搶先的
因此
要想 不對內核大動干戈而實現
硬
實時特性恐怕是不可能的
通向實時Linux的低層路線 Low
level Approach to Real
time Linux
比POSIX路線更有意思的是實現硬實時Linux的努力
其中最有前途的要 數新墨西哥技術學院的實時Linux(RT
Linux)項目
注意到Linux是一 個為台式電腦用戶設計的操作系統
研究者們斷定
要想把實時功能移 植到為分時設計的OS上是不會有好結果的
取而代之的是
他們在操作 系統的下面實現了一個簡單的實時內核
而Linux本身也僅作為那個內 核上的一個任務來運行
Linux運行的優先級最低
隨時可以被更高優 先級的任務搶先
RT
Linux的設計理念是
對Linux作最小的改動
僅提供為了實現實時 應用必不可少的東西
這樣就使RT
Linux比較容易移植到新版本的Lin ux上
同時
RT
Linux依賴於Linux來提供所需的幾乎所有服務
而RT
Linux僅提供低層任務創建
安裝中斷服務例程
並為低層任務
ISR 和Linux進程之間的通信排隊
這種設計的結果之一是
一個RT
Linux應用可以看作有兩個域
實時和 非實時
放在實時域的函數能滿足其實時要求
但是它們必須比較簡單
因為可用資源很受限制
另一方面
非實時功能可以利用整個Linux 資源
但不能有任何實時要求
兩個域之間的通信工具已提供
但是使 用RT
Linux之前
嵌入式系統設計者必須確保所有需要實現的功能適合 兩個域之一
使用RT
Linux並不能變戲法似的使已經存在的Linux功能 具有實時性
例如
假設設計者有一個串口的Linux驅動程序
當串口 接收一個字節序列之後
在一個固定時間內
由實時任務打開並口輸出 一行
這個驅動程序不能用
因為在非實時域內你不知道什麼時候串口 驅動程序會喚醒實時任務驅動並口完成工作
因此
串口和並口驅動都 必須在實時域內
這就要求重新設計串口驅動程序
RT
Linux的任務處理工具是基本的
rt_task_init()用來創建並開始一 個任務
能指定堆棧的大小和優先級
Linux本身以一個最低優先級的 實時任務運行
rt_task_make_periodic()以一定間隔周期性地設置任 務運行
rt_task_wait()阻塞任務
使用簡單的搶先調度運行任務
實時任務與Linux進程之間通信的主要方法是FIFO
rtf_create()創建 一個一定大小的FIFO
用rtf_put()將數據送入FIFO
如果FIFO滿則返 回一個錯誤
類似地
rtf_get()從FIFO中取出數據
如果FIFO空則返 回一個錯誤
FIFO最顯著的應用是數據流
例如
在一個數據采集應用中
可以用r t_task_init()和rt_task_make_periodic()設置實時任務使其以固定的 間隔從I/O板采樣
這個任務用rtf_put()將數據發送到Linux進程
該 Linux進程應該是一個循環
不斷從FIFO讀出數據
也許還要寫數據到 磁盤
或者通過網絡發送
或者顯示在一個X窗口中
FIFO象一個緩沖
因此Linux進程不必非有實時性不可
實現數據流系統看起來成為RT
Linux設計者的主要動機
但是FIFO機制 提供了一個實現信號燈的很好方法
兩態信號燈可以通過創建一個大小 為
的FIFO來實現
V操作即為rtf_put()
數據內容無所謂
同時忽略 返回的錯誤
P操作為rtf_get()
計數信號燈可以通過創建大小足夠容 納所期望V操作個數的FIFO簡單地實現
由此可見
FIFO機制提供了實 時應用中任務同步所需的大部分功能
當前的實現在RTOS用戶習慣的某 些功能上仍有欠缺
比如優先級禁止(防止優先級反轉)和任務安全刪 除
但是仔細設計幾乎總能避免這些問題
此外
雖然FIFO操作可以在 沒有數據(讀FIFO)或沒有空間(寫FIFO)時阻塞
語法卻相當復雜
阻塞能力看來不是設計的重點
然而
至少有一個提供FIFO阻塞操作簡 單語法的努力正在進行
同時還實現了阻塞超時
這是許多嵌入式應用 的重要特征
RT
Linux簡單
開放的設計允許用戶相當容易地實現類似 的附加功能
RT
Linux的一個有趣的方面是設計者使Linux內核
From:http://tw.wingwit.com/Article/program/Oracle/201311/17916.html