Как подключить SD-карту с ОС Raspberry Pi к ПК с Linux и загрузить ОС в эмуляторе?
Почему не работает VMWare?
Каковы ограничения этого метода?
Связанный: Эмуляция на ПК с Windows
Как подключить SD-карту с ОС Raspberry Pi к ПК с Linux и загрузить ОС в эмуляторе?
Почему не работает VMWare?
Каковы ограничения этого метода?
Связанный: Эмуляция на ПК с Windows
Ответы:
Да, это вполне возможно. Однако на самом деле это немного отличается от того, как вы думаете.
SD-карта содержит образ операционной системы. И работает, надувая это изображение, когда устройство включено.
Как я ожидаю, вы уже знаете, что вы прошиваете это изображение на SD-карту, чтобы создать работающую систему. Однако то, что вы можете сделать перед тем, как прошить образ, - это поиграться с ним, используя QEMU , который является эмулятором процессора и позволяет нам эмулировать набор инструкций ARM.
Таким образом, любые изменения, которые вы вносите в образ (установка, компиляция и т. Д.), Будут сохраняться после того, как вы перенесете его на карту SD.
Сейчас я расскажу вам, как использовать QEMU для загрузки изображения. Я буду демонстрировать с помощью образа Arch Linux, но процесс должен быть одинаковым независимо.
Вам нужно будет приобрести 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: продемонстрировать, как скомпилировать образ ядра здесь?
Теперь вы должны иметь:
Виртуальная машина теперь может быть запущена с помощью следующей длинной команды:
qemu-system-arm -kernel zImage -cpu arm1176 -M versatilepb -serial stdio -append "root=/dev/sda2" -hda archlinuxarm-29-04-2012.img -clock dynticks
Обратите внимание, что при использовании этого метода у вас будет только несколько сотен мегабайт хранилища (что бы ни было на снимке). Виртуальный жесткий диск можно создать, следуя руководству пользователя QEMU .
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
Это работает только с последними 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
Бегать:
./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 из исходного кода. Но это не сложно.Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, модифицированное ядро
Этот метод использует, -M versatilepb
который присутствует в QEMU 2.5.0 Ubuntu 16.04.
Недостатком является то, что вам нужно загрузить модифицированное ядро (см. Эмуляция с Qemu: почему дополнительное ядро? ) И изменить образ, чтобы он был менее представительным для реальной системы.
Мы выбираем, 4.4.12
так как это версия ядра в образе Распбиана.
Процесс создания этого большого двоичного объекта ядра описан в хранилище по адресу: 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 используется по умолчанию, поэтому нам не нужно компилировать 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 с голым металлом
Вы не можете делать то, что вы предлагаете, потому что Raspberry Pi имеет архитектуру процессора, отличную от большинства ПК. В то время как большинство ПК основаны на x86, RPi - это компьютер на базе ARM.
Это та же самая причина, по которой вы не можете запустить, например, Microsoft Windows на RPi.
VmWare не будет работать, потому что он может виртуализировать только операционные системы на базе x86 (32-разрядные и 64-разрядные). Существуют другие эмуляторы, которые могут виртуализировать ARM, такие как QEMU, но в них запущена полная программная эмуляция без встроенной поддержки виртуализации ЦП, поэтому можно ожидать, что они будут довольно медленными.
Вы можете легко попробовать симулятор Raspberry Pi в комплекте с сенсором, командной строкой и редактором файлов на iotify.io. Ознакомьтесь с нашей документацией по адресу https://docs.iotify.io/, чтобы начать работу с различными проектами, ОС и ознакомиться с рабочей средой Raspberry Pi.