使用qemu虚拟机运行树莓派(linux kernel 4.9)

https://blog.csdn.net/talkxin/article/details/79505826

  2018年5月8日更新,https://github.com/dhruvvyas90/qemu-rpi-kernel的项目已经更新,现已支持4.9内核的编译,大家可以参考编译。 
  同时按照本文操作也可以将树莓派虚拟起来,不过会遇到模块加载错误,导致网卡等驱动安装失败。如果用dhruvvyas90的方法重新编译内核就不会有这个问题,但是经过dhruvvyas90编译后的内核能否从新打包备份还原至树莓派上还存疑。

这篇博客起自于年前的一个想法,当时刚得到一个树莓派zero老版,因为没有Wi-Fi模块导致一些依赖安装特别困难,就想到能否用虚拟机来运行树莓派系统,然后通过镜像导出再写入到zero中,这样也能省去一些调试的麻烦,但是关于qemu虚拟树莓派的文章大都指向一个github项目就是dhruvvyas90的一个工程。之前适用于qemu的树莓派内核共享网站关闭,dhruvvyas90辛苦整理出了qemu启动树莓派的内核文件以及编译内核的脚本,但该工程停止更新到了kernel-qemu-4.4.34-jessie,同时在实际的使用中发现,编译脚本只适用于linux 4.4及以下的内核编译,若编译linux 4.5及以上的内核时该脚本均会出现编译错误,这个错误困扰了我好几个月终于整理出了一套简单的qemu虚拟树莓派的方法。

一、安装qemu:


1、依赖安装:

打开qemu下载页面https://www.qemu.org/download/有最新的依赖安装提示,该博客仅以QEMU emulator version 2.11.0为范本进行说明。

Linux: 

输入uname -a查看当前系统,根据系统运行依赖安装脚本即可从Linux上安装qemu。


mac: 
在mac上安装qemu需要注意的是官方要求mac os x最低要求为10.5系统,但建议使用mac os x 10.7及以上系统依赖安装qemu。 
1、安装软件包管理器HomeBrew:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"  

2、使用HomeBrew安装qemu:

brew install qemu

windows:

32位qemu下载地址: 
https://qemu.weilnetz.de/w32/ 
64位qemu下载地址: 
https://qemu.weilnetz.de/w64/

下载最新的exe安装包运行安装即可。

2、编译安装:

1、直接下载软件包编译安装:

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

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

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

二、制作树莓派内核:


1、从树莓派镜像中提取内核: 
  在https://www.raspberrypi.org/downloads/下载镜像后,挂载该镜像,可以发现在boot中有如下一些文件,需要注意的是*.img*.dtb文件: 

è¿éåå¾çæè¿°
  其中kernel.img与kernel7.img就是启动qemu所需的内核,*.dtd文件是设备树引导文件,对应树莓派的cpu及版本,其中kernel.img内核文件对应设备为:

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

这时候我们通过命令liuxin$ qemu-system-arm -M ?可以获得qemu所支持的arm设备:


可以得知现在qemu已经支持Raspberry Pi 2(2B)设备了,所以对应该设备我们需要将kernel7.img以及对应2Bbcm2709-rpi-2-b.dtb文件考出。

2、制作内核: 
1)首先需要在https://github.com/raspberrypi/linux.git下载合适的内核版本。

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

2)配置相应的开发环境: 
  编译内核时需要配置arm交叉编译环境,该环境可以通过依赖安装或直接使用树莓派官方提供的工具。

#依赖安装arm交叉编译环境:
sudo apt-get install gcc-arm-linux-gnueabihf
#下载官方提供的交叉编译工具
git clone git clone https://github.com/raspberrypi/tools.git


3)初始化配置文件,准备编译:

#编译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 


三、运行虚拟机


打开命令行输入:

qemu-system-arm -M raspi2 -kernel kernel7.img -sd 2017-11-29-raspbian-stretch.img -append "root=/dev/mmcblk0p2 rootwait" -dtb bcm2709-rpi-2-b.dtb -m 512M
//如果希望字符界面启动树莓派则将append后的参数改为
"rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootwait"


就可以看到虚拟机启动,并开始加载树莓派。 

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

猜你喜欢

转载自blog.csdn.net/wxh0000mm/article/details/90056453
4.9
今日推荐