RTOS裝置驅動向嵌人式Linux的移植(轉)

BSDLite發表於2007-08-16
RTOS裝置驅動向嵌人式Linux的移植(轉)[@more@]  Linux暴風雨般佔領了嵌入式系統市場。分析家指出,大約有1/3到1/2的32/64位新的嵌入式系統設計採用了Linux。嵌入式 Linux 已經在很多應用領域顯示出優勢,比如SOHO家庭網路和成像/多功能外設。在(NAS/SAN)儲存,家庭數字娛樂(HDTV/PVR/DVR/STB),和手持裝置/無線裝置,特別是數字行動電話更獲得大幅度發展。

  嵌入式Linux新應用不會憑空從開發者的頭腦中冒出來,大部分專案都是由成千上萬行,甚至數百萬行的程式碼組成。成千上百的嵌入式專案已經成功地將現有的其它平臺的程式碼移植到Linux下,比如Wind River VxWorks 和 pSOS, VRTX, Nucleus 和其它RTOS。這些移植工作有著重要的價值和現實意義。

  到目前為止,大多數關於移植已有的RTOS應用到嵌入式Linux的文獻,關注RTOS 介面(API)、任務、排程模式以及怎樣將他們對映到相應得使用者空間去。同樣重要的是,在I/O呼叫密集的嵌入式程式中如何將RTOS的硬體介面程式碼移植到更加規範的Linux裝置驅動程式中去。

  本文將概述幾種常用的經常出現於現有嵌入式應用中的記憶體對映I/O方法。它們涵蓋的範圍從對中斷服務例程的特殊使用及使用者執行緒對硬體訪問到出現於有些ROTS中的半規範化驅動程式模型。這對於移植RTOS 程式碼到規範化的Linux裝置啟動程式具有一定啟發作用,並且介紹了一些移植方法。特別地,本文會重點討論RTOS和Linux中的記憶體對映,基於I/O排程佇列的移植,將RTOS I/O重定義到Linux下的驅動程式和守護程式裡。

  RTOS I/O 概念

  “不規範”是描述大多數RTOS系統I/O的最佳詞語。多數RTOS是針對較早的無MMU的CPU而設計,所以忽略了記憶體管理部分,即使當MMU問世後也是這樣:不區分實體地址和邏輯地址。大多數 RTOS還全部執行在特權模式,雖然表面上看來是增強了效能。全部的RTOS 應用和系統程式碼都能夠訪問整個地址空間、記憶體對映過的裝置、以及其他I/O操作。這樣,即使存在差別,也是很難把RTOS應用程式程式碼同驅動程式程式碼區分開來。

  不規範的結構導致了I/O實現的特殊性。在很多情況下,缺乏裝置驅動程式模型的認同。根據這種無層次的特性,回顧一下基於RTOS軟體中使用的一些重要概念和習慣用法非常有指導意義。

  內嵌的記憶體訪問

  上個世紀八十年代中期商業化的RTOS產品中,多數嵌入式軟體都有一個對執行時間有嚴格需求的,採用I/O查詢和中斷服務例程的大迴圈。開發人員在專案採用RTOS和執行程式,主要為了加強並行性和多工同步,繞開其它有礙實現該目標的程式結構。這樣,即使RTOS提供了I/O 呼叫形式化方法,嵌入式程式設計師繼續使用直接的I/O操作:
CODE:
#define DATA_REGISTER 0xF00000F5
char getchar(void) {
return (*((char *) DATA_REGISTER)); /* read from port */
}
void putchar(char c) {
*((char *) DATA_REGISTER) = c; /* write to port */
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-960586/,如需轉載,請註明出處,否則將追究法律責任。

RTOS裝置驅動向嵌人式Linux的移植(轉)
請登入後發表評論 登入
全部評論

相關文章