Od pewnego czasu próbuję uruchomić emulację Raspberry Pi na Mac OS X. Niestety cały czas bez powodzenia (aż do dzisiaj 🙂 ). Ostatnio znalazłem tutaj instrukcję jak podejść do tego tematu skutecznie.
Co będziemy potrzebowali?
- środowiska Xcode to 4.3 lub nowszego.
- narzędzi Xcode Command Line Tools (jeżeli już posidamy Xcode to w celu instalacji narzędzi możesz wydać polecenie xcode-select –install).
- najnowszą wersję Homebrew. Starsze wersje Homebrew posiadają starą wesję QEMU, która nie wspiera zestawu instrukcji 1176 procesora ARM wykorzystywanego przez Rasberry Pi .
Xcode
Pierwsze dwa punkty pominąłem ponieważ korzystam na codzień z Xcode oraz narzędzi Xcode Command Line Tools.
Homebrew
Jeśli chodzi o Homebrew, to posiadałem już zainstalowaną poprzednią wersję – przystąpiłem więc zgodnie z instrukcją do jego aktualizacji:
brew update brew outdated brew upgrade
czasami, gdy nie wszystko pójdzie zgodnie z planem, pomaga wydanie polecenia
brew doctor
QEMU
Ponieważ kilka poprzednich moich podejść do instalacji QEMU na Mac OS X zakończyło się niepowodzeniem, zgodnie z radą postanowiłem skorzystać z wersji QEMU 1.1.0.
cd /usr/local/ # lub inny katalog, w którym został zainstalowany Homebrew
git checkout 2b7b4b3 Library/Formula/qemu.rb
Aby skompilować poprawnie QEMU potrzebujemy odpowiedniej wersji gcc (wersja kompilatora llvm dostarczana razem z Xcode posiada podobno jakiś bug, który uniemożliwia poprawną kompilację QEMU).
brew install https://raw.github.com/Homebrew/homebrew-dupes/master/apple-gcc42.rb
Przystępujemy do kompilacji QEMU.
brew install qemu --env=std --cc=gcc-4.2
Na koniec potrzebujemy jeszcze plików z systemem, który będziemy chcieli uruchomić w ramach QEMU. Można je pobrać tutaj. Podaję też bezpośrednie linki do plików:
Po ściągnięciu plików, aby uruchomić QEMU należy w linii poleceń wpisać:
/usr/local/Cellar/qemu/1.1.0/bin/qemu-system-arm -M versatilepb -cpu arm1176 -m 256 -hda rootfs.ext2 -kernel zImage -append "root=/dev/sda" -serial stdio
Koniec
Z założenia zamierzam korzystać z kilku środowisk, więc każdorazowe wpisywanie w terminalu takiej długiej komendy może być uciążliwe. Postanowiłem rozwiązać ten problem w sposób następujący.
Po pierwsze przyjąłem, że pary plików (zImage oraz rootfs – bez żadnych rozszerzeń!) będę umieszczał w różnych folderach. I tak utworzyłem w swoim katalogu domowy utworzyłem foldery RaspberryPi oraz CustomKernel. Do obydwu folderów skopiowałem pliki zImage oraz rootfs (usunąłem rozszerzenie .ext2). Docelowo w katalogu CustomKernel będę posiadał inną wersję plików zImage i rootfs. Nic oczywiście nie stoi na przeszkodzie aby w kolejnych folderach (np. Raspbian) umieścić kopie plików zImage oraz rootfs z odpowiedniej dystrybucji ściągniętej ze strony Raspberry Pi.
W narzędziu Edytor AppleScript przygotowałem następujący skrypt, który pomoże mi uruchamiać wybrane środowisko.
tell application "Finder" set userFolder to choose folder with prompt "Please select directory." set folderlist to name of every folder of entire contents of userFolder end tell set userFolder to POSIX path of userFolder set res to (choose from list folderlist with prompt "Choose a File:" OK button name "Select" cancel button name "Quit") do shell script "/usr/local/Cellar/qemu/1.1.0/bin/qemu-system-arm -M versatilepb -cpu arm1176 -m 256 -hda " & userFolder & res & "/rootfs -kernel " & userFolder & res & "/zImage -append 'root=/dev/sda' > /dev/null 2>&1 &"