qemu模擬arm系統vexpress-a9—uboot+uImage
1 概述
上一篇檔案介紹了qemu環境搭建,用核心映象zImage執行模擬器,可以很方便除錯核心。但現在嵌入式arm處理器廠商都會發布uboot+uImage的sdk形式給產品公司,有時候需要除錯uboot程式碼執行情況或是傳入到核心引數是否生效等等,所以模擬uboot+uImage執行也是很有必要的,qemu官方也給出了環境搭建的步驟,但是比較老了,如果按照那些步驟執行vexpress-a9會有很多問題。當然網上也有很多關於vexpress-a9這方面的文章,大家可以多搜搜,我寫這些東西一是給自己加深印象,二是希望把遇到的問題和解決方法給大家列的更詳細點,可以更快的對qemu熟悉起來。
若是實際的開發板,在
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-ifup和qemu-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平臺用virtualbox或vmware點點滑鼠就搞定,未免有些錯誤或不詳細的描述,同學們有興趣可以在我的微信公眾號上多多交流。
參考:
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-a9—uboot+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 以及嵌入式
基於QEMU的ARM 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