在Linux PC上仿真


48

如何将包含Raspberry Pi操作系统的SD卡连接到Linux PC,并在仿真器中启动操作系统?

为什么VMWare无法工作?

这种方法的局限性是什么?

相关:Windows PC上的仿真


这不是虚拟化问题,而不是仿真问题?
Zoot 2012年

1
我不喜欢虚拟化编辑的仿真...我们可以聊聊吗?
亚历克斯·张伯伦

2
基本问题是,Pi具有ARM cpu,该cpu与VMWare知道如何运行的x86不兼容。您需要一个模拟器。
托尔比约恩Ravn的安徒生

请注意,从Raspbian的许多功能(包括桌面环境PIXEL和大多数应用程序)定制的debian版本可以从Raspberry Pi网站上
angussidney,

Answers:


52

是的,这完全有可能。但是,实际上与您的想法有些不同。


前言

SD卡包含操作系统的映像。并通过在设备开机时放大此图像来工作。

如我所料,将映像镜像到SD卡上以创建一个工作系统。但是,刷新映像之前,您可以使用QEMU(它是一个处理器仿真器)对其进行处理,并允许我们仿真ARM指令集。

这样,将映像刷新到SD卡后,对映像所做的任何更改(安装,编译等)仍将保留在其中。

现在,我将向您介绍如何使用QEMU加载图像。我将使用Arch Linux映像进行演示,但是无论如何,该过程应该相同。


使用QEMU

先决条件

您将需要为您的系统获取QEMU。QEMU应该只有一个要求,为了使输入设备正常工作,您需要安装SDL开发包,该包应从包管理器中获取。

我建议您使用常规的软件包管理器下载软件包:

拱门

sudo pacman -S sdl qemu

Ubuntu的

较新的版本(自14.04版本开始)提供了一个软件包:

sudo apt-get install qemu-system-arm

对于旧版本:

sudo apt-get install libsdl-dev
sudo add-apt-repository ppa:linaro-maintainers/tools
sudo apt-get update
sudo apt-get install qemu-system

自己构建QEMU

另外,您可以自己构建QEMU。如果您想尝试一个新版本,那就太好了,但是它可能很慢,并且在编译过程中会为很多错误做好准备!请注意,如果从其网站构建QEMU,则必须对其进行编译以获取ARM支持。因此,请首先检查您的发行版存储库。可以这样做。

mkdir rpi-emu && cd rpi-emu
wget http://wiki.qemu.org/download/qemu-1.1.0-1.tar.bz2
tar xvjf qemu-1.1.0-1.tar.bz2
cd qemu-1.1.0-1
./configure –target-list=arm-softmmu,arm-linux-user
make
sudo make install

验证您是否具有ARM支持:

qemu-system-arm --version
QEMU emulator version 1.0,1, Copyright (c) 2003-2008 Fabrice Bellard

获取图像

我们正在使用Arch Linux,因此将使用Arch Arm映像。但是,将其替换为您希望使用的任何东西,或者您已经有了图像。在这种情况下,请跳过此步骤。

wget http://anorien.csc.warwick.ac.uk/mirrors/raspberrypi.org/images/archlinuxarm/archlinuxarm-29-04-2012/archlinuxarm-29-04-2012.zip
unzip archlinuxarm-29-04-2012.zip 

为了使QEMU正常工作,我们还需要内核映像(位于.img文件中)。

注意:我认为Debian不需要此步骤。有人请确认。

幸运的是,有可用的预编译图像,您可以从此处使用该图像(直接下载)。

TODO:在这里演示如何编译内核映像?

启动虚拟机

您现在应该拥有:

  • 可以使用提供的sha1验证的img文件(推荐)。
  • 内核映像(zImage)。
  • 适用于ARM的QEMU。

现在,可以使用以下冗长的命令来启动虚拟机:

qemu-system-arm -kernel zImage -cpu arm1176 -M versatilepb -serial stdio -append "root=/dev/sda2" -hda archlinuxarm-29-04-2012.img -clock dynticks

请注意,使用此方法将只有几百兆的存储空间(映像上剩余的空间)。可以通过遵循QEMU用户指南来创建虚拟硬盘。


