999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

從RTOS到Linux的應用移植※

2012-06-25 02:45:56李瑋瑩姚興偉
關鍵詞:進程嵌入式信號

李瑋瑩,姚興偉

(電子科技大學 空天科學技術研究院,成都 611731)

李瑋瑩,主要研究方向為地面站測試系統(tǒng)開發(fā);姚興偉(碩士研究生),主要研究方向為嵌入式系統(tǒng)設計、設備驅動開發(fā)。

引 言

在過去幾年中,Linux成功地取代了一些最主要的傳統(tǒng)RTOS(實時操作系統(tǒng))平臺,成為了各種各樣的嵌入式設備和應用中首選的嵌入式操作系統(tǒng)。盡管一度曾被認為是不重要的平臺,但今天嵌入式Linux已經成為主流,廣泛應用于消費電子、手持和無線設備、數據聯(lián)網以及電信設備等領域。Google公司在2007年11月發(fā)布的Android手機操作系統(tǒng)正是基于Linux內核的操作系統(tǒng),使得Linux在數字移動電話業(yè)取得跨越式發(fā)展。

筆者在從臺式頻譜儀到手持式頻譜儀的項目研發(fā)中實現了RTOS到Linux的應用移植。本文介紹了整體的設計思路和一些關鍵問題的實現細節(jié)。

1 RTOS到Linux的移植分析

幾乎所有的RTOS都有一個簡單的編程模型,它由多線程的執(zhí)行(通常稱為任務)構成,包含在單一的地址空間中。在RTOS中,單一主程序下多任務同時運行,具有很高的實時響應能力。

過去大多數嵌入式處理器沒有內存管理單元,因此RTOS是單地址空間模式,即它們的物理地址和邏輯地址都是一樣的。然而目前大多數的中高端處理器配備了MMU(內存管理單元)。在 MMU的支持下,Linux采用虛擬內存管理,將地址空間分為物理地址和虛擬地址,因此系統(tǒng)操作硬件時要進行地址映射。

根據兩類系統(tǒng)的體系結構,RTOS移植到Linux的基本框架如圖1所示。

圖1 RTOS移植到Linux的基本框架

由圖1可看出,移植的基本步驟為:

①RTOS的全部應用代碼移植到一個Linux單進程;

②RTOS的任務轉換成Linux線程;

③RTOS的物理地址空間映射到Linux的虛擬地址空間。

在具體的應用移植過程中,還應考慮在Linux系統(tǒng)下解決上層應用實時響應底層硬件中斷,應用層與內核層的異步通信、數據交換,以及多進程、多線程的設計等問題。

2 RTOS到Linux的移植實現

2.1 地址映射

多數RTOS是針對較早的無MMU的CPU而設計,所以忽略了內存管理部分,即使當MMU問世后也是這樣——不區(qū)分物理地址和虛擬地址。大多數RTOS還全部運行在特權模式,雖然表面上看來是增強了性能,但全部的RTOS應用和系統(tǒng)代碼都能夠訪問整個地址空間、內存映射過的設備以及其他I/O操作。這樣,即使存在差別,也很難把RTOS應用程序代碼同驅動程序代碼區(qū)分開來。

對于當前包含MMU的處理器而言,Linux系統(tǒng)提供了復雜的存儲管理系統(tǒng),使得進程所能訪問的虛擬內存達到4GB。

在Linux系統(tǒng)中,進程的4GB虛擬內存空間[1]被分為兩個部分——用戶空間與內核空間。用戶地址空間一般分布為0~3GB,剩下的3~4GB為內核空間。上層應用程序通常情況下只能訪問用戶空間的虛擬地址,不能訪問內核空間的虛擬地址。應用程序只有通過系統(tǒng)調用(代表應用程序進程在內核態(tài)執(zhí)行)等方式才可以訪問到內核空間。

而外設I/O資源是不在Linux內核虛擬地址空間中的(如SRAM或硬件接口寄存器等),若需要訪問某外設I/O資源,必須先將其物理地址映射到內核虛擬地址空間中,然后才能在內核空間中訪問它。

