1. 程式人生 > >qemu模擬arm系統vexpress-a9—uboot+uImage

qemu模擬arm系統vexpress-a9—uboot+uImage

1 概述

上一篇檔案介紹了qemu環境搭建,用核心映象zImage執行模擬器,可以很方便除錯核心。但現在嵌入式arm處理器廠商都會發布uboot+uImagesdk形式給產品公司,有時候需要除錯uboot程式碼執行情況或是傳入到核心引數是否生效等等,所以模擬uboot+uImage執行也是很有必要的,qemu官方也給出了環境搭建的步驟,但是比較老了,如果按照那些步驟執行vexpress-a9會有很多問題。當然網上也有很多關於vexpress-a9這方面的文章,大家可以多搜搜,我寫這些東西一是給自己加深印象,二是希望把遇到的問題和解決方法給大家列的更詳細點,可以更快的對qemu熟悉起來。

若是實際的開發板,在

uboot執行以後,通過命令列可以使用mmc介面usb介面或是網路把編譯好的uImage載入到記憶體中執行。對於模擬器,網路引導是個方便的選擇,首先要需要一個tftp伺服器,網路下載uImage然後引導。下面一步一步介紹這個過程。

2 環境說明

主機系統:ubuntu 12.04 32bit

交叉編譯工具鏈:arm-linux-gnueabi-

uboot版本:git clone最新版本

Kernel版本:3.16

3 uboot下載、編譯、配置

3.1 boot最新原始碼下載

git clone git://git.denx.de/u-boot.git

3.2 配置工具連環境變數環境變數

export ARCH=arm

export CROSS_COMPILE=arm-linux-gnueabi-

交叉編譯工具的安裝參照上篇文章《零基礎qemu模擬arm系統環境搭建 linux核心編譯一節

地址http://blog.csdn.net/sxw1002/article/details/52841671

3.3 設定uboot引數ip地址和tftp server地址以及引導方式,patch如下

diff --gita/include/configs/vexpress_common.h b/include/configs/vexpress_common.h
index a8eba31..9cfb1db 100644
--- a/include/configs/vexpress_common.h
+++ b/include/configs/vexpress_common.h
@@ -48,6 +48,11 @@
 #define CONFIG_SYS_TEXT_BASE   0x80800000
 #endif
 
+/* netmask */
+#define CONFIG_IPADDR   192.168.1.49
+#define CONFIG_NETMASK  255.255.255.0
+#define CONFIG_SERVERIP 192.168.1.88
+
 /*
  *Physical addresses, offset from V2M_PA_CS0-3
  */
@@ -183,12 +188,14 @@
                                         GENERATED_GBL_DATA_SIZE)
 #define CONFIG_SYS_INIT_SP_ADDR                CONFIG_SYS_GBL_DATA_OFFSET
 
+#define CONFIG_BOOTFILE                "uImage"
 #include <config_distro_defaults.h>
-
 /*Basic environment settings */
-#define CONFIG_BOOTCOMMAND \
+/*#define CONFIG_BOOTCOMMAND \
       "run distro_bootcmd; " \
       "run bootflash; "
+*/
+#define CONFIG_BOOTCOMMAND  "tftp 0x60003000 uImage; setenv bootargs'root=/dev/mmcblk0 console=ttyAMA0'; bootm 0x60003000"
 
 #define BOOT_TARGET_DEVICES(func) \
        func(MMC, mmc, 1) \
@@ -221,7 +228,6 @@
 #define CONFIG_EXTRA_ENV_SETTINGS \
                CONFIG_PLATFORM_ENV_SETTINGS \
                 BOOTENV \
-              "console=ttyAMA0,38400n8\0" \
               "dram=1024M\0" \
                "root=/dev/sda1 rw\0"\
               "mtd=armflash:
[email protected]
(uboot),[email protected](kernel)," \


3.4 編譯

make vexpress_ca9x4_defconfig

make –j2

4 Linux kernel編譯

makevexpress_defconfig

make uImage LOADADDR=0x60003000 –j2

如果不加入LOADADDR編譯會失敗,否則可能產生下面的錯誤:

圖4.1 uImage編譯錯誤


編譯好以後放入自己設定的tftp目錄。ubuntu主機配置tftp伺服器的文章網上很多,有問題找度娘。

5. qemu網路配置

5.1 支援TUN/TAP

qemu的網路配置網上有很多變種版本,都是基於TAP介面的(不瞭解TAP的同學找度娘),我是參考的qemu官方給出的方法,實現了qemu-ifupqemu-ifdown兩個指令碼。不過需要ubuntu主機系統支援TUN/TAP,具體支援方法參考文章《qemu的網路配置方法2則(轉) 

http://blog.chinaunix.net/uid-280391-id-2449925.html

如果你的核心已經支援了TUN/TAP,可以找到如下節點

/dev/net/tun

5.2 qemu-ifup和qemu-ifdown

qemu-ifup指令碼

