《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 向嵌入式Linux移植實時設備驅動程序
向嵌入式Linux移植實時設備驅動程序
摘要: 本文將縱覽幾種常用的內存映射I/O方法,它們經常出現于舊的嵌入式應用中。它們涵蓋的范圍,包括從對中斷服務例程的特殊使用和用戶線程對硬件訪問,到出現于有些ROTS中的半規范化驅動程序模型。它對于移植RTOS代碼到規范化模式的Linux設備啟動程序具有啟發性,并且介紹了一些方法。特別地,本文會重點討論和比較RTOS代碼中的內存映射,Linux基于I/O調度隊列的移植,和重新定義RTOSI/O,以便在本地Linux驅動程序和守護進程里應用。
Abstract:
Key words :

Linux暴風雨般地占領了嵌入式系統市場。根據工業分析家分析,大約1/3到1/2的新的32位和64位嵌入式系統設計采用了Linux。嵌入式Linux已經在很多應用領域顯示出優勢,比如SOHO家庭網絡和成像/多功能外設,并在以下幾方面具備巨大的跨越式發展前景:(NAS/SAN)存儲,家庭數字娛樂(HDTV/PVR/DVR/STB)和手持設備/無線設備,特別是數字移動電話。

新的嵌入式Linux應用不會象掌握在智慧和工藝之神-羅神手中那樣,會突然從開發者的頭腦中爆發出來。大量的項目必須采用數千行的,甚至數百萬行的過去的現成代碼。成百上千的嵌入式項目已經成功地將其它平臺的現成代碼移植到Linux之上,比如WindRiverVxWorks和pSOS,VRTX,Nucleus和其它RTOS,這些移植工作現在仍然有價值和現實意義。

到目前為止,大多數的關于移植舊的RTOS應用到嵌入式Linux的文獻,已經在關注RTOS接口(API),任務,調度模式和怎樣將他們映射到相應的用戶空間去。在嵌入式程序的密集I/O空間中,同樣重要的是,將RTOS的應用硬件接口代碼向具有更加規范化模式的Linux設備啟動程序的移植。

本文將縱覽幾種常用的內存映射I/O方法,它們經常出現于舊的嵌入式應用中。它們涵蓋的范圍,包括從對中斷服務例程的特殊使用和用戶線程對硬件訪問,到出現于有些ROTS中的半規范化驅動程序模型。它對于移植RTOS代碼到規范化模式的Linux設備啟動程序具有啟發性,并且介紹了一些方法。特別地,本文會重點討論和比較RTOS代碼中的內存映射,Linux基于I/O調度隊列的移植,和重新定義RTOSI/O,以便在本地Linux驅動程序和守護進程里應用。

RTOSI/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操作:

#defineDATA_REGISTER0xF00000F5

chargetchar(void){

return(*((char*)DATA_REGISTER));/*readfromport*/

}

voidputchar(charc){

*((char*)DATA_REGISTER)=c;/*writetoport*/

}

多數受過訓練的開發者常常將這樣的直接I/O代碼從硬件代碼獨立分離開。但是我還曾遇見大量的意大利面條式的I/O處理代碼。

當普遍深入使用直接內存映射I/O的時候,對Linux開始接觸的嵌入式開發人員總是面臨將所有的這類代碼移植到用戶空間,將定義寄存器地址的#define語句轉換成mmap()調用。這種處理方法對于一些種類的原型很好,但是不能支持中斷處理,限制了實時響應,特別不安全,不適合作為商業發布。

RTOS中斷服務例程

在Linux中,中斷服務專屬于內核的范圍。在一個RTOS中,中斷服務例程代碼是自由形態而且與應用程序代碼沒有區別(不外乎返回序列)。很多RTOS提供系統調用或者宏,來讓代碼自己檢測它自己的切換點(比如WindRiverVxWorks的intContext())。中斷服務例程通常也使用標準的庫函數,伴隨著可重入性和可移植性問題。大多數RTOS支持注冊中斷服務例程代碼,中斷仲裁句柄和中斷服務例程調度。一些非常原始的嵌入式執行程序,僅僅支持在硬件矢量表里插入中斷服務例程的開始地址。即使你試圖直接在用戶程序空間執行讀和寫的操作,你不得不將你的Linux中斷服務例程放入內核程序空間。

