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

?

基于QEMU的嵌入式系統(tǒng)仿真環(huán)境的構(gòu)建

2012-09-11 10:17:08陳宇星謝發(fā)榮
微處理機(jī) 2012年6期
關(guān)鍵詞:宿主機(jī)源碼文件夾

陳宇星,張 力,謝發(fā)榮

(昆明理工大學(xué)信息工程與自動(dòng)化學(xué)院,昆明 650500)

1 引言

在后PC時(shí)代和物聯(lián)網(wǎng)概念盛行的今天,嵌入式設(shè)備無所不在。其中ARM微處理器是一種低功率高性能的32位RISC微處理器,目前ARM微處理器已經(jīng)深入到無線通信、網(wǎng)絡(luò)應(yīng)用、工業(yè)控制、消費(fèi)類電子產(chǎn)品、智能家居和汽車數(shù)碼等各個(gè)領(lǐng)域。而ARM9作為ARM系列中的主流產(chǎn)品,具有很高的性價(jià)比,在各個(gè)方面都有很廣的應(yīng)用,此處使用的MINI2440開發(fā)板就是采用了基于ARM9架構(gòu)的S3C2440微處理器。

大多數(shù)嵌入式系統(tǒng)的開發(fā),由于目標(biāo)機(jī)和宿主機(jī)使用的是不同體系結(jié)構(gòu)的處理器,因此無法在宿主機(jī)上運(yùn)行和測(cè)試目標(biāo)程序,通常需要建立一個(gè)交叉編譯環(huán)境,將編譯后的可執(zhí)行二進(jìn)制文件下載到目標(biāo)平臺(tái)上運(yùn)行。如此就使得只能在目標(biāo)操作系統(tǒng)移植系統(tǒng)設(shè)計(jì)完成之后,才能進(jìn)行嵌入式軟件的調(diào)試和開發(fā)[1]。而又因?yàn)榍度胧介_發(fā)一般需要邏輯分析儀、在線調(diào)試器和硬件設(shè)備這樣一套開發(fā)調(diào)試組合平臺(tái),費(fèi)用常常高達(dá)數(shù)萬元甚至十幾萬元以上,所以對(duì)于想進(jìn)行嵌入式操作系統(tǒng)研究學(xué)習(xí)或應(yīng)用軟件設(shè)計(jì)開發(fā)的研發(fā)人員而言,就可能存在以下兩個(gè)問題:

1)由于經(jīng)費(fèi)不足,無法購(gòu)買必須的硬件設(shè)備和軟件來構(gòu)造學(xué)習(xí)和開發(fā)的環(huán)境。

2)對(duì)硬件不太熟悉而在調(diào)試硬件方面耗費(fèi)太多精力,而高層次的軟件設(shè)計(jì)和開發(fā)一般又不用太考慮底層硬件的實(shí)現(xiàn)細(xì)節(jié),如果直接處于一個(gè)實(shí)際的硬件環(huán)境中,在開發(fā)和研究時(shí)就可能陷入硬件的具體細(xì)節(jié)中,不能把精力放在軟件開發(fā)上。

因此有必要使用一種介于嵌入式操作系統(tǒng)和硬件之間的嵌入式仿真系統(tǒng)即仿真軟件,來模擬各種硬件設(shè)備,使得開發(fā)者和學(xué)習(xí)者在此平臺(tái)上可模擬各種硬件設(shè)備,從而獲得一種高效且廉價(jià)(甚至是免費(fèi))的學(xué)習(xí)和開發(fā)環(huán)境[2]。

2 仿真軟件與嵌入式系統(tǒng)

通常,仿真軟件是指通過軟件模擬的具有完整硬件系統(tǒng)功能的、運(yùn)行在一個(gè)完全隔離的環(huán)境中的完整計(jì)算機(jī)系統(tǒng)。仿真軟件能夠在其運(yùn)行的計(jì)算機(jī)系統(tǒng)上創(chuàng)建一個(gè)封閉的隔離環(huán)境,并能夠保證虛擬環(huán)境中計(jì)算行為的安全性。而嵌入式系統(tǒng)作為一種特殊的軟件和硬件綜合體,其普遍被認(rèn)同的定義是:以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專業(yè)計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)一般由嵌入式微處理器、外網(wǎng)硬件設(shè)備、嵌入式操作系統(tǒng)和特定的應(yīng)用程序所組成。其中硬件平臺(tái)的多樣性是嵌入式系統(tǒng)的主要特點(diǎn),不同的應(yīng)用通常有不同的硬件環(huán)境[3]。而嵌入式操作系統(tǒng)則具有相當(dāng)不變性,主要完成嵌入式應(yīng)用的任務(wù)調(diào)度和控制等核心功能,具有內(nèi)核較精簡(jiǎn)、可配置、與高層應(yīng)用緊密關(guān)聯(lián)等特點(diǎn)。嵌入式應(yīng)用程序運(yùn)行于操作系統(tǒng)之上,利用操作系統(tǒng)提供的機(jī)制完成特定的嵌入式應(yīng)用[4]。

