• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

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

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

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

      嵌入式軟件測(cè)試時(shí)需要搭建的測(cè)試環(huán)境和對(duì)硬件板卡的支持是軟件測(cè)試人員會(huì)遇到的重要問(wèn)題。主要闡述了怎么基于QEMU設(shè)計(jì)實(shí)現(xiàn)全數(shù)字仿真環(huán)境。通過(guò)腳本語(yǔ)言代替復(fù)雜的圖形界面和測(cè)試引擎,以開(kāi)源的QEMU模擬器作為Cortex-M3處理器的指令集仿真,通過(guò)對(duì)開(kāi)發(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)功能測(cè)試,能夠滿(mǎn)足實(shí)時(shí)性要求,但軟件的可控性差,軟件和硬件故障難于分離,不便于故障的準(zhǔn)確定位,而且在對(duì)某些系統(tǒng)進(jìn)行大規(guī)模測(cè)試時(shí),準(zhǔn)備時(shí)間長(zhǎng),代價(jià)昂貴,可行性差。

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

      1 QEMU介紹

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

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

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

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

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

      步驟四:linux系統(tǒng)給每個(gè)運(yùn)行進(jìn)程分配的內(nèi)存空間為4G,其中0xC0000000到0xFFFFFFFF這個(gè)地址段是留給系統(tǒng)使用的,主要用于系統(tǒng)(linux內(nèi)核)和進(jìn)程通信和交換數(shù)據(jù),用戶(hù)可以使用3GB的空間(0x00000000-0xBFFFFFFF)。針對(duì)目標(biāo)二進(jìn)制文件用到的區(qū)域塊主要包括代碼存儲(chǔ)區(qū)、SRAM和外設(shè)存儲(chǔ)區(qū),將這三個(gè)區(qū)域定義成3個(gè)數(shù)組,對(duì)于內(nèi)存的操作可以映射成對(duì)三個(gè)數(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è)模擬,用戶(hù)接口組成的一個(gè)進(jìn)程分成虛擬機(jī)進(jìn)程與交互進(jìn)程兩個(gè)進(jìn)程。因此,原本不同模塊間數(shù)據(jù)收發(fā),整理,轉(zhuǎn)發(fā)的時(shí)間同步問(wèn)題轉(zhuǎn)換為了進(jìn)程間通信的問(wèn)題。就可以利用進(jìn)程通信上豐富且成熟的機(jī)制,如管道、共享內(nèi)存、套接字等等,因此在程序設(shè)計(jì)實(shí)現(xiàn)的復(fù)雜度上低于單進(jìn)程架構(gòu)。而性能方面,管道和共享內(nèi)存等機(jī)制可以提供接近于單線(xiàn)程的性能。

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

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

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

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

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

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

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

      2.2用戶(hù)接口

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

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

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

      2.3外設(shè)模擬

      通常而言,在全數(shù)字仿真環(huán)境下,外部設(shè)備的仿真也將全部由軟件模擬實(shí)現(xiàn)。由軟件模擬的好處在于可以非常靈活的更改、添加、管理所有外部設(shè)備。并且軟件具有容易復(fù)制分發(fā)的特點(diǎn),也易于快速搭建模擬平臺(tái)。和對(duì)處理器的仿真實(shí)現(xiàn)一樣,在對(duì)外設(shè)仿真時(shí),需要對(duì)外設(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)建動(dòng)態(tài)鏈接庫(kù),虛擬機(jī)初始化時(shí)按需加載,每個(gè)動(dòng)態(tài)鏈接庫(kù)對(duì)應(yīng)著一個(gè)外設(shè)類(lèi)型,該類(lèi)型實(shí)現(xiàn)類(lèi)似于面向?qū)ο笳Z(yǔ)言的類(lèi),在結(jié)構(gòu)體中定義相應(yīng)的數(shù)據(jù)屬性以及使用函數(shù)指針實(shí)現(xiàn)相應(yīng)外設(shè)的行為方法和內(nèi)部邏輯。并且通過(guò)向外提供訪(fǎng)問(wèn)其內(nèi)部結(jié)構(gòu)體的接口,而上位機(jī)正是通過(guò)這些接口來(lái)訪(fǎng)問(wèn)訪(fǎng)問(wèn)到插件的內(nèi)部數(shù)據(jù)以及回調(diào)外設(shè)的內(nèi)部函數(shù),外設(shè)仿真模型如圖4所示。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      圖7 終端顯示串口輸出

      4 下一步工作

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

      陳瑀 男,中國(guó)工程物理研究院計(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)用
      債券市場(chǎng)對(duì)外開(kāi)放的進(jìn)程與展望
      USB接口的多串口數(shù)據(jù)并行接收方法探索
      基于藍(lán)牙串口適配器的GPS接收機(jī)與AutoCAD的實(shí)時(shí)無(wú)線(xiàn)通信
      基于并行控制的FPGA多串口拓展實(shí)現(xiàn)
      社會(huì)進(jìn)程中的新聞學(xué)探尋
      Microchip推出具備雙ADC外設(shè)的全新器件,擴(kuò)展其低成本8位PIC?單片機(jī)產(chǎn)品線(xiàn)
      我國(guó)高等教育改革進(jìn)程與反思
      Linux僵死進(jìn)程的產(chǎn)生與避免
      貼身呵護(hù) 必不可少的PSP外設(shè)
      敦化市| 水富县| 连城县| 普安县| 昌平区| 宁南县| 澄迈县| 丽水市| 景洪市| 澄迈县| 雅安市| 阿瓦提县| 从化市| 尼勒克县| 延安市| 九龙城区| 梅河口市| 宕昌县| 启东市| 金门县| 通江县| 鹤壁市| 桦川县| 武鸣县| 长沙县| 曲周县| 镇远县| 阜康市| 长沙市| 康平县| 沙田区| 那曲县| 鹿邑县| 承德市| 临江市| 驻马店市| 新巴尔虎左旗| 金昌市| 东乡族自治县| 乐安县| 顺昌县|