我试图遵循Internet上的各种指南,以便在我的Fedora 22机器上模拟Raspberry Pi。我发现了这个问题:用QEMU模拟raspbian,并用它来找到kernel-qemu来获取内核。我从Raspberry Pi的好伙伴那里下载了2015-09-24-raspbian-jessie.img

当我尝试运行qemu-system-arm时,出现内核崩溃。我缺少什么吗?

这里是我键入的qemu-system-arm命令行:

qemu-system-arm -cpu arm1176 -m 256 -M versatilepb -no-reboot -nographic -kernel kernel-qemu -appc=2 console=ttyAMA0 rw" -hda 2015-09-24-raspbian-jessie.img -net nic -net user,hostfwd=tcp::9999-:22


内核消息:

sd 0:0:0:0: [sda] Attached SCSI disk
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <nico@fluxnic.net>
eth0: SMC91C11xFD (rev 1) at d089a000 IRQ 25 [nowait]
eth0: Ethernet addr: 52:54:00:12:34:56
mousedev: PS/2 mouse device common for all mice
TCP cubic registered
NET: Registered protocol family 17
input: AT Raw Set 2 keyboard as /devices/fpga:06/serio0/input/input0
input: ImExPS/2 Generic Explorer Mouse as /devices/fpga:07/serio1/input/input1
EXT2-fs (sda2): error: couldn't mount because of unsupported optional features (244)
EXT4-fs (sda2): couldn't mount as ext3 due to feature incompatibilities
EXT4-fs (sda2): recovery complete
EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 8:2.
devtmpfs: mounted
Freeing init memory: 120K
Kernel panic - not syncing: Attempted to kill init!
[<c0032bec>] (unwind_backtrace+0x0/0xf0) from [<c03064dc>] (panic+0x58/0x170)
[<c03064dc>] (panic+0x58/0x170) from [<c0044054>] (do_exit+0x5d0/0x68c)
[<c0044054>] (do_exit+0x5d0/0x68c) from [<c004435c>] (do_group_exit+0x40/0xb0)
[<c004435c>] (do_group_exit+0x40/0xb0) from [<c004ed48>] (get_signal_to_deliver+0x1a8/0x378)
[<c004ed48>] (get_signal_to_deliver+0x1a8/0x378) from [<c002f124>] (do_signal+0x90/0x518)
[<c002f124>] (do_signal+0x90/0x518) from [<c002fa64>] (do_notify_resume+0x48/0x54)
[<c002fa64>] (do_notify_resume+0x48/0x54) from [<c002cc38>] (work_pending+0x24/0x28)


评论

您是否尝试过模拟微缩图像?如果内核可以使用它,则必须为jessie。

哦,du!是的,当内核与img不匹配时,事情就坏了!如此微妙的图像有效...谢谢。

通用howto版本:raspberrypi.stackexchange.com/questions/165/…

#1 楼

正如@dastaan​​所说,内核版本需要与img文件匹配。我正在尝试使用带有3.18内核的4.1内核版本的映像文件。

现在我正在使用正确的映像,它可以工作。

谢谢!

编辑:非常简单地使它起作用:从https://github.com/dhruvvyas90/qemu-rpi-kernel/抓取图像,然后在https:// www下载所需的相应Raspian图像。 raspberrypi.org/downloads/raspbian/。目前,Jessie和Wheezy在这两个地方都存在,但是将来无法保证相应的内核将在该Github站点上可用。无论如何,我对速度并没有那么深刻的印象,所以我正在考虑将真正的Pi放在笔记本电脑的有线网络端口上,并通过5200 mAh手机辅助电池为它供电,并在笔记本电脑上使用VNC作为

我没让杰西工作;就是问题所在-我有一个Wheezy内核和Jessie映像,但我没有一个Jessie内核。

评论


您可以添加详细的答案,如何使用最新的内核解决它吗?它将帮助其他尝试模仿jessie的用户。谢谢。