#!/bin/sh
#
# script to bring up the tun device in QEMUin bridged mode
# first parameter is name of tap device(e.g. tap0)
#
# some constants specific to the local host- change to suit your host
#
echo "config tun0"
echo $1
ETH0IPADDR=192.168.1.88
MASK=255.255.255.0
GATEWAY=192.168.1.1
BROADCAST=192.168.1.255
#
# First take eth0 down, then bring it upwith IP address 0.0.0.0
#
ifconfig eth0 down
ifconfig eth0 0.0.0.0 promisc up
#
# Bring up the tap device (name specifiedas first argument, by QEMU)
#
openvpn --mktun --dev $1 --user `id -un`
ifconfig $1 0.0.0.0 promisc up
#
# create the bridge between eth0 and thetap device
#
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 $1
#
# only a single bridge so loops are notpossible, turn off spanning tree protocol
#
brctl stp br0 off
#
# Bring up the bridge with ETH0IPADDR andadd the default route
#
ifconfig br0 $ETH0IPADDR netmask $MASKbroadcast $BROADCAST
route add default gw $GATEWAY
#
# stop firewall - comment this out if youdon't use Firestarter
#
service firestarter stop

qemu-ifdown指令碼

#!/bin/sh
#
# Script to bring down and delete bridgebr0 when QEMU exits
#
# Bring down eth0 and br0
#
ifconfig eth0 down
ifconfig br0 down
ifconfig br0 down
#
# Delete the bridge
#
brctl delbr br0
#
# bring up eth0 in "normal" mode
#
ifconfig eth0 -promisc
ifconfig eth0 up
ifconfig eth0 192.168.1.88
#
# delete the tap device
#
openvpn --rmtun --dev $1
#
# start firewall again
#
service firestarter start


上述兩個指令碼放到主機的/etc/目錄,加可執行許可權

sudo cp qemu-ifup qemu-ifcown /etc

sudo chmod +x qemu-if*

需要注意的是這兩個指令碼是自動執行的,不必要手動操作,只要在執行虛擬機器的過程中加入網路的相關引數即可。

6 qemu執行

根檔案系統的映象製作請參考 http://blog.csdn.net/sxw1002/article/details/53646731

準備工作已就緒,可以運行了

sudo qemu-system-arm -M vexpress-a9 \

    -kernel /home/marquis/src/bootloader/u-boot/u-boot \

    -nographic \

    -m 512M \

    -net nic -net tap,ifname=tap0,script=/etc/qemu-ifup \

    -sd /home/marquis/src/qemu_vir_image/a9rootfs.ext3

執行結果:

圖6.1 uboot啟動通過tftp載入核心


圖6.2核心執行


qemu弄起來比較繁瑣,不像在windows平臺用virtualboxvmware點點滑鼠就搞定,未免有些錯誤或不詳細的描述,同學們有興趣可以在我的微信公眾號上多多交流。

參考:

http://www.cnblogs.com/pengdonglin137/p/5023704.html?utm_source=tuicool&utm_medium=referral

https://en.wikibooks.org/wiki/QEMU/Networking

http://www.elinux.org/Virtual_Development_Board

http://blog.chinaunix.net/uid-280391-id-2449925.htm

相關推薦

qemu模擬arm系統vexpress-a9uboot+uImage

1 概述 上一篇檔案介紹了qemu環境搭建,用核心映象zImage執行模擬器,可以很方便除錯核心。但現在嵌入式arm處理器廠商都會發布uboot+uImage的sdk形式給產品公司,有時候需要除錯uboot程式碼執行情況或是傳入到核心引數是否生效等等,所以模擬uboot

CentOS 7 利用qemu模擬ARM vexpress A9開發板

ogr install 進入 復制 不同 .html ini 依賴 roo 聽說qemu用於仿真arm很不錯,今日就來試了一把。由於剛剛開始,了解的並不多。本文僅僅記錄Qemu裝載Linux kernel和busybox根文件系統的過程。後續將會深入了解仿真的其他內容。 先

qemu 模擬-arm-mini2440開發板-啟動u-boot,kernel和nfs檔案系統

qemu 本文介紹瞭如何編譯u-boot、linux kernel,然後用qemu啟動u-boot和linux kernel,達到與開發板上一樣的學習效果! 雖然已經買了2440開發板,但是在實際學習開發過程中,還是覺得不方便,既然這樣,那就用qemu模擬2440開發板,

ubuntu下使用qemu模擬ARM(四)-------編譯busybox

上面已完成了u-boot,kernel現在我們來做一個根檔案系統 用busybox製作根檔案系統 1.下載Busybox, 官方下載地址:https://busybox.net/downloads/ sudo mkdir root_system 將下載後的檔案放入/qe

qemu模擬arm執行linux,掛載nfs

掛載nfs,方便除錯pc:開啟兩個終端,其中一個輸入如下命令,開啟qemuqemu-system-arm -M vexpress-a9 -smp 4 -m 256M -kernel arch/arm/boot/zImage -append "rdinit=/linuxrc c

ubuntu下使用qemu模擬ARM(三)------編譯核心

