向嵌入式Linux移植實時裝置驅動程式(轉)

ba發表於2007-08-16
向嵌入式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/10617731/viewspace-960584/,如需轉載,請註明出處,否則將追究法律責任。

向嵌入式Linux移植實時裝置驅動程式(轉)
請登入後發表評論 登入
全部評論

相關文章