¿Cómo emular con éxito RPI en OSX?

20

Seguí esta guía para emular RPI en OSX a través de VirtualBox y funciona. Ahora me gustaría simplificar un poco las cosas, ya que esta solución implica ejecutar Debian en una máquina virtual solo para ejecutar qemu encima.

Busqué en Google guías sobre cómo configurar qemu directamente en osx y encontré la guía de Matthew Yee-King . Seguí las instrucciones y todo parece estar bien hasta la última parte. Cuando inicio qemu-system-armveo que aparece la ventana QEMU pero la aplicación parece congelarse. Después de un tiempo aparece como No responde en Activity Manager.

Qué me estoy perdiendo ? ¿Cómo emulo RPI en OSX con QEMU?

George Profenza
fuente
2
¿Qué quieres emular? En realidad, Raspbian de RPi es solo Debian Linux para arquitectura ARM más controladores / bibliotecas específicas de RPi y software preinstalado. QEMU no emula la GPIO o GPU de RPi, es solo una computadora genérica basada en ARM que le permite iniciar Raspbian. Entonces, si quieres jugar con XBMC, servidor de archivos, etc., solo instala Debian Wheezy x86 en VirtualBox y diviértete. También puede instalar Scratch, PyGame, etc.
kolontsov
No estoy seguro de haberlo pensado correctamente, pero me gustaría probar OpenCV y tal vez OpenNI for ARM en el PI y pensé en hacer algunas pruebas primero usando un emulador primero (para poder entrenar cuánto espacio necesito para todo eso , juega con eso sobre la marcha, etc.) ¿Es la opción VirtualBox la solución más simple?
George Profenza
1
Sí, VirtualBox es más simple / más rápido que la emulación ARM con QEMU. Por cierto, puede compilar OpenCV para OS X ( opencv.org ) o descargarlo en Linux en VirtualBox. Es lo mismo en todas las plataformas. Intenté usar OpenCV en RPi para el reconocimiento facial, fue muy lento. No puedo recomendar nada en OpenNI, lo siento (pero no creo que QEMU emule la velocidad de la cámara y del RPi correctamente).
kolontsov
@ vk2, aunque fuera del tema de la pregunta principal, pero relacionado con mi propósito, recientemente lancé un contenedor OpenCV para el módulo de la cámara Pi: PiCapture , también disponible como complemento de OpenFrameworks . La velocidad es bastante decente, especialmente en comparación con el uso de una cámara USB
George Profenza

Respuestas:

16

Para configurar un entorno emulado del software Raspberry Pi en OSX, se necesitará:

  • Una herramienta de compilación cruzada para la arquitectura de CPU de RPi. (por ejemplo, ARM EABI Toolchain)
  • El RPi Kernel.
  • El sistema de archivos raíz RPi.
  • El emulador (QEMU).
  • La herramienta de compilación cruzada para la arquitectura ARM.

Suponiendo que uno ya tenga instaladas las últimas herramientas Xcode y de línea de comandos de Apple Developer y homebrew, debería instalar las dependencias:

brew install mpfr gmp libmpc libelf texinfo

Agarra y compila la herramienta:

mkdir ~/rpi
mkdir ~/rpi/arm-cs-tools
git clone https://github.com/jsnyder/arm-eabi-toolchain.git
cd arm-eabi-toolchain
PREFIX=$HOME/rpi/arm-cs-tools make install-cross
make clean
echo “export PATH=$HOME/rpi/arm-cs-tools/bin:$PATH” » ~/.bash_profile

La compilación del kernel RPi

mkdir ~/rpi/kernel
cd ~/rpi/kernel
git clone --depth=1 https://github.com/raspberrypi/linux.git
cd linux

Tome el archivo de configuración y configure el kernel:

cp arch/arm/configs/bcmrpi_cutdown_defconfig .config
make ARCH=arm CROSS_COMPILE=~/rpi/arm-cs-tools/bin/arm-none-eabi- menuconfig