仿真軟件和嵌入式系統(tǒng)的以上特征決定了此處所描述的嵌入式仿真系統(tǒng)需要在通用的LINUX和WINDOWS平臺(tái)上實(shí)現(xiàn)一個(gè)如圖1所示的仿真集成開發(fā)環(huán)境,模擬ARMLinux、uCOS-II、WinCE 等常見嵌入式計(jì)算機(jī)系統(tǒng)和TCP/IP、圖形子系統(tǒng)和文件子系統(tǒng)等系統(tǒng)軟件,并可對(duì)它們進(jìn)行源碼級(jí)別的分析和測(cè)試。

圖1 仿真平臺(tái)結(jié)構(gòu)圖

3 基于ARM9的仿真軟件

由于此處需要對(duì)ARM9-S3C2440微處理器嵌入式系統(tǒng)(簡(jiǎn)稱ARM2440)進(jìn)行模擬仿真,而目前可以模擬ARM2440的指令級(jí)仿真軟件有以下幾款:QEMU、ARMulator、國(guó)內(nèi)清華大學(xué)研發(fā)的 Skyeye,還有2010年國(guó)內(nèi)慧至科技公司研發(fā)的Realboard仿真軟件平臺(tái)。

鑒于從方便性、靈活性、成熟度和發(fā)展前景來分析比較,文章選擇了QEMU。因?yàn)镼EMU系統(tǒng)是目前較為先進(jìn)的可開發(fā)源代碼的具有動(dòng)態(tài)二進(jìn)制翻譯技術(shù)的跨平臺(tái)仿真軟件,它可以模擬IA32(x86)、ARM、AMD64、MIPS R4000、SPARC sun3 與 PowerPC(Prep及Power Macintosh)等架構(gòu)。而QEMU的原理是首先將ELF格式的可執(zhí)行文件翻譯成中間形式,然后根據(jù)中間形式,拷貝編譯好的微操作代碼(由C語言實(shí)現(xiàn)),形成目標(biāo)基本塊,最后再執(zhí)行此基本塊。它的總體結(jié)構(gòu)如圖2所示[5]。

圖2 QEMU總體結(jié)構(gòu)圖

另外目前的QEMU仿真速度已經(jīng)越來越快,不需要像skyeye一樣必須使用配置文件設(shè)置內(nèi)存地址等信息,而是可以直接使用腳本命令進(jìn)行修改操作,其中更重要的一點(diǎn)就是其網(wǎng)絡(luò)配置十分方便,它有三種網(wǎng)絡(luò)模式可供選擇,其中的TUN/TAP模式在Linux系統(tǒng)中模擬網(wǎng)絡(luò)是很標(biāo)準(zhǔn)的做法,這就與vmware和vitualbox等常用虛擬機(jī)的橋接網(wǎng)絡(luò)配置方式是一樣的。這種網(wǎng)絡(luò)配置方式特別有利于進(jìn)行U-Boot中的TFTP傳輸燒寫內(nèi)核和掛載NFS網(wǎng)絡(luò)文件系統(tǒng)的實(shí)驗(yàn)[6]。

4 建立嵌入式開發(fā)環(huán)境

此處所使用的宿主機(jī)平臺(tái)為發(fā)行版Linux免費(fèi)操作系統(tǒng)Ubuntu 11.10,主要是為了方便編譯工具的安裝制作,減少編譯源碼時(shí)產(chǎn)生的函數(shù)庫(kù)依賴問題。當(dāng)然宿主機(jī)平臺(tái)也可以使用其他的操作系統(tǒng)搭建編譯環(huán)境,例如在WINDOWS上安裝MinGW和MSYS以及CodeSourcery ARM EABI交叉編譯工具鏈,由于在這些環(huán)境中建立仿真平臺(tái)比在Ubuntu上更為復(fù)雜,因此這里就不予闡述了。

