Эмуляция на ПК с Linux

48

Как подключить SD-карту с ОС Raspberry Pi к ПК с Linux и загрузить ОС в эмуляторе?

Почему не работает VMWare?

Каковы ограничения этого метода?

Связанный: Эмуляция на ПК с Windows

Алекс Л
источник
Разве это не вопрос виртуализации, а не вопрос эмуляции?
Zoot
1
Мне не нравится редактирование эмуляции виртуализации ... мы можем поговорить об этом?
Алекс Чемберлен
2
Основная проблема заключается в том, что Pi имеет процессор ARM, который несовместим с x86, и это то, что VMWare знает, как работать. Вам нужен эмулятор.
Торбьерн Равн Андерсен
Обратите внимание, что версия Debian, настроенная со многими функциями Raspbian (включая среду рабочего стола PIXEL и большинство приложений), доступна для загрузки с веб-сайта Raspberry Pi
angussidney

Ответы:

52

Да, это вполне возможно. Однако на самом деле это немного отличается от того, как вы думаете.


преамбула

SD-карта содержит образ операционной системы. И работает, надувая это изображение, когда устройство включено.

Как я ожидаю, вы уже знаете, что вы прошиваете это изображение на SD-карту, чтобы создать работающую систему. Однако то, что вы можете сделать перед тем, как прошить образ, - это поиграться с ним, используя QEMU , который является эмулятором процессора и позволяет нам эмулировать набор инструкций ARM.

Таким образом, любые изменения, которые вы вносите в образ (установка, компиляция и т. Д.), Будут сохраняться после того, как вы перенесете его на карту SD.

Сейчас я расскажу вам, как использовать QEMU для загрузки изображения. Я буду демонстрировать с помощью образа Arch Linux, но процесс должен быть одинаковым независимо.


Использование QEMU

Prerequesites

Вам нужно будет приобрести 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: продемонстрировать, как скомпилировать образ ядра здесь?

Запуск ВМ

Теперь вы должны иметь:

  • IMG-файл, который вы можете проверить, используя прилагаемый sha1 (рекомендуется).
  • Образ ядра (zImage).
  • QEMU для ARM.

Виртуальная машина теперь может быть запущена с помощью следующей длинной команды:

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

Обратите внимание, что при использовании этого метода у вас будет только несколько сотен мегабайт хранилища (что бы ни было на снимке). Виртуальный жесткий диск можно создать, следуя руководству пользователя QEMU .

Jivings
источник
Это больше, чем я был после - спасибо! Это отличный справочный ответ
Alex L
@ Алекс Нет проблем, дайте мне знать, если вы хотите, чтобы я уточнил. Также, скажите мне, если у вас работает образ Debian, и мы можем добавить его в инструкции, если он другой.
Jivings
Там есть достаточно тщательное прохождение здесь
Alex L
@ Алекс Это хорошо, я бы этого не видел.
Jivings
2
Другое закрыто, поэтому все, что я могу сделать, это проголосовать, чтобы вновь открыться
Jivings
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 работает отлично, однако. Таким образом, вы могли бы также использовать образ Lite, который сейчас имеет графический интерфейс.
  • нет сети

Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, модифицированное ядро

Этот метод использует, -M versatilepbкоторый присутствует в QEMU 2.5.0 Ubuntu 16.04.

Недостатком является то, что вам нужно загрузить модифицированное ядро ​​(см. Эмуляция с Qemu: почему дополнительное ядро? ) И изменить образ, чтобы он был менее представительным для реальной системы.

  1. Загрузить: https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie

    Мы выбираем, 4.4.12так как это версия ядра в образе Распбиана.

    Процесс создания этого большого двоичного объекта ядра описан в хранилище по адресу: 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 используется по умолчанию, поэтому нам не нужно компилировать QEMU из исходного кода для -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 RPI3 голый металл на QEMU

https://github.com/bztsrc/raspi3-tutorial представляет собой хороший набор примеров, которые работают только с QEMU. UltraQuick начинается с: Как сделать эмуляцию QEMU для изображений Raspberry Pi с голым металлом

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник
2
Чувак, ты великолепен!
Субин
4

Вы не можете делать то, что вы предлагаете, потому что Raspberry Pi имеет архитектуру процессора, отличную от большинства ПК. В то время как большинство ПК основаны на x86, RPi - это компьютер на базе ARM.

Это та же самая причина, по которой вы не можете запустить, например, Microsoft Windows на RPi.

VmWare не будет работать, потому что он может виртуализировать только операционные системы на базе x86 (32-разрядные и 64-разрядные). Существуют другие эмуляторы, которые могут виртуализировать ARM, такие как QEMU, но в них запущена полная программная эмуляция без встроенной поддержки виртуализации ЦП, поэтому можно ожидать, что они будут довольно медленными.

Сообщество
источник
3
Не могли бы вы включить больше информации о том, как эмулировать RasPi на x86 (то есть с QEMU)? Это то, на чем я действительно хотел сфокусировать этот вопрос, хотя объяснение приветствуется.
Алекс Л
3
Извините за отрицательное голосование, но это не объясняет, как достичь того, что нужно спрашивающему.
Большой.
С другой стороны, он затрагивает другие вопросы, на которые другой ответ не отвечает. Я думаю, что ваши отрицательные голоса не заслуживают внимания (это не так, как этот вопрос также ведет)
3
Даже без встроенной поддержки вирта, slow довольно относительный, поскольку вы, вероятно, виртуализируете на машине, гораздо более мощной, чем малиновый пи
Кеннет Уилк,
0

Вы можете легко попробовать симулятор Raspberry Pi в комплекте с сенсором, командной строкой и редактором файлов на iotify.io. Ознакомьтесь с нашей документацией по адресу https://docs.iotify.io/, чтобы начать работу с различными проектами, ОС и ознакомиться с рабочей средой Raspberry Pi.

введите описание изображения здесь

iotify
источник
1
Хотя технически это ответ, вы довольно четко используете наш сайт для бесплатной рекламы. Хотя то, что вы предлагаете, может быть бесплатным, это все еще не хорошо. Мы ценим ваш вклад в сообщество, но, пожалуйста, разместите вашу рекламу в другом месте.
Дарт Вейдер
4
@DarthVader: Поскольку постер сообщил, что они связаны с продуктом, и он отвечает на вопрос, я склонен назвать его приемлемым.
Jacobm001