我正在尝试使用QEMU模拟运行带有Raspbian操作系统的树莓派。我尝试了网上描述的几种方法,但都没有成功。
我发现我需要补丁一个适用于所需操作系统的Linux内核。在我的情况下,我选择了带有4.4内核的Raspbian Lite:
wget https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2016-05-31/2016-05-27-raspbian-jessie-lite.zip
unzip 2016-05-27-raspbian-jessie-lite.zip
rm 2016-05-27-raspbian-jessie-lite.zip
接着我从https://www.kernel.org/下载并加载了一个内核:
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.16.tar.gz
tar -xzf linux-4.4.16.tar.gz
rm linux-4.4.16.tar.gz
现在进行交叉编译内核:
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
cd linux-4.4.16
make vexpress_defconfig
make all
cd ..
现在我可以将引导镜像复制到我的工作空间,该镜像是一个压缩的内核镜像,在RAM中自动解压缩。
cp linux-4.4.16/arch/arm/boot/zImage zImage
并运行QEMU
qemu-system-arm -kernel zImage -M vexpress-a9 -m 1024 -cpu cortex-a9 -no-reboot -serial stdio -hda 016-05-27-raspbian-jessie-lite.img -append "root=/dev/sda2 rootfstype=ext4"
但是我看到的只是一个黑色的QEMU窗口. :(
我认为问题在于获取正确的内核。从互联网上复制一些内核从来没有成功过,因为它们不适合这个操作系统。
我应该如何构建/修补与操作系统匹配的内核(而不是下载现有的内核),以及如何正确运行QEMU?
提前感谢
Alex
第二种方法
我从这里加载一个kernel-qemu
并用它运行QEMU:
qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2" -hda 2016-05-27-raspbian-jessie-lite.img
这给我带来了以下输出:
对我来说这很有道理,因为内核是3.10.25,比Raspbian Jessie的内核4.4.16旧。
使用来自https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/master/kernel-qemu-4.4.12-jessie的qemu内核。qemu-system-arm -kernel kernel-qemu-4.4.12-jessie -cpu arm1176 -m 256 -M versatilepb -serial stdio -append "root=/dev/sda2 rootfstype=ext4 rw" -hda 2016-05-27-raspbian-jessie-lite.img
我得到了类似的结果:
使用新的kernel-qemu 4.4.16尝试:
从https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/master/tools复制build-kernel-qemu,并添加以下行以检查Kernel 4.4.16的版本:
运行
build-kernel-qemu
以构建内核运行 QEMU
git checkout b05965f284db3e086022f4e318e46cb5bffb1376
sh build-kernel-qemu
qemu-system-arm -kernel kernel-qemu -m 256 -M versatilepb -serial stdio -append "root=/dev/sda2 rootfstype=ext4 rw" -hda 2016-05-27-raspbian-jessie-lite.img