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

基于QEMU的全數(shù)字仿真環(huán)境設(shè)計

2016-09-22 03:50:21羅永紅李春雷中國工程物理研究院計算機應(yīng)用研究所綿陽62900中國工程物理研究院研究生院綿陽62900
環(huán)境技術(shù) 2016年4期
關(guān)鍵詞:進程指令環(huán)境

陳 瑀,羅永紅,李春雷(. 中國工程物理研究院計算機應(yīng)用研究所,綿陽 62900; 2. 中國工程物理研究院研究生院,綿陽 62900)

基于QEMU的全數(shù)字仿真環(huán)境設(shè)計

陳 瑀1,2,羅永紅1,李春雷1
(1. 中國工程物理研究院計算機應(yīng)用研究所,綿陽 621900; 2. 中國工程物理研究院研究生院,綿陽 621900)

嵌入式軟件測試時需要搭建的測試環(huán)境和對硬件板卡的支持是軟件測試人員會遇到的重要問題。主要闡述了怎么基于QEMU設(shè)計實現(xiàn)全數(shù)字仿真環(huán)境。通過腳本語言代替復(fù)雜的圖形界面和測試引擎,以開源的QEMU模擬器作為Cortex-M3處理器的指令集仿真,通過對開發(fā)板LM3S9B81的串口仿真為例,實驗驗證了此全數(shù)字仿真環(huán)境設(shè)計的可行性。

QEMU;全數(shù)字;仿真

前言

系統(tǒng)真實運行環(huán)境和半實物仿真環(huán)境適合于系統(tǒng)功能測試,能夠滿足實時性要求,但軟件的可控性差,軟件和硬件故障難于分離,不便于故障的準確定位,而且在對某些系統(tǒng)進行大規(guī)模測試時,準備時間長,代價昂貴,可行性差。

全數(shù)字仿真平臺(即仿真虛擬環(huán)境)是通過仿真嵌入式系統(tǒng)中的CPU,控制芯片,I/O,中斷等一系列硬件資源,提供了被測軟件所必須的硬件環(huán)境,從而可以在宿主機上對被測軟件進行全面而靈活的測試。被測軟件可以完全擺脫對硬件資源的依賴而運行在宿主 PC 機上,能充分利用 PC 機上豐富的資源進行有效全面的驗證,建立仿真虛擬環(huán)境可為軟件的調(diào)試運行、故障定位提供便利條件。

1 QEMU介紹

QEMU是一種快速的多體系結(jié)構(gòu)仿真器,通過動態(tài)翻譯的技術(shù)達到了優(yōu)異的仿真速度。QEMU 還具備在多種不同宿主機上仿真多種不同目標(biāo)CPU架構(gòu)的特性,它可以利用在x86架構(gòu)上仿真目標(biāo)處理器架構(gòu)為Cortex-M3的指令集。QEMU具有可擴展,可自定義新的指令集,開源并可移植,仿真速度快的優(yōu)點。根據(jù)以上幾點,可以選擇使用QEMU進行處理器的指令集仿真,通過建立一個虛擬硬件環(huán)境,使得目標(biāo)系統(tǒng)運行在仿真環(huán)境中就好像運行在真實的物理環(huán)境一樣,它使得構(gòu)建全數(shù)字仿真測試平臺成為可能,圖1是QEMU的基本框架示意圖[1]。

控制器主要由設(shè)備管理,中斷處理,源文件讀取和目標(biāo)文件的緩存幾部分組成,主要負責(zé)對目標(biāo)代碼的執(zhí)行文件的加載,目標(biāo)文件的緩存,對外設(shè)的管理以及對中斷控制的仿真。翻譯核心是對目標(biāo)文件的二進制數(shù)據(jù)的反匯編,以及生成一一對應(yīng)的且與平臺無關(guān)的TCG中間碼,并將該TCG中間碼翻譯成目標(biāo)架構(gòu)。

步驟一:系統(tǒng)初始化過程中,以二進制文件流的方式加載目標(biāo)二進制文件,保存文件的基本參數(shù)信息,包括文件的代碼段、數(shù)據(jù)段和堆棧段。

