To set up an emulated environment of the Raspberry Pi software on OSX one will need:
- A Cross-Compiling Tool for the CPU architecture of RPi. ( eg. ARM
EABI Toolchain )
- The RPi Kernel.
- The RPi root filesystem.
- The Emulator (QEMU).
- The Cross-Compiling Tool for the ARM architecture.
Assuming one already have the latest Xcode and command line tools from Apple Developer and homebrew installed, then should install the dependencies:
brew install mpfr gmp libmpc libelf texinfo
Grab and compile the tool:
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
The RPi Kernel Compilation
mkdir ~/rpi/kernel
cd ~/rpi/kernel
git clone --depth=1 https://github.com/raspberrypi/linux.git
cd linux
Grab the config file and configure the kernel:
cp arch/arm/configs/bcmrpi_cutdown_defconfig .config
make ARCH=arm CROSS_COMPILE=~/rpi/arm-cs-tools/bin/arm-none-eabi- menuconfig
Save the configuration and let’s build the kernel afterwards. Note that the compilation should fail and complain about an inclusion in scripts/mod/mk_elfconfig. If it does, one must create the file:
sudo touch /usr/local/include/elf.h
Edit it and write the following:
#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
and follow through the building process:
make ARCH=arm CROSS_COMPILE=~/rpi/arm-cs-tools/bin/arm-none-eabi- -k
The image file is created and located as arch/arm/boot/zImage
.
The Emulator
Due to a bug of a white screen hanging QEMU if compiled with llvm one must install the package apple-gcc42 from the homebrew’s dupes repository.
brew install homebrew/dupes/apple-gcc42
And then compile and install qemu like:
brew install qemu —use-gcc
Now we’re left with all we need to start the RPi distribution so let’s start it like:
qemu-system-arm -M versatilepb -cpu arm1176 -hda debian6-19-04-2012.img -kernel zImage -append “root=/dev/sda2” -serial stdio -usbdevice tablet
As refered on mluis's website.