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

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

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

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

  

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

47 голосов | спросил Alex L 13 J0000006Europe/Moscow 2012, 08:45:48

4 ответа


52

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


Преамбула

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

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

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

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


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

Prerequesites

Вам нужно будет приобрести QEMU для вашей системы. У QEMU должно быть только одно требование: чтобы устройства ввода работали, вам необходимо установить пакет разработки SDL, который должен быть доступен из вашего менеджера пакетов.

Я рекомендую загрузить пакет с помощью обычного менеджера пакетов:

Arch :

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-supporters /tools
Обновление sudo apt-get
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
делать
sudo make install

Убедитесь, что у вас есть поддержка ARM:

qemu-system-arm --version
QEMU эмулятор версии 1.0,1, Copyright (c) 2003-2008 Фабрис Беллард

Получение изображения

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

Запуск VM

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

  • Файл 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 14 J0000006Europe/Moscow 2012, 16:47:26
8

Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, ядро ​​ванили

 введите описание изображения здесь>> </a> </p>

<ol>
<li>
<p> Скомпилируйте QEMU 2.9.0 из источника: </p>

<pre><code>sudo apt-get build-dep qemu-system-arm
git clone --ресурсный git: //git.qemu-project.org/qemu.git
cd qemu
git checkout v2.9.0
./configure
make `nproc`
</code></pre>
</li>
<li>
<p> Загрузите изображение и извлеките из него ядро ​​и dts: </p>

<ol>
<li>
<p> Загрузите изображение и разархивируйте его: </p>

<pre><code>wget http://downloads.raspberrypi.org/raspbian/images/raspbian-2016-05-31/2016-05-27-raspbian-jessie.zip
unzip 2016-05-27-raspbian-jessie.zip
</code></pre>
</li>
<li>
<p> Установите второе изображение раздела. Самый простой способ: </p>

<pre><code>sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
</code></pre>

<p> Это работает только с последним <code>losetup</code> на Ubuntu 16.04, другие методы: <a href = 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
  • Run:

    ./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 \
        -сериал 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, так как это версия ядра в изображении Raspbian.

      Процесс создания этого явного blob описан в репозитории по адресу: Эмуляция с 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. Изменить изображение:

        # Комментарий из строки, присутствующей там с #
        sudo vim /mnt/rpi/etc/ld.so.preload
        # Комментируйте строки типа: "/dev /mmcblk *"
        sudo vim /mnt /rpi /etc /fstab
        
    3. Run:

      sudo apt-get install qemu-system-arm
      qemu-system-arm \
          -kernel kernel-qemu-4.4.12-jessie \
          -cpu arm1176 \
          -m 256 \
          -M universalatilepb \
          -no-reboot \
          -сериал stdio \
          -append "root = /dev /sda2 panic = 1 rootfstype = ext4 rw" \
          -hda2016-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 зависает при загрузке после сообщения:

    Консоль: переход на буферное устройство цветной рамки 100x30
    

    Это покажет, насколько еще нестабильный -M raspi2.

    [не удалось] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2017-08-16, ядро ​​ванили

    На этом более новом изображении, используя тот же метод для 2016-05-27, паника ядра при загрузке с помощью:

    Пожалуйста, добавьте правильный вариант загрузки root =; вот доступные разделы:
    ...
    [4.138114] --- [end Kernel panic - не синхронизация: VFS: невозможно монтировать root fs на неизвестном блоке (0,0)
    

    bztsrc /raspi3-tutorial RPI3 голый металл на QEMU

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

    ответил Ciro Santilli 新疆改造中心 六四事件 法轮功 25 PM000000100000004631 2016, 22:13:46
    4

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

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

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

    ответил Tibor 13 J0000006Europe/Moscow 2012, 09:10:43
    0

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

     введите описание изображения здесь>> </a> </p></div>
					 
						<div class=

    ответил iotify 1 FebruaryEurope/MoscowbWed, 01 Feb 2017 19:43:36 +0300000000pmWed, 01 Feb 2017 19:43:36 +030017 2017, 19:43:36

    Похожие вопросы

    Популярные теги

    security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132