这是我想要的更多-谢谢!这是一个很好的参考答案
Alex L

@Alex没问题,让我知道是否需要我详细说明。另外,请告诉我您是否可以使用debian映像,如果有不同,我们可以将其添加到说明中。
Jivings 2012年

有一个相当全面的演练在这里
亚历大号

@Alex那是一个很好的人,我没有看到。
Jivings 2012年

2
另一个已经关闭,所以我所能做的就是重新投票
-Jivings 2012年

8

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

在此处输入图片说明

  1. 从源代码编译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`
    
  2. 下载映像并从中提取内核和dts:

    1. 下载图像并解压缩:

      wget http://downloads.raspberrypi.org/raspbian/images/raspbian-2016-05-31/2016-05-27-raspbian-jessie.zip
      unzip 2016-05-27-raspbian-jessie.zip
      
    2. 挂载分区的第二个映像。最简单的方法是:

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

      这仅适用losetup于Ubuntu 16.04 上的最新版本,其他方法参见:https : //askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/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
      
  3. 跑:

    ./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,修改的内核

此方法使用-M versatilepbUbuntu 16.04的QEMU 2.5.0上存在的方法。

缺点是您必须下载修改后的内核(请参阅使用Qemu进行仿真:为什么要使用额外的内核?),并修改映像,因此它不能代表真实的系统。

  1. 下载: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模拟:为什么需要额外的内核?

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

    摘要:

    1. 像安装一样,安装映像-M raspi2,但是使用第二个分区而不是第一个分区:

      sudo mount /dev/loop0p2 /mnt/rpi
      
    2. 编辑图像:

      # 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
      
  3. 跑:

    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。但是,出现以下消息后,2.8.0会在启动时挂起:

Console: switching to colour frame buffer device 100x30

这表明-M raspi2仍然很不稳定。

[失败] Ubuntu 16.04,QEMU 2.9.0 -M raspi2,Raspbian 2017-08-16,香草内核

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

Please append a correct "root=" boot option; here are the available partitions:
...
[    4.138114] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

bztsrc/raspi3-tutorial QEMU上的RPI3裸机

https://github.com/bztsrc/raspi3-tutorial是仅适用于QEMU的一组很好的示例,ultraquick入门指南:如何对裸机Raspberry Pi图像进行QEMU仿真


2
杜德,你太棒了!
Subin

4

您无法按照您的建议去做,因为Raspberry Pi具有与大多数PC不同的处理器体系结构。大多数PC基于x86,而RPi是基于ARM的计算机。

这与无法运行(例如RPi上的Microsoft Windows)的原因相同。

VmWare无法工作,因为它只能虚拟化基于x86的操作系统(32位和64位)。还有其他可以虚拟化ARM的仿真器,例如QEMU,但是它们正在运行完整的软件仿真,而没有本机CPU虚拟化支持,因此您可以预期它们会非常慢。


3
您能否提供更多有关如何在x86 模拟RasPi的信息(即使用QEMU)?这是我真正想要关注的问题,尽管对此表示赞赏。
亚历克斯L

3
对不起,投反对票,但这并不能解释如何实现要求者的要求。
G-。

另一方面,它确实解决了其他答案没有解决的问题的其他问题。我认为您的选票是没有根据的(这也不是这个问题所引起的)

3
即使没有本机virt支持,慢速也是相对的,因为您可能是在比树莓派强大得多的机器上进行虚拟化
Kenneth Wilke 2015年

0

您可以在iotify.io上轻松尝试包含传感器,命令行和文件编辑器的Raspberry Pi模拟器。在https://docs.iotify.io/上查看我们的文档,以开始使用不同的项目,操作系统,并熟悉Raspberry Pi的工作环境。

在此处输入图片说明


1
从技术上来说,这是一个答案,但是您显然可以使用我们的网站进行一些免费的广告宣传。虽然您提供的内容可能是免费的,但仍然不行。感谢您为社区做出的贡献,但请将您的广告投放到其他地方。
达斯·维达

4
@DarthVader:自从发帖人告知他们已与该产品关联后,它的确回答了这个问题,所以我倾向于将其称为可接受的。
Jacobm001
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.