步驟二:文件加載后,PC指針指向e_entry程序的入口地址,基本塊為翻譯單位,目標(biāo)機的binary->TCG的中間碼->宿主機 binary,將生成的翻譯塊存放到指令Cache中。QEMU采用直接塊鏈技術(shù),即在每一個基本塊內(nèi)部都增加了直接跳轉(zhuǎn)指令。跳轉(zhuǎn)指令的偏移量是通過QEMU的翻譯過程動態(tài)生成的,既在首次執(zhí)行到該跳轉(zhuǎn)指令時,不對跳轉(zhuǎn)指令的偏移量做任何設(shè)置,基本塊代碼執(zhí)行結(jié)束后正常返回主循環(huán),并將其對應(yīng)的翻譯塊結(jié)構(gòu)體地址以及分支編號保存至索引表中。當(dāng)QEMU運行至下一基本塊時,如果滿足熱路徑算法的條件,則通過索引表找到之前的基本塊,并將其跳轉(zhuǎn)指令的偏移設(shè)置為下一個基本塊代碼段的起始地址。在修改跳轉(zhuǎn)指令的偏移值后,之后對該塊的運行將不再翻譯,而通過跳轉(zhuǎn)指令直接執(zhí)行。

步驟三:在宿主機上申請一塊內(nèi)存空間進行指令Cache的緩存,將翻譯塊緩存到指令Cache中。刷新Cache采用最近最少使用的算法,替換掉駐留在Cache中未被使用時間最長的翻譯塊。

步驟四:linux系統(tǒng)給每個運行進程分配的內(nèi)存空間為4G,其中0xC0000000到0xFFFFFFFF這個地址段是留給系統(tǒng)使用的,主要用于系統(tǒng)(linux內(nèi)核)和進程通信和交換數(shù)據(jù),用戶可以使用3GB的空間(0x00000000-0xBFFFFFFF)。針對目標(biāo)二進制文件用到的區(qū)域塊主要包括代碼存儲區(qū)、SRAM和外設(shè)存儲區(qū),將這三個區(qū)域定義成3個數(shù)組,對于內(nèi)存的操作可以映射成對三個數(shù)組中變量的操作。

步驟五:QEMU執(zhí)行翻譯塊,主要由cpu_loop()函數(shù)完成,直至目標(biāo)二進制文件執(zhí)行完成退出。

步驟六:中斷處理負責(zé)響應(yīng)虛擬外設(shè)的中斷。當(dāng)基本快執(zhí)行完后,程序主循環(huán)檢查當(dāng)前的中斷位,如果被置位,則響應(yīng)外設(shè)發(fā)出的中斷。

2 仿真環(huán)境架構(gòu)設(shè)計

2.1總體設(shè)計框架

圖1 QEMU基本框架示意圖

圖2 多進程設(shè)計

多進程設(shè)計在整體結(jié)構(gòu)上可以建立如圖2所示的結(jié)構(gòu)。將原先虛擬內(nèi)核,外設(shè)模擬,用戶接口組成的一個進程分成虛擬機進程與交互進程兩個進程。因此,原本不同模塊間數(shù)據(jù)收發(fā),整理,轉(zhuǎn)發(fā)的時間同步問題轉(zhuǎn)換為了進程間通信的問題。就可以利用進程通信上豐富且成熟的機制,如管道、共享內(nèi)存、套接字等等,因此在程序設(shè)計實現(xiàn)的復(fù)雜度上低于單進程架構(gòu)。而性能方面,管道和共享內(nèi)存等機制可以提供接近于單線程的性能。

多進程還會使得系統(tǒng)的內(nèi)核模塊仿真和與用戶的交互模塊設(shè)計完全獨立開來。可以使用成熟的開源的CPU仿真器嵌入到集成開發(fā)環(huán)境,達到軟件調(diào)試的目的。也因此可以設(shè)計多套不同的交互部分,使面對不同應(yīng)用場景使用。

將QEMU對于Cortex-M3部分的代碼精簡之后構(gòu)建動態(tài)鏈接庫,作為內(nèi)核模擬模塊,當(dāng)上位機收到創(chuàng)建虛擬機進程的需求時,動態(tài)加載該部分即可實現(xiàn)對目標(biāo)cpu指令集的仿真。