雖然在Ubuntu上使用軟件源自動(dòng)安裝的標(biāo)準(zhǔn)QEMU仿真軟件中的qemu-system-arm命令并不支持基于ARM920T的S3C2440處理器,但是可以從http://repo.or.cz/這個(gè)網(wǎng)站里面下載到專門支持S3C2440處理器的QEMU for MINI2440仿真軟件源碼和U-Boot for MINI2440引導(dǎo)程序源碼,還有Linux kernel for MINI2440的內(nèi)核源碼。

其中Qemu for MINI2440是已經(jīng)經(jīng)過修改專門為MINI2440開發(fā)板定制并且以u(píng)-boot為引導(dǎo)程序的專用性很強(qiáng)的源碼。引導(dǎo)程序U-Boot for MINI2440也是把架構(gòu)清晰、可移植性強(qiáng)的U-Boot開源程序經(jīng)過修改使之適應(yīng)于MINI2440的網(wǎng)卡和NAND FLASH等硬件驅(qū)動(dòng)。而Linux kernel for MINI2440則是將MINI2440開發(fā)板上的各種特殊硬件驅(qū)動(dòng)程序加入到了標(biāo)準(zhǔn)linux內(nèi)核源碼中。

4.1 QEMU仿真環(huán)境的建立

首先,進(jìn)入 Ubuntu宿主機(jī)系統(tǒng),執(zhí)行以下命令[7]:

sudo apt-get install build-essential ddd cpio libncurses5-dev libsdl-dev zlib1g-dev

此時(shí),宿主機(jī)操作系統(tǒng)安裝了QEMU編譯工具GCC和必備的函數(shù)庫(kù)。接著執(zhí)行下列命令安裝TUN/TAP虛擬網(wǎng)絡(luò)仿真模塊:

sudo apt-get install kernel-package linuxsource//下載內(nèi)核源碼

cd/usr/src/linux-source-‘uname -r’

sudo tar xjvf linux-source-‘uname -r’

cd linux-source-‘uname -r’

sudo-s//進(jìn)入root根用戶模式

cp/boot/config-[kernel-version]./.config make menuconfig//配置內(nèi)核,將 TUN/TAP選擇(M)編譯模塊

make modules//重新只編譯(M)模塊選項(xiàng),不編譯(*)選項(xiàng)支持的功能

cp ./driver/net/tun.ko/lib/module/’uname -r’/kernel/driver/net

depmod//重新建立模塊依賴關(guān)系

modprobe tun//加載TUN虛擬網(wǎng)絡(luò)模塊

lsmod|grep tun//檢查若出現(xiàn) tun 87040則成功加載TUN模塊

然后到 http://repo.or.cz/w/qemu/mini2440.git/snapshot/HEAD.tar.gz 下載 qemu for mini2440源碼包,解壓后,在源代碼的主目錄中執(zhí)行下面的命令行操作對(duì)QEMU進(jìn)行編譯:

./configure- -target-list=arm-softmmu Make-j4

最后,在arm-softmmu文件夾內(nèi)將生成qemu-system-arm這個(gè)二進(jìn)制程序。

4.2 編譯移植U-Boot

首先,使用以下命令安裝交叉編譯工具:

tar jxvf arm-2008q3-72-arm-none-linuxgnueabi-i686-pc-linux-gnu.tar.bz2-C/

export PATH=$PATH:/opt/arm-2009q1/bin/

使用以上最后一條命令將交叉編譯工具目錄加入環(huán)境變量,則交叉工具鏈 arm-none-linuxgnueabi-將在此終端命令行中產(chǎn)生作用。

然后下載U-Boot源碼包,使用下列命令將它解壓編譯:

mv HEAD.tar.gz uboot.tar.gz

tar xzvf uboot.tar.gz

cd uboot

打開Makefile配置文件,將CROSS_COMPILE變量修改賦值為現(xiàn)有的交叉編譯工具鏈的名稱:arm-none-linux-gnueabi-

再執(zhí)行下列命令進(jìn)行編譯:

make mini2440_config

make-j4

