使用QEMU模擬樹莓派
我們開始設置一個Lab VM。我們將使用Ubuntu並在其中模擬我們所需的ARM版本。
首先,獲取最新的Ubuntu版本並在VM中運行它:
- https://www.ubuntu.com/download/desktop
對於QEMU仿真,您將需要以下內容:
- Raspbian圖像:http : //downloads.raspberrypi.org/raspbian/images/raspbian-2017-04-10/ (其他版本可能工作,但推薦Jessie)
- 最新的qemu內核:https://github.com/dhruvvyas90/qemu-rpi-kernel
在Ubuntu VM裏面,創建一個新的文件夾:
$ mkdir?/ qemu_vms /
下載並放置Raspbian Jessie圖像到?/ qemu_vms /。
下載並將qemu-kernel放置到?/ qemu_vms /。
$ sudo apt-get install qemu-system $ unzip <image-file> .zip $ fdisk -l <??image-file>
你應該看到這樣的東西:
磁盤2017-03-02-raspbian-jessie.img:4.1 GiB,4393533440字節,8581120扇區 單位:1 * 512 = 512字節的扇區 扇區大小(邏輯/物理):512字節/ 512字節I / O大小(最小/最佳):512字節/ 512字節 Disklabel類型:dos 磁盤標識符:0x432b3940 設備引導啟動結束扇區大小ID類型 2017-03-02-raspbian-jessie.img1 8192 137215 129024 63M c W95 FAT32(LBA) 2017-03-02-raspbian-jessie.img2 137216 8581119 8443904 4G 83 Linux
你會發現文件系統(.img2)從扇區137216開始。現在取這個值並乘以512,在這個例子中是512 * 137216 = 70254592字節。在以下命令中將此值用作偏移量:
$ sudo mkdir / mnt / raspbian$ sudo mount -v -o offset = 70254592 -t ext4? / qemu_vms / <your-img-file.img> / mnt / raspbian $ sudo nano /mnt/raspbian/etc/ld.so.preload
使用“#”註釋掉該文件中的每個條目,使用Ctrl-x?Y保存並退出。
$ sudo nano / mnt / raspbian / etc / fstab
如果你在fstab中看到任何有mmcblk0的東西,那麽:
- 用/ dev / sda1替換包含/ dev / mmcblk0p1的第一個條目
- 用/ dev / sda2替換第二個包含/ dev / mmcblk0p2的項,保存並退出。
$ cd? $ sudo umount / mnt / raspbian
現在你可以使用下面的命令在Qemu上模擬它:
$ qemu-system-arm -kernel?/ qemu_vms / <your-kernel-qemu> -cpu arm1176 -m 256 -M versatilepb -serial stdio -append“root = / dev / sda2 rootfstype = ext4 rw”-hda?/ qemu_vms / <your-jessie-image.img> -redir tcp:5022 :: 22 -no-reboot
如果您看到Raspbian OS的GUI,則需要進入終端。使用Win鍵獲取菜單,然後使用箭頭鍵導航,直到找到Terminal應用程序,如下所示。
從終端上,您需要啟動SSH服務,以便您可以從您的主機系統(您從其啟動qemu的系統)訪問它。
現在,您可以使用(默認密碼 - 樹莓派)從主機系統進行SSH連接:
$ ssh [email protected] -p 5022
有關更高級的網絡設置,請參閱下面的“高級網絡”一節。
故障排除
如果默認情況下啟動時SSH模擬器沒有啟動,您可以使用以下命令更改Pi終端內的內容:
$ sudo update-rc.d ssh enable
如果您的模擬Pi啟動GUI,並且想要在啟動時以控制臺模式啟動,請在Pi終端中使用以下命令:
$ sudo raspi-config >選擇3 - 引導選項 >選擇B1 - 桌面/ CLI >選擇B2 - 控制臺自動登錄
如果您的鼠標沒有在仿真的Pi中移動,請單擊<Windows>,向下箭頭至附件,向右箭頭,向下箭頭至終端,輸入。
調整Raspbian圖像的大小
一旦你完成了設置,你的圖像上總共剩下3,9GB,已滿。要放大Raspbian圖像,請在Ubuntu機器上執行以下步驟:
創建現有圖像的副本:
$ cp <your-raspbian-jessie> .img rasbian.img
運行此命令來調整您的副本的大小:
$ qemu-img resize raspbian.img + 6G
現在開始使用放大圖像作為第二個硬盤的原始raspbian:
$ sudo qemu-system-arm -kernel?/ qemu_vms / <kernel-qemu> -cpu arm1176 -m 256 -M versatilepb -serial stdio -append“root = / dev / sda2 rootfstype = ext4 rw”-hda?/ qemu_vms / <your-original-raspbian-jessie> .img -redir tcp:5022 :: 22 -no-reboot -hdb raspbian.img
登錄並運行:
$ sudo cfdisk / dev / sdb
刪除第二個分區(sdb2),並創建一個包含所有可用空間的新分區。一旦創建新的分區,使用寫入提交更改。然後退出 cfdisk。
調整大小並檢查舊分區並關閉。
$ sudo resize2fs / dev / sdb2 $ sudo fsck -f / dev / sdb2 $ sudo halt
現在您可以用放大的圖像啟動QEMU:
$ sudo qemu-system-arm -kernel?/ qemu_vms / <kernel-qemu> -cpu arm1176 -m 256 -M versatilepb -serial stdio -append“root = / dev / sda2 rootfstype = ext4 rw”-hda?/ qemu_vms / raspbian.img -redir tcp:5022 :: 22
高級網絡
在某些情況下,您可能需要訪問在QEMU中運行的虛擬機的所有端口。例如,你運行一些二進制文件,打開你想要從主機(Ubuntu)系統訪問/模糊的一些網絡端口。為此,我們可以創建一個共享網絡接口(tap0),它允許我們訪問所有打開的端口(如果這些端口沒有綁定到127.0.0.1)。感謝 @ 0xMitsurugi建議將其包含在本教程中。
這可以通過HOST(Ubuntu)系統上的以下命令來完成:
azeria @ labs:?$ sudo apt-get install uml-utilities azeria @ labs:?$ sudo tunctl -t tap0 -u azeria azeria @ labs:?$ sudo ifconfig tap0 172.16.0.1/24
在這些命令之後,您應該在ifconfig輸出中看到tap0接口。
azeria @ labs:?$ ifconfig tap0 tap0:flags = 4099 <UP,BROADCAST,MULTICAST> mtu 1500 inet 172.16.0.1網絡掩碼255.255.255.0廣播172.16.0.255 醚22:a8:a9:d3:95:f1 txqueuelen 1000(以太網) RX數據包0字節0(0.0 B) RX錯誤0丟棄0超限0幀0 TX分組0字節0(0.0 B) TX錯誤0丟棄0超載0載波0碰撞0
您現在可以使用以下命令啟動您的QEMU VM:
azeria @ labs:?$ sudo qemu-system-arm -kernel?/ qemu_vms / <kernel-qemu> -cpu arm1176 -m 256 -M versatilepb -serial stdio -append“root = / dev / sda2 rootfstype = ext4 rw” - hda?/ qemu_vms / rasbian.img -net nic -net tap,ifname = tap0,script = no,下標= no -no-reboot
當QEMU虛擬機啟動時,需要使用以下命令為其eth0接口分配一個IP:
pi @ labs:?$ sudo ifconfig eth0 172.16.0.2/24
如果一切順利的話,你應該能夠通過你的HOST(Ubuntu)系統訪問GUEST(Raspbian)上的開放端口。你可以用一個netcat(nc)工具來測試這個(見下面的例子)。
使用QEMU模擬樹莓派