国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

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

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

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

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

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

前言

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

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

1 QEMU介紹

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

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

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

步驟二:文件加載后,PC指針指向e_entry程序的入口地址,基本塊為翻譯單位,目標(biāo)機(jī)的binary->TCG的中間碼->宿主機(jī) 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運(yùn)行至下一基本塊時,如果滿足熱路徑算法的條件,則通過索引表找到之前的基本塊,并將其跳轉(zhuǎn)指令的偏移設(shè)置為下一個基本塊代碼段的起始地址。在修改跳轉(zhuǎn)指令的偏移值后,之后對該塊的運(yùn)行將不再翻譯,而通過跳轉(zhuǎn)指令直接執(zhí)行。

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

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

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

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

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

2.1總體設(shè)計(jì)框架

圖1 QEMU基本框架示意圖

圖2 多進(jìn)程設(shè)計(jì)

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

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

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

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

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

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

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

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

2.2用戶接口

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

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

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

2.3外設(shè)模擬

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

圖3 分層設(shè)計(jì)

用插件的方式實(shí)現(xiàn),為不同的外設(shè)構(gòu)建動態(tài)鏈接庫,虛擬機(jī)初始化時按需加載,每個動態(tài)鏈接庫對應(yīng)著一個外設(shè)類型,該類型實(shí)現(xiàn)類似于面向?qū)ο笳Z言的類,在結(jié)構(gòu)體中定義相應(yīng)的數(shù)據(jù)屬性以及使用函數(shù)指針實(shí)現(xiàn)相應(yīng)外設(shè)的行為方法和內(nèi)部邏輯。并且通過向外提供訪問其內(nèi)部結(jié)構(gòu)體的接口,而上位機(jī)正是通過這些接口來訪問訪問到插件的內(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ā)功能)接收虛擬驗(yàn)證總線上的數(shù)據(jù),按照通信協(xié)議解析,設(shè)置到對應(yīng)的讀寄存器中,并產(chǎn)生接收中斷;將要發(fā)送的數(shù)據(jù)按照UDP數(shù)據(jù)格式打包,通過消息代理發(fā)送到虛擬驗(yàn)證總線上的其他節(jié)點(diǎn),同時產(chǎn)生發(fā)送中斷。

3 仿真環(huán)境實(shí)驗(yàn)驗(yàn)證

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

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

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

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

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

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

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

圖5 主節(jié)點(diǎn)啟動

圖6 虛擬機(jī)配置信息 

圖7 終端顯示串口輸出

4 下一步工作

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

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

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

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

陳瑀 男,中國工程物理研究院計(jì)算機(jī)應(yīng)用研究所,在讀研究生。主要研究方向?yàn)椋河?jì)算機(jī)應(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

猜你喜歡
外設(shè)進(jìn)程串口
淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
債券市場對外開放的進(jìn)程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
USB接口的多串口數(shù)據(jù)并行接收方法探索
基于藍(lán)牙串口適配器的GPS接收機(jī)與AutoCAD的實(shí)時無線通信
地礦測繪(2015年3期)2015-12-22 06:27:26
基于并行控制的FPGA多串口拓展實(shí)現(xiàn)
社會進(jìn)程中的新聞學(xué)探尋
Microchip推出具備雙ADC外設(shè)的全新器件,擴(kuò)展其低成本8位PIC?單片機(jī)產(chǎn)品線
我國高等教育改革進(jìn)程與反思
Linux僵死進(jìn)程的產(chǎn)生與避免
貼身呵護(hù) 必不可少的PSP外設(shè)
聂荣县| 乌拉特前旗| 武城县| 调兵山市| 哈尔滨市| 东辽县| 宁海县| 石城县| 辽中县| 宁夏| 罗定市| 义马市| 甘肃省| 随州市| 灯塔市| 固始县| 嘉禾县| 宾阳县| 道孚县| 彰化市| 平乡县| 镶黄旗| 九江县| 团风县| 彭阳县| 香港 | 芜湖市| 广东省| 平舆县| 保德县| 香港| 定西市| 新营市| 鄄城县| 阿瓦提县| 马山县| 方山县| 和平区| 桂东县| 井研县| 巴楚县|