Win10 下使用 Qemu 虛拟树莓派并配置联网

本文指导的是在 Windows 10 环境下利用QEMU模拟 Raspbian。

Raspbian 是专门用于 ARM 卡片式计算机 Raspberry Pi® “树莓派”的操作系统, 其基于 Debian 开发,针对 Raspberry Pi 硬件优化。

Raspbian 并非由树莓派的开发与维护机构 The Raspberry Pi Foundation “树莓派基金会” 官方支持。其维护者是一群 Raspberry Pi 硬件和 Debian 项目的爱好者。

安装QEMU

根据操作系统版本选择下载,一般选择64位的。

官方下载:https://www.qemu.org/download/#windows

Win10 下使用 Qemu 虛拟树莓派并配置联网

系统映像与内核

下载映像

从上海交通大学镜像站下载:https://mirrors.sjtug.sjtu.edu.cn/raspberry-pi-os-images/,解压得到 *.img 文件,即为系统映像文件

注:树莓派有多个镜像分支,我使用的是基于 Debian 的树莓派 Raspbian

https://mirrors.sjtug.sjtu.edu.cn/raspberry-pi-os-images/raspbian/images/

主要注意系统的版本代号,后面更换源的时候用到

架构:

  • arm64
  • armhf

版本:

  • wheezy
  • jessie
  • stretch
  • buster

注:Raspbian 系统由于从诞生开始就基于(为了armhf,也必须基于)当时还是 testing 版本的 7.0/wheezy,所以 Raspbian 不倾向于使用 stable/testing 表示版本。——摘自清华大学镜像站

选择内核

光有映像还不能跑起来,得有对应的内核文件。

下载 Qemu kernel for emulating Rpi on QEMU:

https://github.com/dhruvvyas90/qemu-rpi-kernel

这里有不同版本,可下载最新版,我下载的是:kernel-qemu-4.19.50-buster

https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/master/kernel-qemu-4.19.50-buster

配置网络环境

创建虚拟网卡

要让树莓派和互联网连接,需要依赖主机的互联网连接,因此需要借助一个虚拟网卡作桥接。使用OpenVPN为我们生成一个虚拟网卡,

OpenVPN官方下载(需要*):

http://build.openvpn.net/downloads/releases/

非*的途径请自行百度。

安装过程一路确定即可,完毕后在 Windows 的网络连接处应当会看到一个新的网卡,名字类似于:TAP-Win32 Adapter V9,右键将其重命名为一个简短且不带空格的名字,比如tap0

Win10 下使用 Qemu 虛拟树莓派并配置联网Win10 下使用 Qemu 虛拟树莓派并配置联网

使用现有网络与虚拟网卡桥接

还是在这个控制面板的查看网络连接界面中,找到你当前上网的物理网卡,右键 - 属性 ,选修卡切换至“共享”,勾选中“允许其他网络用户通过此计算机的Internet连接来连接”,然后下面下拉菜单选择刚刚的tap0,确定。

Win10 下使用 Qemu 虛拟树莓派并配置联网

至此准备工作完成。

运行

为了启动和管理方便,推荐将上面下载的镜像和内核放置在QEMU的安装文件夹内,也可新建一个文件夹,注意在资源引用路径上修改即可。下文假设 QEMU 和系统映像、内核都在同一目录下。

为了在以后可以一键启动虚拟机,并且方便修改启动参数,新建一个批处理文件,暂且命名为 run.bat,内容如下:

@echo off

.\qemu-system-arm -M versatilepb ^
-drive  format=raw,file=2012-07-15-wheezy-raspbian.img ^
-kernel  kernel-qemu-4.14.79-stretch ^
-net nic -net tap,ifname=tap0 ^
-cpu arm1176 ^
-m 256 ^
-dtb versatile-pb.dtb ^
-append "root=/dev/sda2 panic=1  rootfstype=ext4 rw"

pause

解释下需要更改的地方:

  • -drive format=raw,file=2012-07-15-wheezy-raspbian.img
    挂载的驱动器镜像,我这里用的是:2012-07-15-wheezy-raspbian.img,如果你的是其它文件,请改名;如果在其它文件夹,请改为绝对路径。
  • -kernel kernel-qemu-4.19.50-buster
    内核文件用的是 kernel-qemu-4.19.50-buster 文件,根据你的内核文件名替换。qemu-rpi-kernel-master.zip解压出来后,挑出来的文件,没有扩展名。如果在其它文件夹,请改为绝对路径。
  • -net nic -net tap,ifname=tap0
    表示使用Tap网络模式,ifname填入的就是刚刚虚拟网卡的名称,因此填入刚刚更名的tap0。

其他参数解释:

  • -cpu arm1176
    CPU用的是arm1176

  • -m 256
    内存是256M,有点偏小,但是因为versatilepb上有个bug,不允许大于256M。

  • -dtb versatile-pb-buster.dtb
    dtb文件是versatile-pb-buster.dtb,qemu-rpi-kernel-master.zip解压出来后,挑出来的文件,没有扩展名。如果文件不在QEMU文件夹,要加上地址。

  • -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw"
    未知

行末的^符号是长命令在脚本中换行的标记

保存后,双击.bat启动即可。

测试

主要测试网络环境。使用命令查看网络情况:

ip a

出现类似如下的输出即代表成功。主要观察eth0项的inet是一个合理的IP地址:192.168.137.52(每台机器在不同的网络环境都不一样),如果不存在即代表出错,尝试对照前文修改

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.137.52/24 brd 192.168.137.255 scope global eth0
       valid_lft forever preferred_lft forever

还有一种可能的原因是网卡的问题。比如,我的笔记本外接了绿联的外接网卡适配器,就会无法与虚拟网卡进行桥接,这时候在“配置网络环境”环节更换为其他网卡或许可以解决问题。

更换镜像源

目的是为了提高下载软件包下载速度。这个提升非常明显,强烈推荐更换为国内的镜像源。请直接参考:

https://mirror.tuna.tsinghua.edu.cn/help/raspbian/

关键是选对合适的系统版本(通常体现在img文件名上,见前文),如果一个不行就换另一个,总能对的。

比如我的wheezy版本的Raspbain就要使用jessie的镜像源,使用wheezy的却不行……我也不知道为什么。

Win10 下使用 Qemu 虛拟树莓派并配置联网

参考资料

https://blog.csdn.net/chilwb/article/details/106474387

https://mirror.tuna.tsinghua.edu.cn/help/raspbian/

https://wiki.archlinux.org/index.php/QEMU_(中文简介)#Tap

上一篇:MIT 6.828 qemu 安装问题


下一篇:VMware Ubuntu使用Qemu模拟开发板