Linux內核訪問外設I/O資源的方式有兩種:靜態(tài)映射(map_desc)和動態(tài)映射(ioremap)。對于靜態(tài)映射,內核在系統(tǒng)啟動時通過map_desc結構體靜態(tài)創(chuàng)建I/O資源到內核地址空間的線性映射表(即page table),這種映射表是一一映射的關系。開發(fā)人員可以自定義該I/O內存資源映射后的虛擬地址。創(chuàng)建好了靜態(tài)映射表,在內核或驅動中訪問該I/O資源時則無需再進行ioremap映射,可以直接通過映射后的I/O虛擬地址去訪問它。

這里主要討論更常用的動態(tài)映射方式。動態(tài)映射方式是直接通過內核提供的ioremap函數動態(tài)創(chuàng)建一段外設I/O內存資源到內核虛擬地址的映射表,從而可以在內核空間中訪問這段I/O資源。代碼如下:

上述代碼的含義是將0x56000010開始的4字節(jié)的物理地址映射到內核的虛擬地址中,返回的起始虛擬地址值賦給bcon宏定義。對宏定義的操作即對物理地址的操作。

其中,phys_addr為要映射的起始的I/O地址;size為要映射的空間的大小;flags為要映射的I/O空間和權限有關的標志。

該函數返回映射后的內核虛擬地址(3G~4G),接著便可以通過讀寫該返回的內核虛擬地址去訪問這段I/O內存資源。所以,在移植的開始就應該在頭文件中完成設備物理地址的映射,方便后續(xù)的開發(fā)。

2.2 多進程多線程設計

大多數的RTOS內核都提供多任務的管理機制。任務是一個具有獨立功能的無限循環(huán)的程序段的一次運行活動,是實時內核調度的單位。多任務在內核的管理、調度下并行執(zhí)行,而且任務都是無限循環(huán)的,持續(xù)實現其功能。多任務實時操作系統(tǒng)示意圖如圖2所示。

圖2 多任務實時操作系統(tǒng)示意圖

在比較兩類嵌入式系統(tǒng)的架構之后,移植的過程中很自然地將RTOS的多任務轉換成Linux的多進程、多線程。

進程是Linux系統(tǒng)資源管理的最小單位,是程序的一次執(zhí)行過程,是Linux資源分配的基本單位。線程是在進程內部,它是比進程更小的能獨立運行的基本單位,是Linux系統(tǒng)分配CPU時間的基本單位。線程比進程更節(jié)約資源,節(jié)約時間。在具體的移植過程中,采用主進程等待上層連接,主進程下多線程并行執(zhí)行。同時采用互斥信號量解決線程訪問資源的同步問題。

Linux主進程程序流程如圖3所示。

圖3 Linux主進程程序流程

2.3 應用層與內核層通信

由于RTOS的單地址空間模式使得其內核層與應用層沒有區(qū)別,所以在數據交換、實時響應等方面有一定的優(yōu)勢。而Linux系統(tǒng)提供了嚴格的內存管理機制,能保證系統(tǒng)更加穩(wěn)定地運行。但同時增加了應用層與內核層,以及應用層與底層硬件通信的難度。本節(jié)內容主要解決應用層與內核層的信號通知、數據交換這兩個關鍵問題。

2.3.1 異步信號通知機制

RTOS是對外來事件在限定時間內能作出反應的系統(tǒng)。在RTOS中,時間是一種重要的系統(tǒng)資源,對外部事件的響應和任務的執(zhí)行都必須在限定的時間內完成。在多機系統(tǒng)中,還必須在限定的時間內完成消息的發(fā)送和接收。在RTOS中,輸出結果的正確性不僅取決于計算所形成的邏輯結束,還要取決于結果產生的時間。

Linux在發(fā)行最初并未定義為一款實時操作系統(tǒng)。隨著Linux內核的不斷發(fā)展,如今穩(wěn)定的Linux2.6內核已經具備了很好的實時響應能力。本文的研究項目中,需要上層應用對底層硬件進行實時響應。RTOS并沒有嚴格區(qū)分上層應用和內核,其多任務并行執(zhí)行,能很好達地到實時響應的目的。而移植到Linux系統(tǒng)中,上層應用和底層硬件并不能直接通信,要經過內核驅動層。雖然可以采用查詢方式實現,但是實時性不高,同時浪費CPU資源。本文采用異步信號通知機制,實現了上層應用對底層硬件的實時響應。