在內(nèi)核模塊和外設(shè)模塊之間的數(shù)據(jù)通信是通過編寫虛擬總線服務(wù)實現(xiàn),虛擬外部總線控制器包括串口、CAN、1553B等控制器(目前只以實現(xiàn)串口為例),實現(xiàn)CPU訪問虛擬外設(shè),同時連接虛擬內(nèi)部總線,進行內(nèi)存單元的管理。同時產(chǎn)生數(shù)據(jù)的接收和發(fā)送中斷,實現(xiàn)虛擬外設(shè)的數(shù)據(jù)的讀寫。虛擬內(nèi)部總線實現(xiàn)虛擬CPU訪問RAM、Flash功能,同時連接虛擬外部總線總線控制器,實現(xiàn)虛擬外設(shè)的數(shù)據(jù)收發(fā)。分層設(shè)計如圖3所示。

應(yīng)用層:上位機配置管理以資源視圖的方式顯示,針對各種總線服務(wù)進行資源分配及接口連接。

總線服務(wù)層:向應(yīng)用層提供串口、CAN、1553B的總線通信接口,實現(xiàn)各種總線的接入,同時為上層提供發(fā)送控制命令,傳遞消息的功能,實現(xiàn)各個部件之間的協(xié)調(diào)和控制。

數(shù)據(jù)分發(fā)層:總線交換服務(wù)實現(xiàn)總線的仲裁(主從設(shè)備),各種總線數(shù)據(jù)的轉(zhuǎn)發(fā),建立數(shù)據(jù)接收方和發(fā)送方的傳輸通道,包括數(shù)據(jù)的單播、廣播、組播等功能,連接虛擬外部總線控制器,實現(xiàn)虛擬外設(shè)數(shù)據(jù)的收發(fā)控制。將收到的總線數(shù)據(jù)分發(fā)給各虛擬外設(shè),實現(xiàn)數(shù)據(jù)的通信。

傳輸層:實現(xiàn)虛擬外設(shè)的數(shù)據(jù)讀寫以及內(nèi)部虛擬CPU訪問存儲仿真的數(shù)據(jù)通信。

2.2用戶接口

全數(shù)字仿真環(huán)境的用戶接口部分就是充當(dāng)傳統(tǒng)軟件測試部分上位機的角色,提供測試人員與仿真環(huán)境的交互的接口,大多數(shù)成產(chǎn)品的全數(shù)字仿真環(huán)境都會編寫圖形界面供測試人員使用,本文出于快速開發(fā),減少代碼量以及今后分布式架構(gòu)的可擴展性的考慮,選擇Erlang腳本語言代替圖形界面。

Erlang是一種通用的面向并發(fā)的編程語言。它在軟并行系統(tǒng)時具有一下幾個優(yōu)點,進程屬于Erlang語言本身所以創(chuàng)建,銷毀進程十分迅速,進程在不同體系架構(gòu)下都具有相同的行為,進程間不共享資源,這就避免了資源競爭的復(fù)雜情況,并且只設(shè)置了消息作為唯一的進程間通訊的手段,使得其進程間的通訊效率極高。[2]

虛擬機進程通過c語言編寫,交互進程為Erlang腳本,圖2的進程間的通信可以使用Erlang發(fā)布版中的幾個庫來實現(xiàn),其中Erl接口(ei)是一套c的代碼和宏,可以用它對Erlang的外部格式進行編碼和解碼,即在Erlang端通過其內(nèi)置函數(shù)編碼或者解碼一條消息,在C這端通過ei對二進制流進行相應(yīng)的處理。

2.3外設(shè)模擬

通常而言,在全數(shù)字仿真環(huán)境下,外部設(shè)備的仿真也將全部由軟件模擬實現(xiàn)。由軟件模擬的好處在于可以非常靈活的更改、添加、管理所有外部設(shè)備。并且軟件具有容易復(fù)制分發(fā)的特點,也易于快速搭建模擬平臺。和對處理器的仿真實現(xiàn)一樣,在對外設(shè)仿真時,需要對外設(shè)的收發(fā)機制,內(nèi)部邏輯,行為特征進行相應(yīng)的抽象,并據(jù)此設(shè)計仿真實現(xiàn)的模型[3]。

圖3 分層設(shè)計

