windows下使用quem虚拟机运行树莓派镜像

##获取树莓派镜像

  1. 从官网下载原生镜像
  2. 我们也会从一些树莓派的厂商获取到定制的镜像;
  3. 从github获取到树莓派源码,编译得到;

##安装qemu
qemu是虚拟机,AndroidStudio使用虚拟机的也是这玩意;大家可以去官网下载quem,下载地址:
32位qemu下载地址:
https://qemu.weilnetz.de/w32/
64位qemu下载地址:
https://qemu.weilnetz.de/w64/

当然,要是不嫌麻烦,也是可以通过编译quem源码得到安装包,下载源码也有两种方式,一种是官网下载源码压缩包,一种是通过github下载:
直接下载软件包编译安装

wget https://download.qemu.org/qemu-2.11.1.tar.xz
tar xvJf qemu-2.11.1.tar.xz
cd qemu-2.11.1
./configure
make
make install

通过git克隆软件包编译安装

git clone git://git.qemu.org/qemu.git --branch v2.11.1 --single-branch --depth 1
cd qemu
./configure
make

##制作树莓派内核

###从镜像中提取内核
使用quem启动树莓派镜像,就需要指定树莓派的内核,获取树莓派内核有两种方式,一种是直接从树莓派镜像中提取,这个比较简单,就是挂载树莓派img镜像,从里面提取到对应树莓派版本的*.img*.dtb文件;
比如我的是树莓派3b+,那么dtb为:bcm2710-rpi-3-b-plus.dtb

*.dtd文件是设备树引导文件,对应树莓派的cpu及版本

而内核文件的话,就是镜像目录下的kernel7.img ,细心的朋友会发现同级目录下还有一个kernel.img,这两个的区别在于:

kernel.img 对应 RPi 1B, 1A, A+, B+, 2B(第一版) Z, Z (摄像头版本), ZW, CM1
kernel7.img 对应 RPi2B2, RPi3B, CM3 and CM3L.

所以在这里我们使用的是kernel7.img;

###自己编译内核文件
第二种方式是自己编译了,作为程序员,我个人是比较喜欢自己编译的,首先我们需要下载到内核源码,这个源码我们可以从前面提到的github上面下载:https://github.com/raspberrypi/linux.git

因为内核版本较多,而且相对来说都比较大,我们可以选择合适的版本后通过克隆唯一分支来下载该版本。
git clone git://github.com/raspberrypi/linux.git --single-branch rpi-4.9.y --depth 1

编译的话自然就是用make指令了,在这之前我们需要安装交叉编译环境,已经安装可以跳过:

#依赖安装arm交叉编译环境:
sudo apt-get install gcc-arm-linux-gnueabihf

#下载官方提供的交叉编译工具
git clone git clone https://github.com/raspberrypi/tools.git

接下来就是配置好编译环境,执行编译:

#编译kernel7.img
KERNEL=kernel7
#初始化配置文件
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
#配置内核模块
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
#编译内核及dtb文件
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage dtbs
#将内核及dtb文件拷贝到自定义目录
cp arch/arm/boot/zImage ~/kernel7.img
cp qemu-rpi-kernel/linux/arch/arm/boot/dts/bcm2709-rpi-2-b.dtb ~/bcm2709-rpi-2-b.dtb 

##运行虚拟机

C:\Program Files\qemu>qemu-system-arm -M raspi2 -kernel F:\zImage -sd  E:\BaiduN
etdiskDownload\zhonglunshun-2018-07-15.img  -append "root=/dev/mmcblk0p2 rootwai
t" -dtb F:\bcm2710-rpi-3-b-plus.dtb -m 1024M

大家需要注意的地方是,F:\bcm2710-rpi-3-b-plus.dtb是我编译后再编译目录下\rpi-4.9.y\arch\arm\boot\dts\获取到的,而F:\zImage其实就是镜像文件中的kernel7.img,这个文件位于\rpi-4.9.y\arch\arm\boot\目录下;

然后我们就能看到树莓派镜像已经启动了,好好享受吧;

##额外知识:
从厂商或者第三方rom获取到的镜像可能有两个分区,那么在挂载的时候会提示挂载失败,正确的做法是指定挂载的分区:
首先执行fdisk命令,查看分区状况:

fdisk zhonglunshun-2018-07-15.img
然后输入p查看分区状态

我们看到:

Command (m for help): p
Disk zhonglunshun-2018-07-15.img: 7.4 GiB, 7948206080 bytes, 15523840 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x89ca6aff

Device                   Boot Start      End  Sectors  Size Id Type
zhonglunshun-2018-07-15.img1       8192    93814    85623 41.8M  c W95 FAT32 (LBA)
zhonglunshun-2018-07-15.img2      94208 15523839 15429632  7.4G 83 Linux

那么第二个img的起始地址就是512x8192=4194304

所以执行mount -o loop,offset=41943042 zhonglunshun-2018-07-15.img /mnt/
才能把这个img挂载上去

你可能感兴趣的:(单片机)