Як я можу підключити SD-карту, що містить Raspberry Pi OS, до мого ПК з ОС Linux та завантажувати ОС в емуляторі?
Чому VMWare не працює?
Які обмеження цього методу?
Пов'язане: Емуляція на ПК з Windows
Як я можу підключити SD-карту, що містить Raspberry Pi OS, до мого ПК з ОС Linux та завантажувати ОС в емуляторі?
Чому VMWare не працює?
Які обмеження цього методу?
Пов'язане: Емуляція на ПК з Windows
Відповіді:
Так, це цілком можливо. Однак насправді це трохи відрізняється від того, як ти думаєш.
SD-карта містить зображення операційної системи. І працює, надуваючи це зображення, коли пристрій увімкнено.
Як я вважаю, ви вже знаєте, ви проблискуєте це зображення на SD-карту, щоб створити робочу систему. Однак, ви можете зробити перед тим, як спалахнути зображення, - це пограти з ним за допомогою QEMU , який є емулятором процесора , і дозволяє нам емулювати набір інструкцій ARM.
Таким чином, будь-які зміни, які ви внесете до зображення (встановлення, компіляція тощо), залишатимуться там, після того, як ви пропрасуєте його на SD-карту.
Зараз я розповім, як використовувати QEMU для завантаження зображення. Я буду демонструвати зображення Arch 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
оскільки це версія ядра у зображенні Raspbian.
Процес створення цього блоку ядра описаний у сховищі за адресою: https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools
Для чого потрібне це додаткове зображення ядра: Емуляція за допомогою Qemu: навіщо додаткове ядро?
Змініть зображення Raspbian, як згадувалося на веб- сайті: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulation-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, надто швидкий початок роботи: Як зробити емуляцію QEMU для голого металу Raspberry Pi зображення
Ви не можете робити те, що пропонуєте, тому що Raspberry Pi має іншу архітектуру процесора, ніж більшість ПК. Хоча більшість ПК базуються на x86, RPi - це комп'ютер на базі ARM.
Це та сама причина, чому ви не можете запустити, наприклад, Microsoft Windows на RPi.
VmWare не працюватиме, оскільки він може віртуалізувати лише операційні системи на базі x86 (32-бітні та 64-бітні). Є й інші емулятори, які можуть віртуалізувати ARM, наприклад, QEMU, але вони виконують повну емуляцію програмного забезпечення без вбудованої підтримки CPU, тому ви можете очікувати, що вони будуть досить повільними.
Ви можете легко спробувати симулятор Raspberry Pi, що входить до датчика, командного рядка та редактора файлів на iotify.io. Перегляньте нашу документацію за адресою https://docs.iotify.io/, щоб розпочати роботу з різними проектами, ОС та ознайомитись із робочим середовищем Raspberry Pi.