–dhruvvyas90
15年11月14日在13:18

我一直在尝试使用jessie内核和jessie映像,但它们均因相同的错误而失败。一个4.1内核(github.com/dhruvvyas90/qemu-rpi-kernel/blob/master/…)和来自Raspbian的常规jessie发布于2015年5月。

– Michael McGarrah
2015年12月1日17:44



没有冒犯,但没有jessie内核之类的东西。使用raspbian netinstaller,您可以选择安装wheezy或jessie,在这两种情况下,都将安装完全相同的内核。

– Diederik de Haas
2015年12月8日,下午2:25

尽管确实按版本命名了内核,但我的问题不是如何下载raspbian netinstaller。我的问题是将Raspberry Pi的优秀人员的图像文件与正确的内核版本进行匹配。将来,我希望遇到这个问题的人们能看一下我的错误信息,并意识到他们可能遇到的问题。

– Mike S
16年4月12日在23:04

@MichaelMcGarrah在阅读该回购的Wiki后,使其开始工作:raspberrypi.stackexchange.com/a/53993/33424您必须对Raspbian图像进行一些调整。

– Ciro Santilli郝海东冠状病六四事件法轮功
16年8月25日在19:25

#2 楼

Ubuntu 16.04,QEMU 2.9.0 -M raspi2,Raspbian 2016-05-27,香草内核



步骤:


>
从源代码编译QEMU 2.9.0:

sudo apt-get build-dep qemu-system-arm
git clone --recursive git://git.qemu-project.org/qemu.git
cd qemu
git checkout v2.9.0
./configure
make `nproc`



下载图像并从中提取内核和dts:



下载映像并解压缩:

wget http://downloads.raspberrypi.org/raspbian/images/raspbian-2016-05-31/2016-05-27-raspbian-jessie.zip
unzip 2016-05-27-raspbian-jessie.zip



安装分区的第二个映像。最简单的方法是:

sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img


这仅适用于Ubuntu 16.04上的最新losetup,其他方法位于:https://askubuntu.com/questions/69363/mount-整个磁盘设备映像的单个分区/ 496576#496576

这将打印一个循环设备,例如:

/dev/loop0


执行以下操作:

sudo mkdir /mnt/rpi
sudo mount /dev/loop0p1 /mnt/rpi
cp /mnt/rpi/kernel7.img bcm2709-rpi-2-b.dtb .
sudo umount /mnt/rpi
sudo losetup -d /dev/loop0





运行:

./arm-softmmu/qemu-system-arm \
    -M raspi2 \
    -append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2" \
    -cpu arm1176 \
    -dtb bcm2709-rpi-2-b.dtb \
    -sd 2016-05-27-raspbian-jessie.img \
    -kernel kernel7.img \
    -m 1G \
    -smp 4 \
    -serial stdio \
;



然后您可以在主机终端上显示的终端上登录。

当前限制:




-M raspi2是在QEMU 2.6.0中添加的,而Ubuntu 16.04仅具有QEMU 2.5.0,因此我们必须从源代码编译QEMU。但这并不难。
GUI显示但未响应在SDL和VNC上测试过的鼠标/键盘。但是CLI可以完美地工作。因此,您最好使用现在具有GUI的Lite映像。
不联网

Ubuntu 16.04,QEMU 2.5.0,Raspbian 2016-05-27,修改的内核



此方法使用Ubuntu 16.04的QEMU 2.5.0上提供的-M versatilepb。缺点是必须下载修改后的内核(请参阅“使用Qemu进行仿真:为什么需要额外的内核?”),然后修改图片,因此它不太代表真实系统。




下载:https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/ kernel-qemu-4.4.12-jessie

我们选择4.4.12是因为Raspbian映像中的内核版本。

存储库中描述了生成该内核blob的过程:https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools

为什么这个额外的内核映像是需要:使用Qemu进行仿真:为什么要使用额外的内核?


