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

    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。
系统     依赖安装脚本
Arch     pacman -S qemu
Debian/Ubuntu     apt-get install qemu
Fedora     dnf install @virtualization
Gentoo     emerge –ask app-emulation/qemu
RHEL/CentOS     yum install qemu-kvm
SUSE     zypper install 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设备:
参数     设备说明
akita     Sharp SL-C1000 (Akita) PDA (PXA270)
ast2500-evb     Aspeed AST2500 EVB (ARM1176)
borzoi     Sharp SL-C3100 (Borzoi) PDA (PXA270)
canon-a1100     Canon PowerShot A1100 IS
cheetah     Palm Tungsten
collie     Sharp SL-5500 (Collie) PDA (SA-1110)
connex     Gumstix Connex (PXA255)
cubieboard     cubietech cubieboard
emcraft-sf2     SmartFusion2 SOM kit from Emcraft (M2S010)
highbank     Calxeda Highbank (ECX-1000)
imx25-pdk     ARM i.MX25 PDK board (ARM926)
integratorcp     ARM Integrator/CP (ARM926EJ-S)
kzm     ARM KZM Emulation Baseboard (ARM1136)
lm3s6965evb     Stellaris LM3S6965EVB
lm3s811evb     Stellaris LM3S811EVB
mainstone     Mainstone II (PXA27x)
midway     Calxeda Midway (ECX-2000)
mps2-an385     ARM MPS2 with AN385 FPGA image for Cortex-M3
mps2-an511     ARM MPS2 with AN511 DesignStart FPGA image for Cortex-M3
musicpal     Marvell 88w8618 / MusicPal (ARM926EJ-S)
n800     Nokia N800 tablet aka. RX-34 (OMAP2420)
n810     Nokia N810 tablet aka. RX-44 (OMAP2420)
netduino2     Netduino 2 Machine
none     empty machine
nuri     Samsung NURI board (Exynos4210)
palmetto-bmc     OpenPOWER Palmetto BMC (ARM926EJ-S)
raspi2     Raspberry Pi 2
realview-eb     ARM RealView Emulation Baseboard (ARM926EJ-S)
realview-eb-mpcore     ARM RealView Emulation Baseboard (ARM11MPCore)
realview-pb-a8     ARM RealView Platform Baseboard for Cortex-A8
realview-pbx-a9     ARM RealView Platform Baseboard Explore for Cortex-A9
romulus-bmc     OpenPOWER Romulus BMC (ARM1176)
sabrelite     Freescale i.MX6 Quad SABRE Lite Board (Cortex A9)
smdkc210     Samsung SMDKC210 board (Exynos4210)
spitz     Sharp SL-C3000 (Spitz) PDA (PXA270)
sx1     Siemens SX1 (OMAP310) V2
sx1-v1     Siemens SX1 (OMAP310) V1
terrier     Sharp SL-C3200 (Terrier) PDA (PXA270)
tosa     Sharp SL-6000 (Tosa) PDA (PXA255)
verdex     Gumstix Verdex (PXA270)
versatileab     ARM Versatile/AB (ARM926EJ-S)
versatilepb     ARM Versatile/PB (ARM926EJ-S)
vexpress-a15     ARM Versatile Express for Cortex-A15
vexpress-a9     ARM Versatile Express for Cortex-A9
virt-2.10     QEMU 2.10 ARM Virtual Machine
virt     QEMU 2.11 ARM Virtual Machine (alias of virt-2.11)
virt-2.11     QEMU 2.11 ARM Virtual Machine
virt-2.6     QEMU 2.6 ARM Virtual Machine
virt-2.7     QEMU 2.7 ARM Virtual Machine
virt-2.8     QEMU 2.8 ARM Virtual Machine
virt-2.9     QEMU 2.9 ARM Virtual Machine
xilinx-zynq-a9     Xilinx Zynq Platform Baseboard for Cortex-A9
z2     Zipit Z2 (PXA27x)

可以得知现在qemu已经支持Raspberry Pi 2(2B)设备了,所以对应该设备我们需要将kernel7.img以及对应2B的bcm2709-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"

 

就可以看到虚拟机启动,并开始加载树莓派。
这里写图片描述
这里写图片描述
---------------------
版权声明:本文为CSDN博主「PaulYoung_Blog」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/talkxin/article/details/79505826

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值