Jak skutecznie emulować RPI na OSX?

20

Postępowałem zgodnie z tym przewodnikiem, aby emulować RPI na OSX przez VirtualBox i działa. Teraz chciałbym trochę uprościć, ponieważ to rozwiązanie wymaga uruchomienia debiana na maszynie wirtualnej, aby uruchomić qemu na nim.

Poszukałem przewodników po tym, jak ustawić qemu prosto na osxie i znalazłem przewodnik Matthew Yee-Kinga . Postępowałem zgodnie z instrukcjami i wszystko wydaje się w porządku do ostatniej części. Po uruchomieniu qemu-system-armwidzę okno QEMU, ale aplikacja zawiesza się. Po chwili pojawia się w Menedżerze aktywności jako Nie odpowiada.

Czego mi brakuje ? Jak emulować RPI na OSX za pomocą QEMU?

George Profenza
źródło
2
Co chcesz naśladować? W rzeczywistości Raspbian RPi to po prostu Debian Linux dla architektury ARM plus specyficzne sterowniki / biblioteki RPi i wstępnie zainstalowane oprogramowanie. QEMU nie emuluje GPIO lub GPU RPi, to po prostu ogólny komputer oparty na ARM, który pozwala na uruchomienie Raspbian. Więc jeśli chcesz grać z XBMC, serwerem plików i tak dalej, po prostu zainstaluj Debian Wheezy x86 na VirtualBox i baw się dobrze. Możesz także zainstalować Scratch, PyGame itp.
kolontsov,
Nie jestem pewien, czy dobrze to przemyślałem, ale chciałbym wypróbować OpenCV i może OpenNI dla ARM na PI i pomyślałem o zrobieniu najpierw kilku testów za pomocą emulatora (więc mogę ćwiczyć, ile miejsca potrzebuję na to wszystko , baw się tym w podróży itp.) Czy opcja VirtualBox jest prostszym rozwiązaniem?
George Profenza
1
Tak, VirtualBox jest prostszy / szybszy niż emulacja ARM z QEMU. Nawiasem mówiąc, możesz skompilować OpenCV dla OS X ( opencv.org ) lub pobrać go w systemie Linux w VirtualBox. Tak samo jest na wszystkich platformach. Próbowałem użyć OpenCV na RPi do rozpoznawania twarzy, to było bardzo wolne. Przykro mi, ale nie mogę niczego polecić na OpenNI (ale nie sądzę, że QEMU poprawnie emuluje prędkość kamery i RPi).
kolontsov
@ vk2, choć nie na temat głównego pytania, ale związanych z moim celem, niedawno wydałem opakowanie OpenCV dla modułu Pi Camera: PiCapture , dostępne również jako dodatek do OpenFrameworks . Szybkość jest całkiem przyzwoita, zwłaszcza w porównaniu do używania kamery USB
George Profenza

Odpowiedzi:

16

Aby skonfigurować emulowane środowisko oprogramowania Raspberry Pi w OSX, potrzebne będą:

  • Narzędzie do kompilacji krzyżowej dla architektury procesorów RPi. (np. ARM EABI Toolchain)
  • Jądro RPi.
  • Główny system plików RPi.
  • Emulator (QEMU).
  • Narzędzie do kompilacji krzyżowej dla architektury ARM.

Zakładając, że masz już zainstalowane najnowsze Xcode i narzędzia wiersza poleceń od Apple Developer i homebrew, a następnie zainstaluj zależności:

brew install mpfr gmp libmpc libelf texinfo

Chwyć i skompiluj narzędzie:

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

Kompilacja jądra RPi

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

Chwyć plik konfiguracyjny i skonfiguruj jądro:

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

Zapisz konfigurację, a następnie zbudujmy jądro. Pamiętaj, że kompilacja powinna zakończyć się niepowodzeniem i narzekać na włączenie do skryptów / mod / mk_elfconfig. Jeśli tak, należy utworzyć plik:

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

Edytuj go i napisz:

#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

i wykonaj proces budowania:

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

Plik obrazu zostanie utworzony i umieszczony jako arch/arm/boot/zImage.

Emulator

Z powodu błędu białego ekranu zawieszającego QEMU, jeśli jest skompilowany z llvm, należy zainstalować pakiet apple-gcc42 z repozytorium duplikatów homebrew.

brew install homebrew/dupes/apple-gcc42

A następnie skompiluj i zainstaluj qemu:

brew install qemu —use-gcc

Teraz pozostaje nam wszystko, czego potrzeba, aby rozpocząć dystrybucję RPi, więc zacznijmy od:

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

Jak wspomniano na stronie mluis .

mluis
źródło
Odpowiedział na pytanie z niezbędnymi częściami.
mluis
1
Zgodnie z sugestią @ user1104942, może być konieczna zmiana następujących elementów, aby pracować w 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,
Czy instalacja tego kranu: github.com/nitsky/homebrew-stm32 nie zrobiłaby tego samego, co github.com/jsnyder/arm-eabi-toolchain.git ?
andsens
mimo wszystko emulowane i opracowane, czy mogę po prostu przechowywać .img na karcie SD i wprowadzić w raspberrypi?
mariomol
Wypróbowałem to na macOS 10.13.4 i dotarłem tylko tak daleko, jak make install-crossprzed trafieniem problemów. Dowiedziałem się też od Homebrew, że apple-gcc42„nie kompiluje się ani nie działa zgodnie z oczekiwaniami w wersjach macOS nowszych niż Mavericks z powodu niekompatybilności w górę”.
Josh Habdas,
3

Istnieje gotowa do uruchomienia płatna opcja działająca na QEMU: https://snorfi.us/raspiemu/

Jeśli nie chcesz za to płacić, możesz również pobrać wersję alfa w https://sourceforge.net/projects/raspberrypiemulator/

Felipe Plets
źródło
0

Wygląda na to, że krok „skonfiguruj jądro” wymaga nieco więcej. Zauważ, że

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

powinien być jeden z plików w tym katalogu, jak arm-none-eabi-ari arm-none-eabi-asetc ...

dangjavageek
źródło