RTOS裝置驅動向嵌人式Linux的移植(轉)
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操作:
嵌入式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/,如需轉載,請註明出處,否則將追究法律責任。
請登入後發表評論
登入
全部評論
|
相關文章
- 【linux】驅動-7-平臺裝置驅動Linux
- 嵌入式Linux中的LED驅動控制(裝置樹方式)Linux
- Linux裝置驅動程式學習----1.裝置驅動程式簡介Linux
- linux 裝置驅動基本概念Linux
- 【linux】驅動-6-匯流排-裝置-驅動Linux
- 字元裝置驅動 —— 字元裝置驅動框架字元框架
- 嵌入式Linux中的LED驅動控制(裝置樹方式)(續)Linux
- Linux驅動實踐:如何編寫【 GPIO 】裝置的驅動程式?Linux
- linux裝置驅動編寫入門Linux
- Linux驅動開發筆記(四):裝置驅動介紹、熟悉雜項裝置驅動和ubuntu開發雜項裝置DemoLinux筆記Ubuntu
- 在Linux中,什麼是裝置驅動程式?如何安裝和解除安裝裝置驅動程式?Linux
- linux3.4.2核心-LCD驅動程式的移植Linux
- ArmSoM系列板卡 嵌入式Linux驅動開發實戰指南 之 字元裝置驅動Linux字元
- 【Linux SPI】RFID RC522 裝置驅動Linux
- 【linux】驅動-9-裝置樹外掛Linux
- 嵌入式Linux中的LED驅動控制(使用多個次裝置號)Linux
- Linux驅動之裝置樹的基礎知識Linux
- 如何編寫一個簡單的Linux驅動(三)——完善裝置驅動Linux
- 嵌入式Linux中platform平臺裝置模型的框架(實現LED驅動)LinuxPlatform模型框架
- linux核心原始碼閱讀-塊裝置驅動Linux原始碼
- linux驅動之獲取裝置樹資訊Linux
- Linux驅動之I2C匯流排裝置以及驅動Linux
- Linux驅動實踐:你知道【字元裝置驅動程式】的兩種寫法嗎?Linux字元
- LED字元裝置驅動字元
- 【Linux 中斷】紅外接收器裝置驅動Linux
- 未來蘋果裝置將移植 Linux 系統蘋果Linux
- 【Linux裝置驅動】–0x00簡單的模組Linux
- 驅動Driver-MISC雜項驅動裝置
- Linux裝置驅動開發詳解:基於Linux4.0核心Linux
- 【linux】驅動-8-一文解決裝置樹Linux
- platform 裝置驅動實驗Platform
- 字元驅動裝置踩坑字元
- 無作業系統時的裝置驅動和有作業系統時的裝置驅動作業系統
- SPI轉can晶片CSM300詳解以及Linux驅動移植除錯筆記晶片Linux除錯筆記
- 裝置樹下的 LED 驅動實驗
- liunx驅動之字元裝置的註冊字元
- 05_雜項裝置驅動
- mtd裝置驅動(待學習)
- win10驅動未知裝置怎麼辦_win10裝置管理器驅動未知裝置處理方法Win10