異步通知[2]的意思是:一旦設備就緒,則主動通知應用程序,這樣應用程序根本不需要查詢設備狀態(tài),這一點非常類似于硬件上“中斷”的概念,比較準確的稱謂是“信號驅動的異步I/O”。信號是在軟件層次上對中斷機制的一種模擬,在原理上進程收到信號與處理器收到中斷請求是一樣的。信號是異步的,一個進程不必通過任何操作來等待信號的到達,原理如圖4所示。

圖4 異步信號通知示意圖

在具體的程序設計過程中,上層應用為了能處理一個設備釋放的信號,要完成3項工作:

① 通過F_SETOWN控制命令設置設備文件的擁有者為本進程,這樣從設備驅動發(fā)送的信號才能被本進程接收到。

②通過F_SETFL控制命令設置設備文件支持FASYNC,即異步通知模式。

③ 通過signal()函數連接信號和信號處理函數。

在上層應用設置捕獲信號后,還應在設備驅動端設置信號源,在合適的時機讓設備驅動釋放信號,其相關代碼也包括3部分:

① 支持F_SETOWN命令,能在這個控制命令處理中設置filp-﹥f_owner為對應進程ID。

② 支持F_SETFL命令的處理,每當FASYNC標志改變時,驅動程序中的fasync()函數將得以執(zhí)行。

③ 在設備資源可獲得時,調用kill_fasync()函數釋放相應的信號給上層應用。

上述3項工作和上層應用的3項工作是一一對應的。按其步驟設計程序,即可實現上層應用通過內核層對底層硬件的及時響應。

2.3.2 proc方式數據共享

除了前面提到的信號、套接字、信號量外,Linux還有管道、報文隊列、共享內存等進程間通信機制。在移植過程中,由于Linux系統(tǒng)分為應用層和內核層,所以不僅要進行進程間的通信,還要實現應用層與內核層的數據交換。以上的機制多是基于進程間通信,并不能很好地滿足要求。在這里采用proc文件系統(tǒng)的方法在Linux內核層和應用層之間進行數據交換。

在Linux系統(tǒng)中,proc文件系統(tǒng)是一個虛擬文件系統(tǒng),用于內核向用戶導出信息。利用proc文件系統(tǒng)通信是比較方便的一種應用層與內核層的數據交換方式,可以將對虛擬文件的讀寫作為與內核中實體進行通信的一種手段。內核的很多數據都是通過這種方式出口給上層應用的,內核的很多參數也是通過這種方式來讓上層方便設置的。實際上,很多應用嚴重地依賴于proc文件系統(tǒng),因此它幾乎是必不可少的組件。

對于proc文件系統(tǒng)的使用,有如下的接口函數:

以上函數作用分別是創(chuàng)建proc文件系統(tǒng)節(jié)點、讀寫proc節(jié)點,以及刪除proc節(jié)點。具體移植的proc程序流程如圖5所示。

圖5 proc程序流程

2.4 調試運行

根據移植的基本框架,在解決了以上幾個關鍵問題后,基本完成了整個移植的過程。最后要做的就是程序的調試。對于程序語法的調試,在編譯的過程中解決。根據Linux平臺下的編譯器gcc的提示信息,修改出現的語法類錯誤。在保證了應用程序文件的成功編譯后,采用gdb調試軟件進行功能的調試,同時結合打印函數printf跟蹤調試。在程序適當的位置加入printf打印信息,例如根據創(chuàng)建proc節(jié)點的返回值來打印成功或者失敗的信息,可以很直觀地了解程序的運行情況,是很有效的調試方法。通過兩種手段的結合,最后完成應用程序的調試。結果表明,能夠在Linux系統(tǒng)下正常運行。

結 語

現在越來越多的開發(fā)團隊正在放棄第一代實時操作系統(tǒng),選擇更穩(wěn)定的開放式的嵌入式Linux平臺。參考本文概括的應用程序的移植步驟以及相關的關鍵技術,開發(fā)人員可以通過更少的時間,將以前的RTOS的代碼成功地移植到一個現代化的Linux平臺上來。

編者注:本文為期刊縮略版,全文見本刊網站www.mesnet.com.cn。

[1]韋東山.嵌入式Linux應用開發(fā)完全手冊[M].北京:人民郵電出版社,2010.