修改Raspbian映像,如以下网址所述:https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating -Jessie-image-with-4.x.xx-kernel / 0068f0c21d942b0f331e18014ff8e22c20cada5c

摘要:




像我们一样安装图像-M raspi2,但使用第二个分区而不是第一个分区:

sudo mount /dev/loop0p2 /mnt/rpi



编辑图像:

# Comment out the line present there with #
sudo vim /mnt/rpi/etc/ld.so.preload
# Comment out the lines of type: "/dev/mmcblk*"
sudo vim /mnt/rpi/etc/fstab





运行:

sudo apt-get install qemu-system-arm
qemu-system-arm \
    -kernel kernel-qemu-4.4.12-jessie \
    -cpu arm1176 \
    -m 256 \
    -M versatilepb \
    -no-reboot \
    -serial stdio \
    -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \
    -hda 2016-05-27-raspbian-jessie.img



[失败] Ubuntu 17.04,QEMU 2.8.0 -M raspi2,Raspbian 2016-05-27,香草内核

在此较新的Ubuntu上,默认设置为QEMU 2.8.0,因此我们无需为-M raspi2从源代码编译QEMU。但是,在出现以下消息后,2.8.0会在启动时挂起: Ubuntu 16.04,QEMU 2.9.0 -M raspi2,Raspbian 2017-08-16,香草内核

在此更新的映像上,使用与2016-05-27相同的方法,内核在启动时会出现混乱:

Console: switching to colour frame buffer device 100x30


-M raspi2 QEMU上的RPI3裸机

https://github.com/bztsrc/raspi3-tutorial是不错的选择可以在QEMU上运行的示例,超快速入门从:如何对裸机Raspberry Pi图像进行QEMU仿真

评论


您使用Lostup的方法过于复杂。您可以改为使用fdisk -l your-image.img,然后在挂载选项-o loop,offset = $((512 * YOUR_OFFSET))中使用分区的偏移量。

–俄罗斯
17年8月14日在14:06

-M raspi2不起作用

–zhaofeng-shu33
19年11月3日在15:31

#3 楼

随时查看我启用qemu的内核:https://github.com/diederikdehaas/raspbian-kernel
在提交消息中,您可以找到有关更改内容和更改方式的详细说明。
大部分内容基于这篇文章:https://web.archive.org/web/20131210001638/http://xecdesign.com/compiling-a-kernel/

#4 楼

大多数指南已过时,并且包含断开的链接。您必须使用与正在使用的raspbian版本匹配的修补内核。

以下指南从2017年2月开始生效。它具有一个脚本,该脚本负责更改raspbian映像以在QEMU上运行,并且还会自动与raspbian共享您的网络连接。

https://ownyourbits.com/2017/02/06/raspbian-on-qemu-with-network-access/

#5 楼

您可以在我的github polaco1782上为Raspbian Jessie下载我的自定义内核(4.1.7)。请遵循文档文件上的说明。

评论


每次我尝试进行仿真时,您的内核都会使我进入紧急模式提示符。我按照读取文件中的说明进行操作。 (请参阅-> raspberrypi.org/forums/viewtopic.php?t=112259的最新文章)您可以编辑答案以逐步显示在基本jessie图像中所做的更改以使其起作用。既然jessie图像是实时的,它将对其他用户很方便,越来越多的用户将在qemu上模拟jessie。提前致谢。

–dhruvvyas90
2015年11月18日9:39



您能否扩大答案以解释内核的习惯?

– Greenonline
15年11月18日在16:46

我可以通过注释fstab mmcblk条目来解决我的问题。

–dhruvvyas90
2015年11月21日在12:44

@Greenonline由于qemu不支持Rpi平台,因此需要进行内核配置调整,以在Qemu上模拟rpi。您不能只采用Rpi内核并使其开箱即用。

–dhruvvyas90
15年11月21日在12:48