向嵌入式Linux移植實時裝置驅動程式(轉)
向嵌入式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操作:
新的嵌入式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/,如需轉載,請註明出處,否則將追究法律責任。
請登入後發表評論
登入
全部評論
|
相關文章
- RTOS裝置驅動向嵌人式Linux的移植(轉)Linux
- Linux裝置驅動程式 (轉)Linux
- LINUX下的裝置驅動程式 (轉)Linux
- Linux裝置驅動程式學習----1.裝置驅動程式簡介Linux
- Linux裝置驅動之字元裝置驅動Linux字元
- ArmSoM系列板卡 嵌入式Linux驅動開發實戰指南 之 字元裝置驅動Linux字元
- Linux驅動實踐:如何編寫【 GPIO 】裝置的驅動程式?Linux
- 嵌入式Linux驅動筆記(十六)------裝置驅動模型(kobject、kset、ktype)Linux筆記模型Object
- 在Linux中,什麼是裝置驅動程式?如何安裝和解除安裝裝置驅動程式?Linux
- 深入淺出:Linux裝置驅動之字元裝置驅動Linux字元
- 乾坤合一:Linux裝置驅動之塊裝置驅動Linux
- 嵌入式Linux中的LED驅動控制(裝置樹方式)Linux
- 深入淺出分析Linux裝置驅動程式中斷(轉)Linux
- Linux塊裝置驅動Linux
- 嵌入式Linux中platform平臺裝置模型的框架(實現LED驅動)LinuxPlatform模型框架
- 蛻變成蝶:Linux裝置驅動之字元裝置驅動Linux字元
- 蛻變成蝶~Linux裝置驅動之字元裝置驅動Linux字元
- 嵌入式Linux驅動學習筆記(十六)------裝置驅動模型(kobject、kset、ktype)Linux筆記模型Object
- 嵌入式Linux中的LED驅動控制(裝置樹方式)(續)Linux
- Linux裝置驅動程式設計之阻塞與非阻塞(轉)Linux程式設計
- 開發Linux系統裝置驅動程式並不難(轉)Linux
- Linux裝置驅動之中斷與定時器Linux定時器
- 用 Delphi 編寫 VxD 裝置驅動程式(轉) (轉)
- 虛擬裝置驅動程式的設計與實現 (轉)
- SCO UNIX 下裝置驅動程式開發 (轉)
- SCO UNIX 下裝置驅動程式開發(轉)
- 字元裝置驅動 —— 字元裝置驅動框架字元框架
- Linux驅動實踐:你知道【字元裝置驅動程式】的兩種寫法嗎?Linux字元
- 【linux】驅動-7-平臺裝置驅動Linux
- Linux下的硬體驅動——USB裝置(上)(驅動配置部分)(轉)Linux
- 嵌入式Linux驅動筆記(九)------dts裝置樹在2440使用Linux筆記
- platform 裝置驅動實驗Platform
- 乾坤合一:Linux裝置驅動之USB主機和裝置驅動Linux
- 使用Windows 95虛擬裝置驅動程式(VxD) (轉)Windows
- UNIX下裝置驅動程式的基本結構(轉)
- linux3.4.2核心-LCD驅動程式的移植Linux
- 【linux】驅動-6-匯流排-裝置-驅動Linux
- Linux下的硬體驅動——USB裝置(下)(驅動開發部分)(轉)Linux