# QEMU如何搭建樹莓派環境
## 前言
對于嵌入式開發者和Linux愛好者而言,樹莓派是一個極具吸引力的開發平臺。然而,受限于硬件資源或開發場景,有時我們需要在PC上模擬樹莓派環境。QEMU作為一款開源的硬件虛擬化工具,能夠完美模擬ARM架構環境,本文將詳細介紹如何使用QEMU搭建樹莓派模擬環境。
---
## 一、準備工作
### 1.1 硬件/軟件需求
- **主機系統**:Linux(推薦Ubuntu/Debian)或macOS
- **必要組件**:
- QEMU系統模擬器(`qemu-system-arm`)
- 樹莓派內核鏡像(`kernel-qemu-*-raspbian`)
- 樹莓派系統鏡像(Raspbian/Raspberry Pi OS)
- 設備樹文件(`versatile-pb.dtb`)
### 1.2 安裝QEMU
```bash
# Ubuntu/Debian
sudo apt-get install qemu-system-arm
# macOS (通過Homebrew)
brew install qemu
從官方獲取最新Raspberry Pi OS Lite鏡像(無桌面環境更節省資源):
wget https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-YYYY-MM-DD/YYYY-MM-DD-raspios-bullseye-armhf-lite.img.xz
unxz YYYY-MM-DD-raspios-bullseye-armhf-lite.img.xz
wget https://github.com/dhruvvyas90/qemu-rpi-kernel/raw/master/kernel-qemu-5.10.63-bullseye
wget https://github.com/dhruvvyas90/qemu-rpi-kernel/raw/master/versatile-pb.dtb
注意:不同鏡像版本需匹配對應的內核文件。
原始鏡像僅約2GB,建議擴容:
qemu-img resize YYYY-MM-DD-raspios-bullseye-armhf-lite.img +4G
創建啟動腳本start_raspi.sh
:
#!/bin/bash
qemu-system-arm \
-M versatilepb \
-cpu arm1176 \
-m 256 \
-kernel kernel-qemu-5.10.63-bullseye \
-dtb versatile-pb.dtb \
-append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \
-drive file=YYYY-MM-DD-raspios-bullseye-armhf-lite.img,format=raw \
-net nic -net user,hostfwd=tcp::5022-:22 \
-no-reboot \
-nographic
賦予執行權限:
chmod +x start_raspi.sh
參數 | 作用 |
---|---|
-M versatilepb |
模擬Versatile PB板 |
-cpu arm1176 |
指定ARMv6架構CPU |
-m 256 |
分配256MB內存 |
-net user |
啟用網絡并設置SSH端口轉發 |
./start_raspi.sh
系統將啟動到登錄界面:
- 默認用戶名:pi
- 默認密碼:raspberry
sudo raspi-config
選擇 Advanced Options
> Expand Filesystem
sudo systemctl enable ssh
sudo systemctl start ssh
若需啟動桌面環境: 1. 下載完整版鏡像(非Lite版本) 2. 修改啟動參數:
-append "root=/dev/sda2 panic=1 rootfstype=ext4 rw console=ttyAMA0,115200 console=tty1" \
-serial stdio \
-vga virtio
# 主機端創建共享目錄
mkdir ~/share
# 啟動時添加參數:
-virtfs local,path=/home/user/share,mount_tag=share,security_model=mapped
在樹莓派內掛載:
sudo mkdir /mnt/share
sudo mount -t 9p -o trans=virtio,version=9p2000.L share /mnt/share
現象:啟動時出現Kernel panic - not syncing
解決方案:
- 檢查內核與鏡像版本匹配性
- 確認啟動參數中的root=
設備號正確(可能是sda1/sda2)
現象:無法ping通外網
解決方案:
sudo dhclient eth0
-enable-kvm -machine virt
-m 512
# 主機上編譯ARM程序
arm-linux-gnueabihf-gcc test.c -o test
# 通過共享文件夾傳輸到QEMU
./test
雖然QEMU無法真實模擬GPIO,但可通過設備模型測試邏輯:
#include <wiringPi.h>
int main() {
wiringPiSetup();
pinMode(0, OUTPUT); // 模擬GPIO17
digitalWrite(0, HIGH);
}
通過QEMU搭建樹莓派環境,開發者可以在不依賴實體硬件的情況下進行系統調試、應用開發和教學實驗。雖然存在性能損失和部分硬件功能限制,但其低成本和高靈活性的特點使其成為嵌入式開發的重要工具。隨著QEMU的持續更新,對樹莓派新特性的支持也將不斷完善。
資源推薦: - QEMU官方文檔 - Raspberry Pi Kernel Sources - QEMU-RPi項目 “`
(全文約1650字,實際字數可能因Markdown渲染略有差異)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。