Емуляція на ПК з Linux


48

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

Чому VMWare не працює?

Які обмеження цього методу?

Пов'язане: Емуляція на ПК з Windows


Це не питання віртуалізації замість питання емуляції?
Zoot

1
Мені не подобається редагування емуляції до віртуалізації ... чи можемо ми поговорити про це?
Алекс Чемберлен

2
Основна проблема полягає в тому, що в Pi є процесор ARM, несумісний з x86, і це те, що VMWare вміє запускати. Вам потрібен емулятор.
Thorbjørn Ravn Andersen

Зауважте, що версія debian, налаштована на багато функцій Raspbian (включаючи PIXEL-середовище для робочого столу та більшість програм), доступна для завантаження з веб-сайту Raspberry Pi
angussidney

Відповіді:


52

Так, це цілком можливо. Однак насправді це трохи відрізняється від того, як ти думаєш.


Преамбула

SD-карта містить зображення операційної системи. І працює, надуваючи це зображення, коли пристрій увімкнено.

Як я вважаю, ви вже знаєте, ви проблискуєте це зображення на SD-карту, щоб створити робочу систему. Однак, ви можете зробити перед тим, як спалахнути зображення, - це пограти з ним за допомогою QEMU , який є емулятором процесора , і дозволяє нам емулювати набір інструкцій ARM.

Таким чином, будь-які зміни, які ви внесете до зображення (встановлення, компіляція тощо), залишатимуться там, після того, як ви пропрасуєте його на SD-карту.

Зараз я розповім, як використовувати QEMU для завантаження зображення. Я буду демонструвати зображення Arch 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: Продемонструйте, як тут скомпілювати зображення ядра?

Запуск ВМ

Тепер у вас повинно бути:

  • Файл 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 .


Це більше, що я був після - дякую! Це чудова відповідна відповідь
Алекс Л

@ Алекс Немає жодних проблем, повідомте мене, чи потрібно мені детально розробити. Крім того, скажіть, якщо ви працюєте із зображенням debian, і ми можемо додати його до інструкцій, якщо вони різні.
Відхилення

Там є досить ретельне проходження тут
Alex L

@Alex Це добре, я цього не бачив.
Відхилення

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оскільки це версія ядра у зображенні Raspbian.

    Процес створення цього блоку ядра описаний у сховищі за адресою: https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools

    Для чого потрібне це додаткове зображення ядра: Емуляція за допомогою Qemu: навіщо додаткове ядро?

  2. Змініть зображення Raspbian, як згадувалося на веб- сайті: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulation-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, надто швидкий початок роботи: Як зробити емуляцію QEMU для голого металу Raspberry Pi зображення


2
Чувак, ти чудовий!
Субін

4

Ви не можете робити те, що пропонуєте, тому що Raspberry Pi має іншу архітектуру процесора, ніж більшість ПК. Хоча більшість ПК базуються на x86, RPi - це комп'ютер на базі ARM.

Це та сама причина, чому ви не можете запустити, наприклад, Microsoft Windows на RPi.

VmWare не працюватиме, оскільки він може віртуалізувати лише операційні системи на базі x86 (32-бітні та 64-бітні). Є й інші емулятори, які можуть віртуалізувати ARM, наприклад, QEMU, але вони виконують повну емуляцію програмного забезпечення без вбудованої підтримки CPU, тому ви можете очікувати, що вони будуть досить повільними.


3
Чи можете ви включити додаткову інформацію про те, як емулювати RasPi на x86 (тобто за допомогою QEMU)? Саме на цьому я дуже хотів зосередити це питання, хоча це пояснення цінується.
Алекс Л

3
Вибачте за відмову в голосуванні, але це не пояснює, як досягти того, що потребує запитувач.
Г-.

З іншого боку, він вирішує інші питання, на які не відповідає інша відповідь. Я думаю, що ваші рейтинги є недоступними (це не так, як це питання ведуче)

3
Навіть без підтримки рідної вірте, повільний є досить відносним, оскільки ви, мабуть, віртуалізуєте на машині, значно потужнішій, ніж малиновий пі
Кеннет Вілке

0

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

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


1
Хоча технічно це і є відповідь, ви досить чітко використовуєте наш сайт для безкоштовної реклами. Хоча те, що ви пропонуєте, може бути безкоштовним, все одно не нормально. Ми цінуємо ваш внесок у співтовариство, але просимо взяти рекламу в іншому місці.
Дарт Вейдер

4
@DarthVader: Оскільки плакат дав зрозуміти, що вони пов'язані з продуктом, і він відповідає на питання, я схильний вважати це прийнятним.
Jacobm001
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.