由於有些時候,Raspberry Pi 不在身邊或開發 Raspberry Pi 程式時,可利用 qemu 來模擬 arm 系統,執行開發的程式,除錯用。
在 windows 平台上也可以,請各位自行研究,小弟對 windows 實在沒興趣。
http://sourceforge.net/projects/rpiqemuwindows/
在 linux 上,裝上 qemu(是老大哥 qemu,不是 kvm)。
$ sudo apt-get install qemu
裝好後,系統上就有一堆平台的模擬器
$ ls /usr/bin/qemu-system-*
/usr/bin/qemu-system-alpha
/usr/bin/qemu-system-arm
/usr/bin/qemu-system-cris
/usr/bin/qemu-system-i386
/usr/bin/qemu-system-lm32
/usr/bin/qemu-system-m68k
/usr/bin/qemu-system-microblaze
/usr/bin/qemu-system-microblazeel
/usr/bin/qemu-system-mips
/usr/bin/qemu-system-mips64
/usr/bin/qemu-system-mips64el
/usr/bin/qemu-system-mipsel
/usr/bin/qemu-system-ppc
/usr/bin/qemu-system-ppc64
/usr/bin/qemu-system-ppcemb
/usr/bin/qemu-system-s390x
/usr/bin/qemu-system-sh4
/usr/bin/qemu-system-sh4eb
/usr/bin/qemu-system-sparc
/usr/bin/qemu-system-sparc64
/usr/bin/qemu-system-x86_64
/usr/bin/qemu-system-xtensa
/usr/bin/qemu-system-xtensaeb
因為 Raspberry Pi 是 arm,所以模擬 Raspberry Pi 就要用 qemu-system-arm
執行 qemu-system-arm 有幾個參數是必要的:
1.kernel
2.disk image
所以到 Raspberry Pi 官方網頁去下載最新的 disk image
http://www.raspberrypi.org/downloads
下載這個最新的 435M,解開後為 1.9G
2012-10-28-wheezy-raspbian.zip
由於 qemu 和真實的 raspberry pi 還是有些不同,因為無法使用 2012-10-28-wheezy-raspbian.zip 裡面提供的 kernel 來開機,須要自行編出 qemu 用的 kernel。
自己編出 qemu 用 kernel 說明
http://xecdesign.com/compiling-a-kernel/
但是網路上有人真的是佛心來的,已經幫忙編好了,再加上自己懶,用現成的就好,不過裡面會不會藏什麼怪東東,請小心使用。
http://elinux.org/File:ZImage.7z
抓下面那個 3.2.27 版的,上面 3.6.1 的不知道為什麼沒畫面
由於是 .7z ,用 7za 來解,若沒 7za 裝上
$ sudo apt-get install p7zip-full
解開後得到 zImage 檔
$ 7za x 20121016173340\!ZImage.7z
執行模擬器
$ qemu-system-arm -M versatilepb -cpu arm1176 -kernel zImage -m 512 -append root=/dev/sda2 -net nic -net user -hda 2012-10-28-wheezy-raspbian.img
-M 是 Machine type
-cpu 是 cpu type
-kernel 核心
-m 為記憶體大小
-append 開機時的 kernel 參數
-net nic -net user 這樣是一對,代表這台機器有一張網卡,而網路模式是 user mode
-hda 第一顆硬碟
在這邊使用最簡單的 user mode 網路,一開好就會有網路可用,但缺點是無法用 icmp(不能 ping) 及無法由 host 機器連入虛擬機器。
執行這指令後,應該就會有一個視窗彈出,並看到樹莓派的 logo 了。
不過若使用 elinux.org 的 kernel,開機中間會有一些錯誤訊息,找不到模組什麼的,這是因為我們只提供 kernel,而這個 kernel 是 3.2.27 版,而 2012-10-28-wheezy-raspbian.zip image 裡的是 3.2.27+ 版,不符合,所以此時無法載入任何模組,要解決此問題,只有自己編 kernel 了。反正沒那些模組一樣可以開機完成,對於僅測試來說是夠用的。
另外,若想要能用網路從 host 和虛擬機器溝通,能用的方式有很多種,比較簡單是用 bridge mode.
我們需要 tunctl 執行檔
$ sudo apt-get intall uml-utilities
建立一張網卡 tap0,讓你的使用者可存取,因此 your_normal_user 要改為你的登入帳號
$ sudo tunctl -t tap0 -u your_normal_user
新增一個 bridge 介面 br0
$ sudo apt-get intall bridge-utils
$ sudo brctl addbr br0
$ sudo ifconfig br0 up
$ sudo brctl addif br0 eth0 tap0
$ qemu-system-arm -M versatilepb -cpu arm1176 -kernel zImage -m 512 -append root=/dev/sda2 -net nic -net tap,ifname=tap0 -hda 2012-10-28-wheezy-raspbian.img
-net nic -net tap,ifname=tap0 有一張網卡,設定為使用 host 機器的 tap0
用這種模式,就可以直接 ssh 到 qemu 虛擬機器裡了。
以使用者 pi , 密碼 raspberry 登入
第一次會開啟選單做設定
如果在選單中鍵盤無法設定,結束選單直接修改
edit /etc/default/keyboard
XKBLAYOUT="us"
then
$ sudo /etc/init.d/keyboard-setup restart
開始體驗 Raspberry Pi :-)
感謝分享!
回覆刪除