上一章將u-boot編譯完成並用Qemu進行了測試,這一單我們來編譯核心 Linux核心編譯 下載Linux核心 官方下載地址:https://www.kernel.org/pub/linux/kernel/ sudo mkdir linux-kernel s

qemu模擬vexpress-a9及u-boot引導 linux

brctl data ket netd pre dong busybox 網絡 vsftpd 前言 本文講述使用 qemu 來模擬 vexpress-a9 開發板 ,同時介紹使用 u-boot 引導 linux 的流程。整個坐下來對 qemu 和 u-boot 以及嵌入式

基於QEMUARM Cortex-A9開發板Vexpress-ca9的Linux核心的編譯和執行

Author: KARL-Duj BAT QQ: 30933706 2011 Q群: 37******* 2012 Q群: 20******* 2013 Q群: 58******* 2014 Q群: 39******* 2015 Q

一步步教你如何在Ubuntu虛擬機器中安裝QEMU模擬模擬arm 開發環境(一)uImage u-boot

初次接觸qemu是因為工作的需要,有時候下了班,可能需要在家研究一些東西,因為博主用到arm環境,這時候博主比較小氣,不願花錢買開發板,當然博主在這裡給大家的建議是,如果要真正學懂arm構架的相關知識,還是單獨買一塊arm的開發板,慢慢摸索吧,畢竟這才是最好的學習方法,如果

QEMU之初始化——ARM vexpress-a9(一)

在上一篇的介紹的main()函式中,其實QEMU並沒有很多真正具體化的實質性的初始化,在main()函式中做的最多的事情就是註冊——各種型別、回撥函式等。當然大部分註冊是在constructor中完成的,main()中註冊的是與當前配置有關的一些內容。 當要開啟一個QEM

Qemu搭建ARM vexpress開發環境(三)----NFS網路根檔案系統

Qemu搭建ARM vexpress開發環境(三)----NFS網路根檔案系統 標籤(空格分隔): Qemu ARM Linux 經過上一篇《Qemu搭建ARM vexpress開發環境(二)----通過u-boot啟動Linux核心》,已經實現了通過u-boot載入Kernel啟動開發板,並且掛載根檔案系

QEMU模擬Mini2440開發板執行環境(二):NFS掛載根檔案系統

前言 原創文章歡迎轉載,請保留出處。 若有任何疑問建議,歡迎回復。 郵箱:[email protected] 緊接著第一篇(http://blog.csdn.net/maxwell_nc/article/details/44279553),我們使用網路檔案系統NFS掛載根檔案

qemu模擬armlinux執行目標檔案系統的可執行檔案

squashfs yum install -y xz-devel wget https://jaist.dl.sourceforge.net/project/squashfs/squashfs/squashfs4.3/squashfs4.3.tar.gz tar xzvf squas

使用Qemu模擬Cortex-A9執行U-boot和Linux

/****************************************************************************/  *  *                  (c)    光明工作室  2017-2037  COPYRIGHT

ubuntu下使用qemu-system-arm模擬arm環境

最近由於學習需要,開始搭建嵌入式開發環境,但苦於硬體平臺還沒有弄好,故先在ubuntu環境下進行模擬。     以下方法將在ubuntu10.10主機上,利用qemu-system-arm安裝一個arm11的作業系統。系統採用nfs方式掛載檔案系統,可以用來模擬arm11的

使用QEMU模擬搭建ARM開發平臺

在上一篇文章中,搭建的arm平臺只有一個最小化的initramfs,只是可以驗證可以啟動,但沒有實用性,busybox是嵌入式環境中的殺手級應用,將busybox整合進initramfs變得非常實用。首先要安裝qemu, arm toolchain,還要下載busybox原始碼。我下載的是busybox-1.

Qemu搭建ARM vexpress開發環境(二)----通過u-boot啟動Linux核心

Qemu搭建ARM vexpress開發環境(二)----通過u-boot啟動Linux核心 標籤(空格分隔): Qemu ARM Linux 在上文《Qemu搭建ARM vexpress開發環境(一)》中已經簡單講述了通過Qemu模擬直接啟動Linux核心,並掛在SD卡根檔案系統的方法,這種方法是直接啟動

python模擬ATM系統

python模擬atm系統一、環境及程序功能說明 python 2.7.12模擬與銀行ATM功能,主要功能如下: 1,登錄查詢余額 2,轉賬功能 3,提現功能 4,流水查詢 5,密碼修改 6,還款功能 7,退出(切換

使用QEMU模擬樹莓派

分配 文件系統 raspberry sys flag lba nano 允許 文件 QEMU上的樹莓派 我們開始設置一個Lab VM。我們將使用Ubuntu並在其中模擬我們所需的ARM版本。 首先,獲取最新的Ubuntu版本並在VM中運行它: ht

python 操作mysql數據庫之模擬購物系統登錄及購物

定義 普通用戶 [0 elif 選擇 oat value 退出程序 查看 python 操作mysql數據庫之模擬購物系統登錄及購物,功能包含普通用戶、管理員登錄,查看商品、購買商品、添加商品,用戶充值等。 mysql 數據庫shop 表結構創建如下: cr