用插件的方式實現(xiàn),為不同的外設(shè)構(gòu)建動態(tài)鏈接庫,虛擬機初始化時按需加載,每個動態(tài)鏈接庫對應(yīng)著一個外設(shè)類型,該類型實現(xiàn)類似于面向?qū)ο笳Z言的類,在結(jié)構(gòu)體中定義相應(yīng)的數(shù)據(jù)屬性以及使用函數(shù)指針實現(xiàn)相應(yīng)外設(shè)的行為方法和內(nèi)部邏輯。并且通過向外提供訪問其內(nèi)部結(jié)構(gòu)體的接口,而上位機正是通過這些接口來訪問訪問到插件的內(nèi)部數(shù)據(jù)以及回調(diào)外設(shè)的內(nèi)部函數(shù),外設(shè)仿真模型如圖4所示。

參照上述模型,給出本環(huán)境的外設(shè)仿真流程:

步驟一:虛擬外設(shè)注冊過程:創(chuàng)建設(shè)備結(jié)構(gòu)體,并掛接在設(shè)備樹里;

步驟二:調(diào)用設(shè)備特定的初始化函數(shù)來為設(shè)備初始化配置空間、分配IRQ號,同時注冊設(shè)備端口讀寫函數(shù)等;

步驟三:通過消息代理模塊(UDP數(shù)據(jù)收發(fā)功能)接收虛擬驗證總線上的數(shù)據(jù),按照通信協(xié)議解析,設(shè)置到對應(yīng)的讀寄存器中,并產(chǎn)生接收中斷;將要發(fā)送的數(shù)據(jù)按照UDP數(shù)據(jù)格式打包,通過消息代理發(fā)送到虛擬驗證總線上的其他節(jié)點,同時產(chǎn)生發(fā)送中斷。

3 仿真環(huán)境實驗驗證

在實驗驗證的工作中,將以一個串口例程為例,主要驗證本次設(shè)計的仿真環(huán)境架構(gòu)是否合理,上下位機各個資源的通訊是否正常,提出的外設(shè)模型下的外部設(shè)備是否能夠正常工作,從而證明基于QEMU的全數(shù)字仿真環(huán)境的設(shè)計是正確有效的。

該串口例程的功能為向串口寫入數(shù)據(jù),如果在真實環(huán)境下,可以由串口調(diào)試助手接受數(shù)據(jù),這里全數(shù)字仿真平臺由上位機接受數(shù)據(jù),并顯示在終端上。

步驟一:使用腳本命令啟動主節(jié)點作為上位機,之后開啟另一個終端啟動從節(jié)點作為虛擬目標(biāo)機,如圖5所示。

步驟二:Erlang腳本下發(fā)命令給從節(jié)點:插件掃描,設(shè)備配置,連接,虛擬機啟動。

步驟三:設(shè)備管理收到命令之后做消息處理,將虛擬機配置結(jié)果上報給主節(jié)點,并打印至終端上,如圖6所示。

步驟四:將串口例程編譯為ELF格式,放入仿真平臺測試文件下(相當(dāng)于實物平臺的代碼燒錄操作),運行結(jié)果如圖7所示,上位機成功收到例程寫入串口的數(shù)據(jù)。

圖4 外設(shè)仿真模型

圖5 主節(jié)點啟動

圖6 虛擬機配置信息 

圖7 終端顯示串口輸出

4 下一步工作

通過上述設(shè)計、實現(xiàn)、驗證的工作,證明了本文所設(shè)計的全數(shù)字仿真測試環(huán)境的可行性,但是還有諸多不足和可改進的地方。首先,本環(huán)境給出了通用外設(shè)的仿真模型,僅僅具體實現(xiàn)了串口總線的仿真,對于大多數(shù)的嵌入式被測程序而言,CAN、1553B、以太網(wǎng)等外設(shè)的仿真是程序運行的必要條件,之后的工作可以繼續(xù)完善外設(shè)仿真。其次,本次設(shè)計的仿真環(huán)境因快速開發(fā)的原則而放棄了圖形界面的設(shè)計,導(dǎo)致對于用戶交互并不友好。最后,選擇Erlang作為上位機框架開發(fā)就是看重其優(yōu)秀的并發(fā)性特性,這也為日后拓展分布式,多核仿真的高性能仿真平臺預(yù)留下空間。

[1] QEMU uesr mannul[EB/OL].[2012-08-01]. http://wiki.qemu. org/mannul/.

[2] Erlang程序設(shè)計[M].北京:人民郵電出版社. 2008.

[3]吳守兵,周洋.微機原理·外設(shè)·接口[M].北京:清華大學(xué)出版社,2002.