RTOSI/O子系統

大多數RTOS會提供一個定制的標準C運行庫(比如pSOS的pREPC),或者可以從獨立軟件開發商的編譯器中選擇打補丁的C庫(libc)同樣可以得到glibc。這樣,在最小化情況下,多數的RTOS支持標準C類型I/O的一個子集(open/close/read/write/ioctl)。大多數情況下,這些調用和從他們衍生出來的調用可以轉化為圍繞基本I/O的非常薄的封裝程序。有趣的是,因為大多數的?RTOS不支持文件系統,這些平臺不提供針對flash和旋轉媒質的抽象文件存儲,常常使用完全不同的代碼和/或者不同的應用程序接口(API)(比如pSOS的pHILE)。

WindRiverVxWorks在這方面比其它多數RTOS平臺做的較好些,提供功能豐富的I/O子集,主要克服了網絡接口/多媒體接口里的集成和廣泛化障礙。

延時處理

很多RTOS也支持一種叫”下半部“("bottomhalf")的機制,它針對可中斷和/或者可搶占切換的I/O延時處理方法。其他RTOS沒有這樣的機制,但是替代地提供類似中斷嵌套的機制來獲得同樣的效果。

典型RTOS應用I/O架構

下面描述一個典型的I/O配置(僅僅輸入)和它向主要應用程序傳遞數據的路徑處理過程依次如下:

*一個硬件中斷觸發一個中斷服務例程的執行。

*中斷服務例程做基本的處理和完成本地的輸入操作,或者讓RTOS調度延時的處理。在一些情況下,延時處理過程由在Linux里面被叫做用戶進程來處理,在這里就是通常的RTOS任務。

*無論在何時何地獲得數據(中斷服務例程或者延時切換),準備好的數據被放進隊列(RTOS中斷服務例程能夠訪問應用程序隊列通過應用程序接口(API)和其它進程間通信(?IPC),請看下面的API表)。

*一個或者多個應用任務然后從隊列讀消息,來取出數據。

在傳統的RTOS和Linux之間的典型I/O的比較輸出常常由類似的機制來完成。替代使用write()或者相似的系統調用,一個或者多個RTOS應用程序任務,將準備好的數據放進隊列。隊列中的數據由以下過程取出:一個I/O程序或者響應”準備好發送”中斷的中斷服務例程,一個系統時鐘,或者其它阻塞在獲取隊列中的應用任務,然后直接執行I/O操作(可以是輪詢,也可以是通過DMA)。

將RTOSI/O映射進Linux

上面描述的基于隊列的生產/消費I/O模型,僅僅是很多種在傳統設計中所采用的特別方法之一。讓我們繼續用這個直接的例子,來討論幾種在嵌入式Linux下的實現:

大規模移植到用戶空間

對于勉強了解Linux設備驅動設計細節,或者非常匆忙的開發者,可能將大多數這樣基于隊列設計程序完整無缺地移植到用戶空間。在這種驅動程序映射配置中,內存映射的物理I/O口通過函數mmap()提供的指針可以在用戶空間操作。

#include

#defineREG_SIZE0x4/*deviceregistersize*/

#defineREG_OFFSET0xFA400000

/*physicaladdressofdevice*/

void*mem_ptr;/*de-referenceformemory-mappedaccess*/

intfd;

fd=open("/dev/mem",O_RDWR);/*openphysicalmemory(mustberoot)*/

mem_ptr=mmap((void*)0x0,REG_AREA_SIZE,PROT_READ+PROT_WRITE,

MAP_SHARED,fd,REG_OFFSET);

/*actualcalltommap()*/