Guarde la configuración y construyamos el núcleo después. Tenga en cuenta que la compilación debería fallar y quejarse de una inclusión en scripts / mod / mk_elfconfig. Si lo hace, uno debe crear el archivo:

sudo touch /usr/local/include/elf.h

Edítelo y escriba lo siguiente:

#include <libelf.h>

#define R_386_NONE 0
#define R_386_32 1
#define R_386_PC32 2
#define R_ARM_NONE 0
#define R_ARM_PC24 1
#define R_ARM_ABS32 2
#define R_MIPS_NONE 0
#define R_MIPS_16 1
#define R_MIPS_32 2
#define R_MIPS_REL32 3
#define R_MIPS_26 4
#define R_MIPS_HI16 5
#define R_MIPS_LO16 6

y siga el proceso de construcción:

make ARCH=arm CROSS_COMPILE=~/rpi/arm-cs-tools/bin/arm-none-eabi- -k

El archivo de imagen se crea y se ubica como arch/arm/boot/zImage.

El emulador

Debido a un error de una pantalla blanca que cuelga QEMU si se compila con llvm, uno debe instalar el paquete apple-gcc42 desde el repositorio de duplicados de homebrew.

brew install homebrew/dupes/apple-gcc42

Y luego compila e instala qemu como:

brew install qemu —use-gcc

Ahora nos queda todo lo que necesitamos para comenzar la distribución de RPi, así que comencemos así:

qemu-system-arm -M versatilepb -cpu arm1176 -hda debian6-19-04-2012.img -kernel zImage -append “root=/dev/sda2” -serial stdio -usbdevice tablet

Como se menciona en el sitio web de mluis .

mluis
fuente
Respondió la pregunta con partes esenciales.
mluis 01 de
1
Como sugerencia de @ user1104942, uno podría tener que cambiar lo siguiente para trabajar en Yosemite. #include <libelf/libelf.h> #define R_386_NONE 0 #define R_386_32 1 #define R_386_PC32 2 #define R_ARM_NONE 0 #define R_ARM_PC24 1 #define R_ARM_ABS32 2 #define R_MIPS_NONE 0 #define R_MIPS_16 1 #define R_MIPS_32 2 #define R_MIPS_REL32 3 #define R_MIPS_26 4 #define R_MIPS_HI16 5 #define R_MIPS_LO16 6 #define R_IA64_IMM64 7 #define R_PPC_ADDR32 8 #define R_PPC64_ADDR64 9 #define R_SH_DIR32 10 #define R_SPARC_64 11 #define R_X86_64_64 12 #define R_390_64 13 #define R_MIPS_64 14
mluis
¿No instalaría este grifo: github.com/nitsky/homebrew-stm32 haría lo mismo que github.com/jsnyder/arm-eabi-toolchain.git ?
andsens
después de todo emulado y desarrollado, ¿puedo almacenar este archivo .img en una tarjeta SD e ingresarlo en raspberrypi?
mariomol
Probé esto en macOS 10.13.4 y solo llegué tan lejos como make install-crossantes de encontrar problemas. Además, aprendí de Homebrew apple-gcc42"no se compila ni funciona como se esperaba en las versiones de macOS más nuevas que Mavericks debido a una incompatibilidad ascendente".
Josh Habdas
3

Hay una opción paga lista para ejecutar que se ejecuta sobre QEMU: https://snorfi.us/raspiemu/

Si no desea pagarlo, también puede descargar la versión alfa en https://sourceforge.net/projects/raspberrypiemulator/

Felipe Plets
fuente
0

Parece que el paso 'configurar el núcleo' necesita un poco más. Tenga en cuenta que

make ARCH=arm CROSS_COMPILE=~/rpi/arm-cs-tools/bin/arm-none-eabi- menuconfig 

debe ser uno de los archivos en ese directorio como arm-none-eabi-aro arm-none-eabi-asetc.

dangjavageek
fuente