陳瑀 男,中國工程物理研究院計算機應(yīng)用研究所,在讀研究生。主要研究方向為:計算機應(yīng)用技術(shù)。

Design of All-digital Simulation Environment Based on QEMU

CHEN Yu1,2, LUO Yong-hong1, LI Chun-lei1
(1. The institute of computer application of CAEP, Mianyang 621900;2. The Graduate School of CAEP, Mianyang 621900)

When the embedded software is tested, it is an important issue to build testing environment and supporting of hardware for software tester. This paper mainly expounds how to design all-digital simulation environment based on QEMU. It takes place of complex graphical interface and test engine by script language, and takes the open source QEMU simulator as the instruction simulation of Cortex-M3 processor. Taking the serial port simulation of the development board LM3S9B81 as the example, the feasibility of the all-digital simulation environment design is verified by experiments.

QEMU; all- digital; simulation

TP302

B

1004-7204(2016)04-0046-05

猜你喜歡
進程指令環(huán)境
聽我指令:大催眠術(shù)
長期鍛煉創(chuàng)造體內(nèi)抑癌環(huán)境
一種用于自主學(xué)習(xí)的虛擬仿真環(huán)境
孕期遠離容易致畸的環(huán)境
債券市場對外開放的進程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
環(huán)境
ARINC661顯控指令快速驗證方法
LED照明產(chǎn)品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
社會進程中的新聞學(xué)探尋
坐標(biāo)系旋轉(zhuǎn)指令數(shù)控編程應(yīng)用
機電信息(2014年27期)2014-02-27 15:53:56
主站蜘蛛池模板: 美女被操91视频| 精品人妻系列无码专区久久| 人人妻人人澡人人爽欧美一区| 亚洲AV色香蕉一区二区| 成人午夜久久| 亚洲日韩久久综合中文字幕| 最新国产午夜精品视频成人| 久热这里只有精品6| 91色综合综合热五月激情| 国产午夜精品一区二区三| 国产一在线| 奇米精品一区二区三区在线观看| 一级成人a做片免费| 欧美无专区| 亚洲欧美在线精品一区二区| 欧美一级在线看| 久久99国产精品成人欧美| 久久精品人人做人人爽97| 天天爽免费视频| 国产亚洲精久久久久久无码AV| 在线欧美国产| 波多野结衣中文字幕一区二区| 国产亚洲欧美在线视频| 国产一级裸网站| 中文字幕亚洲精品2页| 亚洲中文字幕在线精品一区| 日韩毛片视频| 91精品国产综合久久香蕉922| 亚洲一区二区约美女探花| 亚洲小视频网站| 性欧美在线| 免费观看国产小粉嫩喷水| 国产成a人片在线播放| 欧美在线视频a| 91福利一区二区三区| 2020最新国产精品视频| 中文字幕在线不卡视频| 又爽又大又光又色的午夜视频| 色综合久久88| 亚洲视频免费播放| 国产在线第二页| m男亚洲一区中文字幕| 欧美第二区| 国产福利拍拍拍| 毛片a级毛片免费观看免下载| 99久久国产综合精品女同| 色天天综合久久久久综合片| 亚洲欧美日韩色图| 天天色综合4| 国产噜噜噜视频在线观看| 中文字幕第4页| 国产一区二区三区在线观看视频| 97精品久久久大香线焦| 九色综合伊人久久富二代| 亚洲国产综合精品中文第一| 欧洲亚洲一区| 欧美中文一区| 亚洲成a人片77777在线播放| 国产精品区网红主播在线观看| 国产99精品视频| 老司机久久99久久精品播放| 呦视频在线一区二区三区| 五月天综合网亚洲综合天堂网| 国产成人精品第一区二区| 免费在线成人网| 免费看黄片一区二区三区| 五月天丁香婷婷综合久久| 久久一色本道亚洲| 最新午夜男女福利片视频| 欧美在线三级| 国产成人精品一区二区免费看京| 国产精品自在线天天看片| 日韩精品成人网页视频在线| 999福利激情视频| 国产91无码福利在线| 成年女人a毛片免费视频| 国产成人精品三级| 亚洲一区二区三区国产精华液| 亚洲欧洲自拍拍偷午夜色| 欧洲精品视频在线观看| 91九色国产porny| 成人福利在线视频|