編譯完畢后,即在當(dāng)前目錄下生成名為uboot.bin的文件。注意如果在之后需要使用 uboot的nfs下載文件功能,需要修改代碼中的一部分,將net/nfs.c文件中的 NFS_TIMEOUT=2UL修改為NFS_TIMEOUT=20000UL,這樣就可以添加延時(shí)時(shí)間,從而避免NFS文件下載失敗。還有最好將其中初始化IP地址的代碼修改為和自己宿主機(jī)當(dāng)前的IP地址同屬一個(gè)網(wǎng)段,以方便以后的TFTP和NFS 聯(lián)網(wǎng)實(shí)驗(yàn)[8]。

最后,將編譯好的 u-boot.bin拷貝到 qemu/mini2440文件夾中去。

4.3 編譯移植Linux kernel for MINI2440

首先,使用以下命令安裝Uimage制作工具:sudo apt-get install uboot-mkimage

然后編譯Linux kernel for mini2440:make mini2440_defconfig ARCH=arm

make-j4 ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

最后,會(huì)在arch/arm/boot目錄下生成uImage文件,將此文件復(fù)制到qemu目錄下面的mini2440文件夾下,并將 mini2440文件夾中的 mini2440_start.sh作如下修改,將 kernel一行改為 – kernel“$base/uImage”即可[9]。

4.4 掛載rootfs-qtopia-qt4文件系統(tǒng)

首先,在友善之臂公司的官網(wǎng) http://www.arm9.net/download.asp上可以下載到基于 Linux kernel for mini2440的Rootfs-Qtopia-Qt4這樣的目標(biāo)文件系統(tǒng)壓縮包,它是基于 Busybox-1.13.3,包含 Qtopia-2.2.0 和 QtE -4.6.3 可以自由切換運(yùn)行的雙圖形系統(tǒng)。使用以下命令將它解壓[10]:

sudo tar xzvf rootfs_qtopia_qt4 -20100816.tar.gz-C/opt/nfs

然后,進(jìn)入/opt/nfs/rootfs_qtopia_qt4這個(gè)文件夾中,修改etc/init.d/rcS這個(gè)文件,將下面兩個(gè)語句按照如下方式注釋掉即可:

#/sbin/ifconfig lo 127.0.0.1

#/etc/init.d/ifconfig - eth0

其次,修改/etc/exports文件,在文件末尾添加如下一行:

/opt/nfs/rootfs_qtopia_qt4*(rw,sync,no_root_squash)

并按照如下命令安裝NFS服務(wù)器,并啟動(dòng)之:

sudo apt-get install nfs-kernel-server

sudo/etc/init.d/nfs- kernel- server restart

進(jìn)入qemu/mini2440這個(gè)文件夾中,修改mini2440_start.sh這個(gè)文件,改為下面的語句:

-net tap,vlan=0,ifname=tap0,script="$base/qemu-ifup",downscript="$base/qemu-ifdown"

最后,當(dāng)做完以上修改后,在命令行中進(jìn)入qemu目錄,并輸入以下命令:

sudo ./mini2440/mini2440_start.sh

就可以看到終端中kernel開始加載的信息,當(dāng)文件系統(tǒng)成功掛載后,可以在QEMU軟件中看到Qtopia2圖形操作系統(tǒng)。

5 移植QT4應(yīng)用程序

本rootfs-qtopia-qt4文件系統(tǒng)之中有一個(gè)友善公司制作的名稱為Start Qt4.6.3的軟件,點(diǎn)擊后可以自動(dòng)切換進(jìn)入QT4圖形環(huán)境。本實(shí)驗(yàn)移植了一個(gè)基于QT4開發(fā)的電子詞典qt-dict[11]。由于本部分涉及的代碼修改過程和移植方法細(xì)節(jié)較多,在這里就不做詳細(xì)介紹了[12]。

移植成功后,仿真實(shí)驗(yàn)效果如圖3所示。

6 結(jié)束語