一個基于進程的用戶線程進行與基于RTOS的中斷服務例程或者延時任務一樣的操作,然后使用SVR4進程間通信函數msgsnd()將消息放進隊列,等待被另一個本地線程或者另一個進程利用函數msgrcv()來獲取。這種快速”臟的”處理方法是好的原型,同時對于建立可發布型代碼帶來了巨大的挑戰。首先重要的是需要在用戶空間掃描中斷。象DOS仿真(DOSEMU)項目提供基于信號的帶SIG(Silly中斷發生器)中斷I/O,但是用戶空間的中斷處理過程非常慢(毫秒量級中斷延時,所替代的基于內核的中斷服務例程中斷延時為數十微秒)。更進一步講,在用戶空間的切換調度不能保證用戶空間的I/O線程100%的及時執行,即使采用可搶占Linux內核和實時調度策略。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          国产精品日日摸夜夜添夜夜av| 欧美午夜精品一区| aaa亚洲精品一二三区| 日韩视频国产视频| 蜜臀a∨国产成人精品| 午夜精品婷婷| 亚洲精品你懂的| 午夜精品久久久99热福利| 伊人伊人伊人久久| 亚洲国产综合在线看不卡| 亚洲少妇最新在线视频| 久久久久久久久久久久久久一区| 亚洲精品国产精品国自产观看浪潮| 另类亚洲自拍| 亚洲欧美日韩在线高清直播| 玖玖玖免费嫩草在线影院一区| 裸体丰满少妇做受久久99精品| 国产日韩一区在线| 国产一区二区电影在线观看| 国产在线视频欧美| 在线中文字幕一区| 欧美日韩爆操| 欧美色图天堂网| 久久国产精品一区二区三区四区| 日韩一区二区精品葵司在线| 亚洲欧美日韩一区在线| 欧美一级在线播放| 男女av一区三区二区色多| 欧美freesex交免费视频| 9l国产精品久久久久麻豆| 蜜臀av性久久久久蜜臀aⅴ四虎| 香蕉久久精品日日躁夜夜躁| 亚洲欧洲在线一区| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美日韩成人激情| 欧美午夜电影完整版| 欧美精品日本| 久久国产精品99久久久久久老狼| 国产精品视频网址| 91久久精品国产91性色tv| 夜夜躁日日躁狠狠久久88av| 欧美性色视频在线| 欧美亚洲三级| 国产欧美一区二区视频| 欧美激情综合在线| 欧美日韩精品一区| 欧美偷拍另类| 欧美激情亚洲自拍| 欧美亚洲日本一区| 在线亚洲免费视频| 久久亚洲精选| 欧美一区二区三区另类| 亚洲国产清纯| 欧美日韩精品一区二区| 亚洲国产二区| 亚洲精品日韩在线观看| 久久在线免费视频| 久久字幕精品一区| 久久久久久电影| 亚洲欧美国产精品专区久久| 久久午夜激情| 国产欧美视频一区二区| 日韩视频一区二区| 欧美精品福利在线| 欧美寡妇偷汉性猛交| 一本色道久久综合一区| 欧美日韩国产在线一区| 9人人澡人人爽人人精品| 欧美亚洲免费高清在线观看| 女人天堂亚洲aⅴ在线观看| 在线成人小视频| 国产亚洲日本欧美韩国| 欧美aaaaaaaa牛牛影院| 亚洲视频碰碰| 欧美在线free| 激情久久综合| 亚洲国产精品尤物yw在线观看| 国产亚洲成av人片在线观看桃| 国产精品亚洲产品| 亚洲国内精品| 狠狠色狠狠色综合系列| 亚洲日本视频| 久久全球大尺度高清视频| 久久久久久9999| 久久综合久久88| 欧美一区二区三区四区在线观看| 亚洲图片自拍偷拍| 欧美成人精精品一区二区频| 性欧美video另类hd性玩具| 国产精品高潮久久| 亚洲国产成人不卡| 99在线|亚洲一区二区| 久久精品99国产精品日本| 久久久综合视频| 欧美国产激情| 国产欧美视频在线观看| 国产精品国码视频| 欧美喷水视频| 91久久国产自产拍夜夜嗨| 欧美日韩中国免费专区在线看| 欧美国产在线电影| 亚洲欧美在线看| 性高湖久久久久久久久| 亚洲第一黄色网| 国产精品久久久久久久久久ktv| 亚洲图片欧美午夜| 国产午夜精品一区二区三区欧美| 亚洲人成人一区二区在线观看| 午夜精品久久一牛影视| 欧美日韩精品一区二区三区| 亚洲男人的天堂在线aⅴ视频| 午夜国产不卡在线观看视频| 一区二区亚洲精品国产| 亚洲线精品一区二区三区八戒| 日韩亚洲精品在线| 国产精品久久久免费| 欧美午夜不卡视频| 欧美三区在线视频| 欧美国产日本在线| 99人久久精品视频最新地址| 久久综合99re88久久爱| 国产精品亚洲综合| 欧美日韩成人一区| 久久se精品一区二区| 欧美片网站免费| 中文一区二区在线观看| 欧美性色综合| 国产精品久久久久一区二区三区| 欧美在线免费观看视频| 亚洲欧美激情四射在线日| 国产精品一区在线观看| 欧美成人一二三| 国产一区二区三区四区hd| 日韩视频精品在线| 一区二区三区视频免费在线观看| 欧美与欧洲交xxxx免费观看| 久久一区二区精品| 噜噜噜躁狠狠躁狠狠精品视频| 狠狠综合久久av一区二区小说| 亚洲美女视频在线免费观看| 99精品久久免费看蜜臀剧情介绍| 性欧美长视频| 免费成人av在线| 欧美成人自拍视频| 欧美体内she精视频| 国产美女精品| 久久另类ts人妖一区二区| 欧美刺激午夜性久久久久久久| 亚洲伦伦在线| 国产精品毛片va一区二区三区| 男人的天堂亚洲| 欧美视频不卡| 国内精品嫩模av私拍在线观看| 欧美日韩精品一区二区在线播放| 99精品国产一区二区青青牛奶| 国产精品社区| 香蕉乱码成人久久天堂爱免费| 激情综合色综合久久| 亚洲精品在线观看免费| 夜夜嗨av一区二区三区网站四季av| 欧美福利一区二区| 欧美成人精品在线播放| 久久久亚洲成人| 国产精品99久久久久久www| 国产乱码精品一区二区三区不卡| 国产免费成人在线视频| 欧美日韩午夜视频在线观看| 久久一区亚洲| 日韩视频免费观看高清完整版| 国产精品永久免费视频| 欧美精品激情在线| 国产一区二区三区av电影| 你懂的视频一区二区| 亚洲欧美另类国产| 欧美在线视频一区| 亚洲国产成人av在线| 国外精品视频| 欧美精品一区二区蜜臀亚洲| 亚洲黄色小视频| 亚洲网站啪啪| 国内精品久久久久国产盗摄免费观看完整版| 亚洲激情社区| 亚洲黄色在线看| 在线综合视频| 欧美伊人精品成人久久综合97| 亚洲激情图片小说视频| 国产精品午夜av在线| 国产精品中文字幕欧美| 欧美一级专区| 黄色成人免费观看| 午夜精品久久久久99热蜜桃导演| 久久亚洲精品中文字幕冲田杏梨| 激情综合亚洲| 久久婷婷蜜乳一本欲蜜臀| 久久久久在线观看| 午夜精品视频在线观看| 亚洲私人黄色宅男| 欧美日韩免费在线视频| 欧美成人一区二免费视频软件| 欧美三级欧美一级| 在线精品视频一区二区| 欧美绝品在线观看成人午夜影视| 一本色道久久加勒比88综合| 一区精品在线| 一区视频在线| 欧美日韩国产一级| 亚洲无人区一区| 亚洲片区在线| 日韩午夜av| 亚洲精品看片| 午夜日韩激情| 亚洲国产精品久久久久婷婷老年| 日韩一区二区精品在线观看| 国产精品白丝jk黑袜喷水| 久久久久成人精品| 在线亚洲欧美专区二区| 亚洲深夜福利| 亚洲综合色婷婷| 久久国产精品毛片| 国产欧美一区视频| 一本色道久久加勒比精品| 国产日韩一级二级三级| 欧美国产成人在线| 午夜精品亚洲| 国产欧美综合一区二区三区| 日韩小视频在线观看| 一区二区高清在线观看| 亚洲精品免费在线| 一本到12不卡视频在线dvd| 亚洲高清资源| 极品日韩久久| 在线一区免费观看| 久久久久九九九九| 免费在线观看一区二区| 国产亚洲欧美一区在线观看| 欧美日产国产成人免费图片| 亚洲高清视频一区二区| 亚洲美女一区| 91久久中文字幕| 亚洲国产综合在线看不卡| 亚洲人成亚洲人成在线观看图片| 国产日产精品一区二区三区四区的观看方式| 亚洲免费福利视频| 国产精品久久久久久影视| 亚洲少妇在线| 性欧美8khd高清极品| 国产亚洲毛片| 国产精品一区视频| 亚洲日本中文字幕区| 欧美黄色一区二区| 亚洲国产另类久久精品| 亚洲一区二区三区四区视频| 亚洲高清视频的网址| 国产乱肥老妇国产一区二| 国产亚洲一级高清| 最新中文字幕一区二区三区| 欧美视频一区二| 一区二区福利| 夜夜躁日日躁狠狠久久88av| 国产日韩在线一区二区三区| 欧美亚洲视频在线观看| 欧美绝品在线观看成人午夜影视| 欧美福利在线| 亚洲免费av网站| 国产伦精品一区二区三区免费| 亚洲天堂偷拍| 99爱精品视频| 国产精品福利久久久| 国产精品一二三视频| 亚洲欧美激情在线视频| 亚洲精品在线三区| 欧美日韩精品在线观看| 在线看欧美视频| 久久久夜色精品亚洲| 国产毛片精品视频| 国产欧美在线观看一区| 欧美日韩国产综合视频在线观看| 亚洲国产成人av好男人在线观看| 亚洲人午夜精品| 久久精品亚洲| 香蕉乱码成人久久天堂爱免费| 国内伊人久久久久久网站视频| 91久久午夜| 9l国产精品久久久久麻豆| 欧美一级淫片aaaaaaa视频| 免费久久99精品国产自| 亚洲国产高清aⅴ视频| 影音先锋亚洲精品| 欧美三区免费完整视频在线观看| 欧美精品福利在线| 亚洲电影免费观看高清完整版在线| 国产欧美精品一区二区色综合| 亚洲视频福利| 欧美福利视频网站| 久久久久国产一区二区三区| 亚洲免费视频在线观看| 极品裸体白嫩激情啪啪国产精品| 亚洲大黄网站| 欧美一区三区二区在线观看| 亚洲精品久久久久久一区二区| 亚洲愉拍自拍另类高清精品| 日韩小视频在线观看专区| 亚洲承认在线| 欧美日韩精品在线视频| 国产欧美不卡| 久久久水蜜桃av免费网站| 日韩亚洲一区在线播放| 在线观看视频日韩| 美女诱惑黄网站一区| 欧美三级在线视频| 国产人妖伪娘一区91| 欧美在线网站| 久久激情久久| 国产精品香蕉在线观看| 欧美一区1区三区3区公司| 久久精品国产综合| 欧美日韩免费在线| 亚洲精品一区二区三区樱花| 美女被久久久| 国产精品高潮呻吟久久av无限| 国产精品久久午夜夜伦鲁鲁| 久久一区欧美| 欧美亚洲不卡| 亚洲国产精品久久久久久女王| 欧美一区二区啪啪| 一区二区高清视频| 久久不射2019中文字幕| 国产精品视频久久|