1. 程式人生 > >使用QEMU模擬樹莓派

使用QEMU模擬樹莓派

分配 文件系統 raspberry sys flag lba nano 允許 文件

QEMU上的樹莓派

我們開始設置一個Lab VM。我們將使用Ubuntu並在其中模擬我們所需的ARM版本。

首先,獲取最新的Ubuntu版本並在VM中運行它:

  • https://www.ubuntu.com/download/desktop

對於QEMU仿真,您將需要以下內容:

  1. Raspbian圖像:http : //downloads.raspberrypi.org/raspbian/images/raspbian-2017-04-10/ (其他版本可能工作,但推薦Jessie)
  2. 最新的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的東西,那麽:

  1. 用/ dev / sda1替換包含/ dev / mmcblk0p1的第一個條目
  2. 用/ 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模擬樹莓派