Comment émuler avec succès RPI sur OSX?

20

J'ai suivi ce guide pour émuler RPI sur OSX via VirtualBox et cela fonctionne. Maintenant, je voudrais simplifier un peu les choses car cette solution implique d'exécuter Debian dans une machine virtuelle juste pour exécuter qemu par dessus.

J'ai recherché des guides sur la façon de configurer qemu directement sur osx et j'ai trouvé le guide de Matthew Yee-King . J'ai suivi les instructions et tout va bien jusqu'à la dernière partie. Lorsque je lance, qemu-system-armje vois la fenêtre QEMU apparaître mais l'application semble se figer. Après un certain temps, il apparaît comme ne répondant pas dans le gestionnaire d'activité.

Qu'est-ce que je rate ? Comment émuler RPI sur OSX avec QEMU?

George Profenza
la source
2
Que voulez-vous imiter? En fait, Raspbian de RPi est juste Debian Linux pour l'architecture ARM plus les pilotes / bibliothèques spécifiques de RPi et les logiciels préinstallés. QEMU n'émule pas le GPIO ou le GPU de RPi, c'est juste un ordinateur générique basé sur ARM qui vous permet de démarrer Raspbian. Donc, si vous voulez jouer avec XBMC, serveur de fichiers, etc., installez simplement Debian Wheezy x86 sur VirtualBox et amusez-vous. Vous pouvez également installer Scratch, PyGame etc
kolontsov
Je ne suis pas sûr d'avoir bien réfléchi, mais j'aimerais essayer OpenCV et peut-être OpenNI for ARM sur le PI et j'ai d'abord pensé à faire des tests en utilisant un émulateur (pour pouvoir déterminer l'espace dont j'ai besoin pour tout cela) , jouer avec ça en déplacement, etc.) L'option VirtualBox est-elle la solution la plus simple?
George Profenza
1
Oui, VirtualBox est plus simple / plus rapide que l'émulation ARM avec QEMU. Au fait, vous pouvez compiler OpenCV pour OS X ( opencv.org ) ou le télécharger sous Linux dans VirtualBox. C'est la même chose sur toutes les plateformes. J'ai essayé d'utiliser OpenCV sur RPi pour la reconnaissance faciale, c'était très lent. Je ne peux rien recommander sur OpenNI, désolé (mais je ne pense pas que QEMU émule correctement la caméra et la vitesse du RPi).
kolontsov
@ vk2 bien que hors sujet à la question principale, mais lié à mon objectif, j'ai récemment publié un wrapper OpenCV pour le module Pi Camera: PiCapture , également disponible en tant que module complémentaire OpenFrameworks . La vitesse est assez décente, surtout par rapport à l'utilisation d'une caméra USB
George Profenza

Réponses:

16

Pour configurer un environnement émulé du logiciel Raspberry Pi sur OSX, il faudra:

  • Un outil de compilation croisée pour l'architecture CPU de RPi. (par exemple, ARM EABI Toolchain)
  • Le noyau RPi.
  • Le système de fichiers racine RPi.
  • L'émulateur (QEMU).
  • L'outil de compilation croisée pour l'architecture ARM.

En supposant que l'on dispose déjà des derniers outils Xcode et de ligne de commande d'Apple Developer et homebrew installés, il faut alors installer les dépendances:

brew install mpfr gmp libmpc libelf texinfo

Saisissez et compilez l'outil:

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 compilation du noyau RPi

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

Saisissez le fichier de configuration et configurez le noyau:

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

Enregistrez la configuration et construisons ensuite le noyau. Notez que la compilation devrait échouer et se plaindre d'une inclusion dans scripts / mod / mk_elfconfig. Si c'est le cas, il faut créer le fichier:

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

Modifiez-le et écrivez ce qui suit:

#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

et suivez le processus de construction:

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

Le fichier image est créé et localisé sous arch/arm/boot/zImage.

L'émulateur

En raison d'un bug d'un écran blanc suspendu QEMU s'il est compilé avec llvm, il faut installer le paquet apple-gcc42 à partir du dépôt dupes de l'homebrew.

brew install homebrew/dupes/apple-gcc42

Et puis compilez et installez qemu comme:

brew install qemu —use-gcc

Il nous reste maintenant tout ce dont nous avons besoin pour démarrer la distribution RPi, alors commençons comme:

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

Comme indiqué sur le site Web de mluis .

mluis
la source
Répondu à la question avec des parties essentielles.
mluis
1
Comme suggéré par @ user1104942, il se peut que vous deviez changer ce qui suit pour travailler dans 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
L'installation de ce robinet: github.com/nitsky/homebrew-stm32 ne ferait - elle pas la même chose que github.com/jsnyder/arm-eabi-toolchain.git ?
andsens
après tout émulé et développé, puis-je simplement stocker ce .img sur une carte SD et entrer dans raspberrypi?
mariomol
J'ai essayé cela sur macOS 10.13.4 et je n'ai obtenu que des make install-crossproblèmes avant. En outre, j'ai appris de Homebrew apple-gcc42"ne compile pas ou ne fonctionne pas comme prévu sur les versions de macOS plus récentes que Mavericks en raison d'une incompatibilité en amont."
Josh Habdas
3

Il existe une option payante prête à fonctionner qui s'exécute sur QEMU: https://snorfi.us/raspiemu/

Si vous ne voulez pas payer, vous pouvez également télécharger la version alpha en https://sourceforge.net/projects/raspberrypiemulator/

Felipe Plets
la source
0

Il semble que l'étape «configurer le noyau» ait besoin d'un peu plus. Notez que

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

devrait être l'un des fichiers de ce répertoire comme arm-none-eabi-arou arm-none-eabi-asetc ...

dangjavageek
la source