Enter the black raspberry. Rubus occidentalis.
It's an ominous name for an ominous fruit: the black raspberry. As the owner of a new Raspberry Pi, I realized that I was going to have to, at some point, open the box and do something with it.
It was fortunate, therefore, that Limor Fried had been working hard on...well, actually, everything related to the Raspberry Pi. Limor and the Adafruit team designed cases, debugging cables, breakout boards, and everything you might need to do something awesome with the Raspberry Pi.
As you know, rolling a Linux distro (from scratch or as an upstream modification of an existing distribution) is not easy work, so this is impressive unto itself. For a variety of reasons (in no small part because Limor sent me an email about it), I decided this would be the first operating system I would bring up on my Raspberry Pi.
My Raspberry Pi story
You can skip this human interest bit and head to the next section if you want more technical goodness.
I had not powered up my Raspberry Pi since receiving it largely because I didn't have an SD card. So, last night, I did bedtime with our son while my wife went hunting for a 4GB, class 4 microSD card from SanDisk (approximately $4, with SD card adapter). Having downloaded Occidentalis earlier, I checked the SHA-1 hash, unzipped it, and then dd'd the image onto the SD card. It is worth mentioning the known good hardware list is something you should read and adhere to before you get started; the first microSD card I chose didn't work, hence the late Saturday run for a different card.
Once the Raspberry came up, it was like the olden days of Linux all over again. By that, I mean "everything didn't happen magically," but instead I had to roll up my sleeves and do a bit of work. I used a wireless adapter I had previously ordered from Adafruit, and it showed up without a problem (success!). I got to the login prompt, had to go to the Internet (to look up my username), and then managed to log in (success!). I typed startx, and over the HDMI connection, got a GUI on my TV (success!). I opened a browser, and...NO NETWORK.
Fast forward an hour while I dug around and remembered how much I had forgotten about Linux networking. Between using a Mac on a daily basis and being spoiled by the incredibly polished work coming out of the Fedora and Debian/Ubuntu communities, it has been years since something basic didn't "just work" when I brought up a machine. I hacked out a config file (the Occidentalis has vi, or something resembling it, on board), and ultimately managed to connect to my WPA-based WiFi router.
At this point, I checked out my course webpage in three different web browsers, found out that Occidentalis advertises on Bonjour (I was able to SSH into raspberrypi.local), and decided that 12:15 AM was way too late for a college professor, so I headed to bed.
Three reasons to choose Occidentalis
There are three reasons I chose to boot Occidentalis on the Raspberry Pi. First, I had a $10 WiFi adapter from Adafruit Industries, and I assumed that it would be supported out-of-the-box by Occidentalis—I was right. The second reason was because Limor wrote me an email and said, "I thought you'd be interested in the v0.2 release."
The third reason is much larger, and far more compelling. Ladyada has been doing a lot of work to make the base Raspian distro more hacker friendly...and, I don't see the point of having a Rasperry Pi if you're not going to do something awesome with it. The current release of Occidentalis (v0.2 at the time of this writing) has a laundry list of features that are worth noting:
- The image is truncated and fits on a 4GB card with room to spare.
- Kernel modules out the wazoo were added:
- RTC (real-time clock)
- The DS1307 RTC
- The HMC6352 compass module
- The BMP085 barometric pressure sensor
- The ADS1015 analog to digital converter
- PWM/Servo kernel modules (for PWM on GPIO pin #18)
- I2C and SPI kernel support
If you're someone who spends their entire life in the desktop-and-laptop-only world of computing (where "peripherals" means "a mouse and a keyboard"), then none of these things will make much sense to you. However, if you're someone who has gotten even moderately serious with their Arduino, you'll realize that these features make it easy to get some C or Python code running on the Raspberry Pi that can talk to sensors and motors, thus doing something interesting in the physical world.
Next steps with Occidentalis
During the spring semester of 2013, I'll be teaching the course, Computer Organization. My intention is to use the text, Elements of Computing Systems by Nisan and Shocken— I've used it before and it's absolutely excellent. It introduces students to a simplified hardware description language, and from there we build an ALU, followed by an assembler, virtual machine, compiler, and ultimately an operating system.
The text, along with the associated (free, open) simulation software is wonderful, but it does not ground anything in the real/physical world. My thinking, at the moment, is that I would like my students to all have a Linux machine that we can use to explore elements of computer organization...and, ideally, that machine is 1) real and 2) relatively simple. The Raspberry Pi (and a distribution like Occidentalis) make for a great starting point for the exploration of computer organization and how that interfaces with the "real world".
Or perhaps I'll just build something that my three-year-old thinks is cool. We'll see which happens first.