%hr/ %p layout: arm title: How to configure Qemu — %h2#target-pi-on-mac Target Pi on Mac %p So even the idea is to run software on the Pi, not everyone has a Pi (yet :-) %p Others, like me, prefer to develop on a laptop and not carry the Pi around. %p For all those, this here explains how to emulate the Pi on a Mac. %p Even if you have a Pi, %a{:href => "/remote_pi.html"} this explains a nice way to develop with it. %h3#replace-the-buggy-llvm Replace the buggy llvm %p Written April 2014: as of writing the latest and greatest llvm based gcc (5.1) on Maverick (10.9) has a bug that makes qemu hang. %p So type gcc -v and if the output contains “LLVM version 5.1”, you must install gcc4.2. Easily done with homebrew: %pre %code :preserve brew install https://raw.github.com/Homebrew/homebrew-dupes/master/apple-gcc42.rb %p This will not interfere with the systems compiler as the gcc4.2 has postfixed executables (ie gcc-4.2) %h3#qemu Qemu %p Then its time to get the Qemu. There may be other emulators out there, and i have read of armulator, but this is what i found discribed and it works and is “easy enough”. %pre %code :preserve brew install qemu --env=std --cc=gcc-4.2 %p For people not on Maverick it may work without the -cc option. %h3#pi-images Pi images %p Create a directory for the stuff on your mac, ie pi. %p Get the latest Raspian image. %p There seems to be some chicken and egg problem, so quemu needs the kernel seperately. There is one in the links. %h3#configure Configure %p In the blog post there is some fun configuration, I did it and it works. Not sure what happens if you don’t. The booting is described below (you may or may not need an extra init=/bin/bash in the root… quotes), so boot your Pi and then configure: %p nano /etc/ld.so.preload %p Put a # in front of the first to comment it out. Should just be one line there. %p Press ctrl-x then y then enter to save and exit. %p (Optional) Create a file /etc/udev/rules.d/90-qemu.rules with the following content: %pre %code :preserve KERNEL=="sda", SYMLINK+="mmcblk0" KERNEL=="sda?", SYMLINK+="mmcblk0p%n" KERNEL=="sda2", SYMLINK+="root" %p The kernel sees the disk as /dev/sda, while a real pi sees /dev/mmcblk0. This will create symlinks to be more consistent with the real pi. %h3#boot Boot %p There is quite a bit to the command line to boot the pi (i have an alias), here it is: %pre %code :preserve qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append 'root=/dev/sda2 panic=1 rootfstype=ext4 rw' -hda raspbian.img -redir tcp:2222::22 %ul %li the cpu is what braodcom precifies, ok %li memory is unfortuantely hardcoded in the versatilepb “machine” %li the kernel is the file name of the kernel you downloaded (or extracted) %li raspbian.img is the image you downloaded. Renamed as it probably had the datestamp on it %li the redir redircts the port 2222 to let you log into the pi %p So %pre %code :preserve ssh -p 2222 -l pi localhost %p will get you “in”. Ie username pi (password raspberry is the default) and port 2222 %p Qemu bridges the network (that it emulates), and so your pi is now as connected as your mac. %h3#more-disk More Disk %p The image that you download has only 200Mb free. Since the gcc is included and we’re developing (tiny little files of) ruby, this may be ok. If not there is a 3 step procedure to up the space. %pre %code :preserve dd if=/dev/zero bs=1m count=2048 >> raspbian.img %p The 2048 gets you 2Gb as we specified 1m (meg). %p On the pi launch %pre %code :preserve sudo fdisk /dev/sda %p This will probably only work if your do the (Optional) config above. %p Say p, and write down the start of the second partition (122880 for me). d 2 will delete the second partition n p 2 will create a new primary second partition write the number as start and just return to the end. p to check w to write and quit. %p Reboot, and run %pre %code :preserve resize2fs %h2#links Links %p Blog post: %a{:href => "http://xecdesign.com/qemu-emulating-raspberry-pi-the-easy-way/"} http://xecdesign.com/qemu-emulating-raspberry-pi-the-easy-way/ %p Kernel: %a{:href => "http://xecdesign.com/downloads/linux-qemu/kernel-qemu"} http://xecdesign.com/downloads/linux-qemu/kernel-qemu %p Rasbian file system(preferably be torrent): %a{:href => "http://www.raspberrypi.org/downloads/"} http://www.raspberrypi.org/downloads/