Raspberry Pi — это недорогой микрокомпьютер, который можно приобрести всего за 40 долларов. За последнее время он набрал большую популярность среди разработчиков и пользователей, которые хотят создавать различные проекты. Он очень дешевый и в то же время позволяет делать множество вещей, начиная от домашнего медиацентра и до файлового хранилища или управления роботом.
Но перед тем, как вы точно решите что он вам нужен, желательно как-нибудь протестировать его возможности, например, с помощью эмулятора. Вы можете проверить в эмуляторе некоторые свои программы, чтобы понять как они будут работать на Raspberry. В этой статье мы рассмотрим как установить эмулятор Raspberry Pi 3 на свой компьютер под управлением Linux или Windows.
Установка эмулятора Raspberry Pi 3
Нам нужно будет сделать три вещи. Во-первых, необходимо раздобыть образ Raspberry Pi 3, во-вторых установить эмулятор Qemu, в котором мы сможем запустить образ, и скачать ядро Raspberry, специально предназначенное для Qemu, потому что с оригинальным ядром ничего не выйдет.
1. Загрузка образа Raspberry
Нам нужен самый обычный образ Raspberry, который используется для установки на реальное устройство. Вы можете использовать Raspbian Stretch самой последней версии. Эта инструкция тестировалась c образом stretch и jessie, хотя все должно заработать и при использовании Noobs версии или более новых версий в будущем. Вы можете скачать нужную версию на официальном сайте:
Здесь доступна как торрент версия, так и прямая ссылка на загрузку.
2. Установка Qemu
Qemu — это популярный эмулятор с открытым исходным кодом, который поддерживает огромное количество архитектур, среди которых и ARM процессор Raspberry Pi. Мы могли бы использовать VirtualBox, но там возможна эмуляция только компьютерной архитектуры x86, а это значит, что вы сможете запустить на нем только компьютерный Raspbian и ничего не добьетесь в плане тестирования. Поэтому давайте установим Qemu, установка программы довольно проста, в дистрибутивах Ubuntu выполните такую команду:
sudo apt-get install qemu qemu-kvm
Пакет qemu устанавливает поддержку всех архитектур, а kvm добавляет поддержку модуля ядра аппаратной виртуализации, который очень сильно увеличивает производительность гостевой системы. Мы уже рассматривали как пользоваться qemu. Чтобы посмотреть версию программы выполните:
qemu-system-arm --version
3. Подготовка окружения
Нам понадобится несколько файлов для того, чтобы запустить Raspberry Pi в эмуляторе, поэтому лучше создать одну рабочую папку:
mkdir ~/raspberry
Скопируйте в эту папку ваш образ Raspberry, который предварительно нужно извлечь из архива, если он запакован в zip:
unzip raspbian-stretch.zip
cp raspbian-stretch.img ~/raspberry/
Также можете переименовать этот образ в rpi.img чтобы просто копировать команды из этой инструкции и не вводить имя вручную. Но оригинальный файл оставьте в другой папке, чтобы если потом что-либо сломаете, не пришлось скачивать полтора гигабайта заново.
4. Подготовка образа
Наш образ просто так не загрузиться, и нам нужно его еще немного подправить. Нужно примонтировать корневую файловую систему образа, но это не так просто. Поскольку это образ диска, а не раздела и на нем есть своя файловая система то мы не можем его просто так примонтировать. Откройте файл в gparted:
sudo gparted raspberry-stretch.img
Найдите корневой раздел, размером четыре гигбайта с файловой системой Ext4 и нажмите «Свойства»:
Тут найдите надпись «Первый сектор», полученное число нужно умножить на 512 чтобы узнать по какому адресу нужно монтировать файловую систему, только после этого монтируем:
sudo mount -o loop,offset=48234496 raspberry-jessie.img /mnt
Затем откройте файл /mnt/etc/ld.preload.so и закомметируйте там одну строчку:
nano /mnt/etc/ld.so.preload
Сохраните изменения и закройте файл. Нужно еще добавить несколько правил udev, чтобы Raspbian правильно определял вашу SD карту. По большому счету программе неважно что это будет жесткий диск, файл или реальная SD карта, вот только она ожидает что это будет устройство /dev/mmcblk. Поэтому создайте файл 90-qemu.rules и добавьте туда такие строки:
nano /etc/udev/rules.d/90-qemu.rules
KERNEL=="sda", SYMLINK+="mmcblk0"
KERNEL=="sda?", SYMLINK+="mmcblk0p%n"
KERNEL=="sda2", SYMLINK+="root"
Сохраните изменения и отмонтируйте раздел:
sync
sudo umount /mnt
5. Получение ядра
Вы можете скачать ядро для вашего образа из специального репозитория Github. Или же просто используйте такую команду для загрузки всего репозитория:
git clone https://github.com/dhruvvyas90/qemu-rpi-kernel.git
Здесь есть не самые свежие версии ядер, но они вполне работают. Да, мы будем использовать ядро Jessie для Stretch, все будет работать.
6. Запуск эмулятора
Теперь все готово и мы можем запустить эмулятор Raspberry Pi 3. Для запуска эмулятора мы будем использовать вот такую команду:
qemu-system-arm -kernel ./qemu-rpi-kernel/kernel-qemu-4.4.26-jessie -cpu arm1176 -m 1024 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" -hda rpi.img
Здесь мы, кроме стандартных опций, qemu указываем параметры ядра root (корневой раздел) на /dev/sda2, нет это не в вашей файловой системе, это в файловой системе образа, указываем тип файловой системы — ext4.
Вы получите полноценную систему Raspbian ARM и сможете протестировать там все, что вам будет необходимо. Здесь можно протестировать запуск нужных вам программ, проверить как работает код и так далее. Что нельзя проверить, так это только работу портов ввода/вывода GPIO, но для этого не нужен эмулятор, есть специальные инструменты на Python. Если для вас не принципиально использовать архитектуру ARM, вы можете установить версию x86 операционной системы Raspbian на компьютер или VirtualBox, там все очень просто.
Эмулятор Raspberry Pi в Windows
Поскольку эту статью могут читать не только пользователи Linux, я не могу не затронуть проблему запуска эмулятора в Windows. Настроить эмулятор Raspberry Pi для Windows. Все работает по тому же принципу, только более автоматизировано. Скачать архив, который уже содержит образ, ядро и эмулятор qemu можно по ссылке.
Затем распакуйте архив и выполните двойной клик по файлу run.bat. Сразу же после этого начнется загрузка Raspbian Wheezy. После загрузки система запустит конфигуратор Raspberry Pi, raspi-config, ничего не рекомендуется менять, иначе рискуете получить проблемы со стабильностью.