[2]宋寶華.Linuxs設備驅動開發(fā)詳解[M].2版.北京:人民郵電出版社,2010.

[3]Jonathan Corbet,Alessandro Rubini,Greg Kroah-Hartman.Linux Device Drivers [M].Third Edition.Sebastopol:O'Reilly Media,Inc.,2005.

[4]NSLEYE.Real-time Linux[J].Dr.Dobb's Journal,2003,28(4):79-81.

[5]李小群,趙慧斌,葉以民,等.RFRTOS:基于Linux的實時操作系統(tǒng)[J].軟件學報,2003(7).

[6]劉云新,張堯學.一個基于Linux的嵌入式實時操作系統(tǒng)[J].計算機工程與應用,2001(7).

[7]欒建海,李眾立,黃曉芳.Linux2.6內核分析[J].兵工自動化,2005(2).

猜你喜歡
進程嵌入式信號
信號
鴨綠江(2021年35期)2021-04-19 12:24:18
完形填空二則
債券市場對外開放的進程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
基于FPGA的多功能信號發(fā)生器的設計
電子制作(2018年11期)2018-08-04 03:25:42
搭建基于Qt的嵌入式開發(fā)平臺
嵌入式軟PLC在電鍍生產流程控制系統(tǒng)中的應用
基于LabVIEW的力加載信號采集與PID控制
Altera加入嵌入式視覺聯(lián)盟
倍福 CX8091嵌入式控制器
自動化博覽(2014年4期)2014-02-28 22:31:15
社會進程中的新聞學探尋
民主與科學(2014年3期)2014-02-28 11:23:03
主站蜘蛛池模板: 少妇极品熟妇人妻专区视频| 亚洲女同欧美在线| 亚洲人成网站观看在线观看| 福利在线一区| 免费Aⅴ片在线观看蜜芽Tⅴ| 亚洲精品中文字幕无乱码| 国产麻豆精品在线观看| 中文字幕欧美成人免费| 青青草欧美| 国产丰满成熟女性性满足视频| 色综合天天操| 久久窝窝国产精品午夜看片| 国产后式a一视频| 亚洲天堂伊人| 天天色天天综合网| 美女一级免费毛片| 国产精品99久久久久久董美香 | 91久久青青草原精品国产| 国产杨幂丝袜av在线播放| 国产一级一级毛片永久| 亚洲日韩国产精品无码专区| 成人毛片在线播放| 欧美第九页| 国产精品无码久久久久久| 日韩国产高清无码| 亚洲国产清纯| 亚洲成网777777国产精品| 国模私拍一区二区三区| 激情网址在线观看| 一级爆乳无码av| 日本爱爱精品一区二区| 人禽伦免费交视频网页播放| 性色一区| 六月婷婷激情综合| 亚洲成a人在线播放www| 国产男女免费视频| 亚洲不卡影院| 国产毛片网站| 国产精品内射视频| 国产精品免费露脸视频| 狠狠操夜夜爽| 亚洲欧美极品| 老司国产精品视频91| 国产手机在线小视频免费观看| 中文字幕不卡免费高清视频| 亚洲天堂网在线播放| 久草性视频| 露脸真实国语乱在线观看| 午夜不卡视频| 又黄又爽视频好爽视频| 色婷婷成人| 国产精品所毛片视频| 婷婷色在线视频| 国产成人a在线观看视频| 国产成人高清精品免费软件| 色婷婷色丁香| 天天综合色网| 国产亚洲高清在线精品99| 国产真实乱人视频| 黄色国产在线| 欧美精品亚洲精品日韩专区va| 91在线一9|永久视频在线| 亚洲欧美日韩另类在线一| 亚洲欧美人成电影在线观看| 91在线精品麻豆欧美在线| 国产草草影院18成年视频| 精品福利视频导航| 国产99免费视频| 成人免费网站久久久| 亚洲无码高清视频在线观看| 国产成人做受免费视频| 日本精品一在线观看视频| 久久亚洲高清国产| 在线无码私拍| 久久青草免费91线频观看不卡| 秋霞一区二区三区| 无码AV高清毛片中国一级毛片| 亚洲男人天堂久久| 精品国产成人三级在线观看| 午夜人性色福利无码视频在线观看| 99在线小视频| 日韩视频精品在线|