折腾树莓派的时候经常会走弯路,回过头来又发现很多配置已经面目全非了,于是迫切需要一个虚拟机来踩雷。VirtualBox只能模拟x86,虽然Raspbian也有x86版本,但是源并不相同,导致真正在树莓派上操做的时候会发现有些库版本不对,有些库只有x86等等问题。于是选择Qemu。Qemu可以模拟各种架构的CPU,树莓派的ARM自然不在话下。然而树莓派并不只是一个CPU,还有内存、存储卡、网卡等等设备,于是Qemu的参数也要仔细选择。
截至目前(2020年8月),网上很多文章,然而要么不适用于新版本的Qemu,要么不适用于Windows。在参考各种文章并且反复实验之后,给出目前可用的Windows上配置流程:
0. 去https://qemu.weilnetz.de/下载Windows上最新的Qemu版本并安装(32位或者64位和Windows保持一致即可),一直点击下一步(全默认选项)就装好了
1. 去https://github.com/dhruvvyas90/qemu-rpi-kernel下载适用于Qemu的最新kernel以及dtb文件:kernel-qemu-4.14.79-stretch 和 versatile-pb-buster.dtb
2. 下载最新的Raspbian,目前的版本是2020-05-27:https://downloads.raspberrypi.org/raspios_armhf_latest
3. 解压下载好的Raspbian,得到其中的img文件,比如2020-05-27-raspios-buster-armhf.img
4. (可选)去Qemu的安装目录(默认在C:Program Filesqemu), 运行
qemu-img.exe convert -f raw -O qcow2 <YOUR-PATH>2020-05-27-raspios-buster-armhf.img <YOUR-PATH>image.qcow
将Raspbian的img转换为qcow2格式。这一步虽然可选,但是qcow2格式的好处是支持动态增长,即未使用的空间不会实际占用硬盘。生成的qcow文件相对于原始img文件更小,就是这个原因
5. 进行镜像扩容
qemu-img.exe resize <YOUR-PATH>image.qcow +10G
如果上一步省略了,这里的参数就要换成img文件,然后会发现img文件从3GB变成了13GB。而对于qcow文件,可以看到文件本身大小没有变化,但可以用下面的命令读取到镜像的虚拟容量变大了
qemu-img.exe info <YOUR-PATH>image.qcow
6. 启动qemu
qemu-system-arm.exe -M versatilepb -cpu arm1176 -m 256 -hda <YOUR-PATH>image.qcow -net user,hostfwd=tcp::5022-:22 -net nic -dtb <YOUR-PATH>versatile-pb-buster.dtb -kernel <YOUR-PATH>kernel-qemu-4.19.50-buster -append "root=/dev/sda2 panic=1"
7. 经过一两分钟,就可以看到Raspbian的桌面了,如果鼠标乱跑,可以把Qemu窗口最大化。网络也连接上了,只是ping可能有点问题,因为user后端无法转发icmp,需要再安装tap,太麻烦就不折腾了。更大的问题是磁盘空间不足。可以用df看一下,尽管前面已经给镜像扩容,但是根目录还是最初的3G左右。需要在Raspbian里面修改分区:
sudo fdisk /dev/sda #进入fdisk的提示符,下面输入的都是fdisk的命令 p #列出现有分区,会看到/dev/sda1和/dev/sda2两个。其中sda1有256M,sda2大约3G。记下sda2的start编号,我这里是532480 d #删除分区 #直接回车默认就是删除第二个 n #创建分区 #直接回车默认建立主分区 #再回车默认建立2号分区 532480 #这里输入的就是前面记录的start编号
#直接回车将分区扩展到最大
#如果提示ext4,选择No(不知道选择Yes会怎么样,而选No经过测试是没问题的) w #保存所作的修改
8. 重启虚拟机,再次进入桌面以后输入
sudo resize2fs /dev/sda2
再用df看一下,根目录应该已经扩展到13G了
9. 在Raspbian的配置里面打开ssh以后,可以在Windows上用ssh客户连接localhost:5022端口来访问树莓派。
用户名:pi
默认密码:raspberry