##获取树莓派镜像
##安装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挂载上去