熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Linux用作嵌入式操作系統

2013-11-13 16:09:44  來源: Oracle 

  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 CC++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程序員的工作更 容易有些實時性的擴展象POSIXb或IEEE b已經加入到標准 中這些擴展中包括一些工具比如信號燈內存鎖定時鐘和計數器 消息隊列以及優先級搶先調度
  
   以POSIX為基礎來標准化實時操作系統已經受到指責這個標准又大又 笨包含了許多適合台式Unix工作站但無助於嵌入式系統的特征因而 顯得很臃腫標准制定群體被工作站制造商控制他們不願對RTOS供應 商和用戶讓步還有POSIX系統調用反映了Unix系統調用的復雜和笨 重在VxWorks或pSOS+中僅需一兩個調用即可完成的操作可能需要十幾 個POSIX調用Unix程序員已經習慣了這種麻煩事但是嵌入式系統程 序員卻覺得很難受
  
   許多Linux開發者正在為了在Linux中實現POSIXb的特征工作這個活 動已經初見成效並且仍在繼續POSIX內存鎖定工具和決定調度算法的 函數已經實現另外計數器函數和POSIXb信號仍未完成也許最糟 糕的是對任何真正的RTOS都至關重要的信號燈和消息隊列也未實現
  
   定義於POSIXc(或IEEE C)中的POSIX線程保證會為POSIX路線 的Linux開發實現一個進程內可以有多個線程共享相同的地址空間 這很符合我們熟悉的嵌入式系統中任務的概念Linux已經部分實現 了POSIX線程
  
   雖然POSIX路線對實現一個實時Linux做了保證當前和可預見的將來只 有實時的應用能用POSIXb函數來實現移植POSIXb函數到L inux上時要面對的根本問題是Linux的內核是不可搶先的因此要想 不對內核大動干戈而實現實時特性恐怕是不可能的 通向實時Linux的低層路線 Lowlevel Approach to Realtime Linux
  
   比POSIX路線更有意思的是實現硬實時Linux的努力其中最有前途的要 數新墨西哥技術學院的實時Linux(RTLinux)項目注意到Linux是一 個為台式電腦用戶設計的操作系統研究者們斷定要想把實時功能移 植到為分時設計的OS上是不會有好結果的取而代之的是他們在操作 系統的下面實現了一個簡單的實時內核而Linux本身也僅作為那個內 核上的一個任務來運行Linux運行的優先級最低隨時可以被更高優 先級的任務搶先
  
   RTLinux的設計理念是對Linux作最小的改動僅提供為了實現實時 應用必不可少的東西這樣就使RTLinux比較容易移植到新版本的Lin ux上同時RTLinux依賴於Linux來提供所需的幾乎所有服務而RT Linux僅提供低層任務創建安裝中斷服務例程並為低層任務ISR 和Linux進程之間的通信排隊
  
   這種設計的結果之一是一個RTLinux應用可以看作有兩個域實時和 非實時放在實時域的函數能滿足其實時要求但是它們必須比較簡單 因為可用資源很受限制另一方面非實時功能可以利用整個Linux 資源但不能有任何實時要求兩個域之間的通信工具已提供但是使 用RTLinux之前嵌入式系統設計者必須確保所有需要實現的功能適合 兩個域之一使用RTLinux並不能變戲法似的使已經存在的Linux功能 具有實時性例如假設設計者有一個串口的Linux驅動程序當串口 接收一個字節序列之後在一個固定時間內由實時任務打開並口輸出 一行這個驅動程序不能用因為在非實時域內你不知道什麼時候串口 驅動程序會喚醒實時任務驅動並口完成工作因此串口和並口驅動都 必須在實時域內這就要求重新設計串口驅動程序
  
   RTLinux的任務處理工具是基本的rt_task_init()用來創建並開始一 個任務能指定堆棧的大小和優先級Linux本身以一個最低優先級的 實時任務運行rt_task_make_periodic()以一定間隔周期性地設置任 務運行rt_task_wait()阻塞任務使用簡單的搶先調度運行任務 實時任務與Linux進程之間通信的主要方法是FIFOrtf_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進程不必非有實時性不可 實現數據流系統看起來成為RTLinux設計者的主要動機但是FIFO機制 提供了一個實現信號燈的很好方法兩態信號燈可以通過創建一個大小 為的FIFO來實現V操作即為rtf_put()數據內容無所謂同時忽略 返回的錯誤P操作為rtf_get()計數信號燈可以通過創建大小足夠容 納所期望V操作個數的FIFO簡單地實現由此可見FIFO機制提供了實 時應用中任務同步所需的大部分功能當前的實現在RTOS用戶習慣的某 些功能上仍有欠缺比如優先級禁止(防止優先級反轉)和任務安全刪 除但是仔細設計幾乎總能避免這些問題此外雖然FIFO操作可以在 沒有數據(讀FIFO)或沒有空間(寫FIFO)時阻塞語法卻相當復雜 阻塞能力看來不是設計的重點然而至少有一個提供FIFO阻塞操作簡 單語法的努力正在進行同時還實現了阻塞超時這是許多嵌入式應用 的重要特征RTLinux簡單開放的設計允許用戶相當容易地實現類似 的附加功能
  
   RTLinux的一個有趣的方面是設計者使Linux內核
From:http://tw.wingwit.com/Article/program/Oracle/201311/17916.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.