Raspberry Pi notes

Raffi gave me a Raspberry Pi, the $35 ARM based Linux system. Capable little beast: 256MB RAM, 700MHz ARM processor, a GPU that can drive 1080p and decode video, it’s an interesting device. Some notes:

Hardware

Batteries not included. In addition to the board itself, I needed:

Hilariously the whole machine reboots when I plug in the WiFi adapter; my guess is a power problem. It boots fine once it’s plugged in though.

RAM is shared with the GPU. The split is (now) configurable, so I have 192MB system RAM and 64MB GPU RAM. Newer boards have 512MB on board.

Software

The primary software distribution people use is Raspbian, a giant 1.5 gig full Debian system. It’s cool that you get a full normal Unix system but boy are we a long way from an embedded OS. The architecture is “armhf” with a change, using hardware floating point in the ABI. Apparently there’s several incompatible Debian ARM versions running around; armel, armhf (soft float), armhf (hard float), etc.

There is no BIOS on the board and no LILO or GRUB bootloader has been ported to the Pi yet. The bootstrap expects a FAT filesystem that it can execute a kernel off of. Raspbian has a small FAT partition with a kernel and then a big ext4 partition for the rest. There is an effort for a bootloader called Berryboot but it boots off of SquashFS filesystems which AFAIK are read only. Haven’t tried it.

Raspbian out of the box works well. Username: pi, password: raspberry. You’ll want to use rsapi-config to set the keyboard if you have a US keyboard.

The main thing I had to do was set up wifi, which uses wpa_supplicant. I found this example config file helpful. End of the day, all I needed to do to get wifi working was add the following little block to /etc/wpa_supplicant/wpa_supplicant.conf. (Note, both my SSID and password are wrapped in quotes for the config file.)

network={
  ssid="mySsid"
  psk="my password in quotes"
}

Voila! With all that set up I now have a working underpowered Linux box. So what is this thing actually good for? To me what’s most exciting is the HDMI output; it can drive a TV! To that end I found two possible end uses. OpenELEC, for viewing videos via XBMC. Or MAME/MESS for playing games.

MAME

So what about MAME? My first try was PiMAME 0.3, a full distribution that boots right into AdvanceMAME for a chooser. Looking at it, it’s basically Raspbian with some extra software installed and a login script to launch MAME. (An annoying one, I might add; it’s awkward to get a shell and virtual consoles don’t seem to work). Also the setup isn’t usable with just a USB joystick now, you really need a keyboard to drive both AdvanceMENU and AdvanceMAME itself. Full props to the PiMAME author for working on a convenient turnkey distro, but it’s not there yet. I think I’d rather use a plain Raspbian distribution and build up my own MAME environment, using his packages.

So how to install by hand? I followed notes from this blog post, skipping over the “how to use Unix” parts and getting right to MAME. In a nutshell:

  • Install the AdvanceMAME .deb by hand, downloading from http://sheasilverman.com/rpi/raspbian/debs/
  • Create a MAME user strictly for running MAME. Put it in group video
  • Launch “mame mspacman” from a local console to play a totally legitimately acquired copy of the Ms. Pac-Man ROM.

It works! It’s very slow compared to PiMAME 0.3; I imagine I’m running into the same problem the PiMAME guy is having with the most recent raspbian distributions. Also I haven’t tried sound yet. And AdvanceMAME is some 7 years old; in theory the mainline MAME 0.147 should work on Raspberry Pi but the details of getting SDL and Sound working in this environment are rumored to be difficult.

Thoughts

The Raspberry Pi is an impressive little device. For the size, power (3W), and price it’s amazing to have a full real Unix distribution. I’m not sure what it’s actually for though. Its creators talk about education, about giving kids an affordable hackable platform. I think that’s awesome but is this really it? Maybe so, but I’d think a discarded PC would be just as good. Or something with a portable screen and input method.

As a general purpose hack thing it’s a lot of fun. What’s missing though is some sort of hardware bridge, say Arduinio.

As an embedded device it’s impressively capable. It’s nice to imagine building a whole Internet TV device on it, for instance, with a full real Unix behind it and not having to fart around with an embedded OS or iOS or something. I’m sure there’s drawbacks, but..

I’m trying to get my head around having a full Debian system on this. I’ve been conditioned to think of embedded devices as black boxes; you flash the firmware every six months and then run what’s there, no upgrading or changing. Raspbian feels more like a persistent OS to me, something I’m going to add and upgrade and change rather than wipe and start over regularly.