隨著社會(huì)的快速發(fā)展,嵌入式在人們生活的方方面面扮演著越來越重要的角色,ARM微處理器已經(jīng)出現(xiàn)在人們周圍各式各樣的設(shè)備中。而QEMU作為一個(gè)純軟件的開源跨平臺(tái)硬件仿真平臺(tái)已經(jīng)得到了越來越多的應(yīng)用,例如最近比較流行的智能移動(dòng)終端操作系統(tǒng)Android的開發(fā)模擬平臺(tái)使用的就是QEMU仿真軟件。QEMU的出現(xiàn)為嵌入式軟件設(shè)計(jì)節(jié)約了大量的開發(fā)時(shí)間。此處建立的開發(fā)環(huán)境,使得開發(fā)人員可以在沒有開發(fā)板的情況下進(jìn)行前期軟件開發(fā)、調(diào)試和試運(yùn)行,大大提高了開發(fā)效率,是對(duì)嵌入式軟件開發(fā)的有力支持。

圖3 基于QT4圖形界面的電子詞典

[1]江樂斌.嵌入式MCU仿真的研究與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2007.

[2]張雪燕.嵌入式仿真系統(tǒng)在嵌入式開發(fā)中的應(yīng)用[J].寧波廣播電視大學(xué)學(xué)報(bào),2006,4(1):82-84.

[3]Wei Chen.An Emulator for Executing IA - 32 Applications on ARM - Based Systems[J].JOURNAL OF COMPUTERS,2010,5(7):1133 -1135.

[4]宋靖,吳慶波.嵌入式系統(tǒng)仿真運(yùn)行環(huán)境SkyEye應(yīng)用研究[J].微處理機(jī),2007,28(2):94-97.

[5]Fabrice Bellard.QEMU,a Fast and Portable Dynamic Translator[C].2005 USENIX Annual Technical Conference,2005.

[6]Wolfgang Mueller.1st International QEMU Users Forum[C].Alpexpo,Grenoble,F(xiàn)rance,2011.

[7]Leao.使用qemu建立mini2440的模擬仿真環(huán)境[EB/OL].2011. http://www.cnblogs.com/jinmu190/archive/2011/03/21/1990698.html

[8]陳璇.嵌入式Linux開發(fā)[J].昆明理工大學(xué)學(xué)報(bào)(理工版),2005,30(z1):362 -365.

[9]盛惠興,王海濱,姚家坤.嵌入式Linux系統(tǒng)的開發(fā)與優(yōu)化[J].微電子學(xué)與計(jì)算機(jī),2007,24(6):94 -96.

[10]陳峰,李濱滔,戈志華.基于S3C2410的嵌入式Linux系統(tǒng)構(gòu)建[J].現(xiàn)代電子技術(shù),2007,30(20):55 -57.

[11]周國(guó)華,陸德波,朱荊洲.基于Linux的嵌入式應(yīng)用開發(fā)策略[J].計(jì)算機(jī)與數(shù)字工程,2005,33(3):42-45.

[12]王存健,張建正.嵌入式Linux下Qt/Embedded的應(yīng)用[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006,16(11):179 -181.

猜你喜歡
宿主機(jī)源碼文件夾
基于網(wǎng)頁(yè)源碼結(jié)構(gòu)理解的自適應(yīng)爬蟲代碼生成方法
基于圖神經(jīng)網(wǎng)絡(luò)的軟件源碼漏洞檢測(cè)方法
磁力文件夾
企業(yè)如何保護(hù)源碼
虛擬網(wǎng)絡(luò)實(shí)驗(yàn)室在農(nóng)村職校計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)教學(xué)中的應(yīng)用研究
嵌入式計(jì)算機(jī)軟件測(cè)試關(guān)鍵技術(shù)的思考
調(diào)動(dòng)右鍵 解決文件夾管理三大難題
基于數(shù)據(jù)結(jié)構(gòu)教輔系統(tǒng)的實(shí)驗(yàn)課程改革
嵌入式計(jì)算機(jī)軟件測(cè)試關(guān)鍵技術(shù)研究
TC一鍵直達(dá)常用文件夾
電腦迷(2015年1期)2015-04-29 21:24:13
集安市| 绿春县| 天祝| 玛多县| 丘北县| 海盐县| 广南县| 广灵县| 宁都县| 化州市| 尼木县| 墨竹工卡县| 武威市| 新平| 静海县| 盘锦市| 通河县| 杨浦区| 自贡市| 克拉玛依市| 柏乡县| 彩票| 阿拉尔市| 长治市| 乐都县| 静宁县| 上栗县| 栾城县| 蓬溪县| 阿图什市| 桂平市| 武川县| 广汉市| 区。| 阳城县| 增城市| 新营市| 阳泉市| 舟曲县| 革吉县| 肃宁县|