OpenMoko's Neo FreeRunner: Open to the Core
Okay, I'll admit it. I have a love-hate relationship with the Neo FreeRunner. But please, let me explain.
For more than a month now, I have carried the FreeRunner around with me. It is just such a cool little gadget, and I love what it represents: a completely open mobile device, the hardware and all. For those who are not familiar with it, the Neo FreeRunner is the highly anticipated mobile phone from the folks at OpenMoko. Although its previous phone, the Neo 1973, was targeted at hard-core developers, the FreeRunner “is a Linux-based touchscreen smartphone ultimately aimed at general consumer use as well as Linux desktop users and software developers”.
Even though the goal is eventually to have a general-purpose, consumer-friendly phone, the FreeRunner is not quite ready for the prime-time phone market just yet. The OpenMoko team is fully aware of this, and became slightly uneasy when they learned that Linux Journal wanted to write a review. As such, the aim of this article is not to talk much about the FreeRunner as a phone, but rather as a handheld Linux device for developers.
A Linux geek couldn't ask for a better-equipped device than the FreeRunner. It comes with a 400MHz ARM processor, 256MB internal Flash storage, 128MB RAM and a microSD card slot for extra storage. The wireless capabilities of the FreeRunner also are impressive. It comes with tri-band GSM (with the option of either 850MHz or 900MHz on the low end), as well as GPRS, Bluetooth and Wi-Fi (using the Atheros AR6K chipset). To make things even more fun, the OpenMoko crew included two accelerometers and an assisted GPS chip. The device is a little bulky though, as it measures in at 120.7x62x18.5 millimeters and weighs around 180 grams. The FreeRunner is available on-line from openmoko.com for $399. If you plan to use it for serious development, you also may consider purchasing the $99 debug board that can be used to access the serial console.
One of the more exciting features is the FreeRunner's ability to boot from microSD cards. This means you can test other Linux distributions by installing them on microSD cards without formatting the main distribution that is installed in Flash. This flexibility is very exciting, and it offers an easy way to try before you buy.
The hardware definitely is appealing, but the most attractive thing about the FreeRunner is that it was built to run Linux. Although the official distribution of the FreeRunner is OM 2008.8, other options are available. Trolltech, the creators of Qt, produce the Qtopia distribution that runs very well on the FreeRunner. And, if you prefer a less-watered-down distribution, you'll be glad to learn that Debian also is available, in almost its entirety. Recently, an effort to port Gentoo to the FreeRunner has been started, and I'm sure other distributions will follow suit soon.
As I've said, I don't plan to spend much time talking about the FreeRunner as a phone. However, any review of a device that is sold as a phone wouldn't be complete without at least covering the basics. Unfortunately, the basics are about all there is to go on. The call quality is rather poor, and recipients of calls reported lots of static and popping on their end. Also, the interface is quite awkward, especially for advanced features, such as call waiting. There is no clear way to adjust the volume, because there is no hardware volume control button. Text messaging is incredibly tedious, due to the impossibly small on-screen keyboard.
There is a lot of room for improvement with the phone software. Much work needs to go into improving call quality before I would consider using the FreeRunner as a primary phone.
Because I decided not to use the FreeRunner as a phone, I thought it might be more interesting to install a full-featured Linux distribution. I chose Debian, as it is easily available, has a wide selection of packages and is the distribution with which I have the most experience.
The easiest way to install Debian is to run the install.sh shell script that is available from the DebianOnFreeRunner wiki page. You need to have an already-working installation of Linux installed on your FreeRunner, and it needs access to the Internet. You can use your desktop Linux PC or an installation of Linux in a virtual machine, such as VMware Fusion on Mac OS X.
It is quite easy to route traffic from a FreeRunner through a Linux PC. Each of the available distributions use the same default networking configuration and give the FreeRunner an IP of 192.168.0.202. Plug the USB cable in to the FreeRunner and your PC, and run the following commands:
# iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24 # sysctl -w net.ipv4.ip_forward=1 # ifconfig usb0 192.168.0.200
If your network is already using 192.168.0.0/24, you may need to use a different subnet mask. Once the USB network link is up, you should be able to SSH into the FreeRunner as root, with a blank password:
# ssh email@example.com
You may find that DNS is not resolving correctly from within the FreeRunner. To correct this, simply add an OpenDNS cache address to the FreeRunner's /etc/resolv.conf:
# echo nameserver 18.104.22.168 >> /etc/resolv.conf # echo nameserver 22.214.171.124 >> /etc/resolv.conf
If your supported microSD card is placed in the FreeRunner, you can begin installing Debian onto it:
# wget http://pkg-fso.alioth.debian.org/freerunner/install.sh # DASH_BINSH=false SD_PART1_FS=vfat sh install.sh
Here, we set the DASH_BINSH environment variable to false, so that the script installs the Bash shell instead of Dash. The SD_PART1_FS variable is set to vfat, so that the /boot partition on the SD card will be formatted with vfat instead of ext2. Some versions of the FreeRunner's bootloader, u-boot, do not support ext2, and although there are ways to remedy this, it simply is easier to use a vfat-formatted partition. You should have Debian installed within the hour, depending on the speed of your Internet connection. I must say, the Debian installers sure have improved a lot since the Potato days.
You might have noticed that I said “supported microSD card”. According to the FreeRunner, all microSD cards are equal, but some microSD cards are more equal than others. The OpenMoko wiki has a page that lists all microSD cards that are known to work with the FreeRunner. I consulted this page and purchased two Kingston SD-C02G 2GB microSD cards. The FreeRunner recognized the cards, and I was able to partition them and write files to them. However, during installation, I received errors that were apparently related to the SD media. I replaced the 2GB Kingston card with the 512MB SanDisk card that came with the FreeRunner, and the installation worked flawlessly. I later transferred the partitions from the 512MB card to the 2GB using my Kubuntu desktop PC.
Once installation is complete, you will want to reboot into Debian. First, power off your FreeRunner. Once it has safely powered down, press and hold the AUX button (on the top-left side of the device), and press the power button until the u-boot menu appears. Press the AUX button until “Boot from SD” is selected, then press the power button again. After a minute or two, the zhone interface should appear and you should be able to make and accept phone calls, provided you are using a supported SIM card.
As with microSD cards, the FreeRunner is rather picky about which SIM cards it accepts. When I first began testing the FreeRunner, I was using a first-generation iPhone as my primary phone. The SIM from my iPhone worked perfectly in the FreeRunner. A couple weeks later, I bought an iPhone 3G and received a new SIM with it, which also worked well with the FreeRunner. I eventually returned my 3G iPhone and received another new SIM card from AT&T. The FreeRunner would not register with the AT&T network via the new SIM. I tried a T-Mobile SIM to make sure there were no hardware problems, and it worked fine. After many, many hours of struggling with this issue, I finally discovered that there is a bug in the FreeRunner firmware that causes problems with certain SIM cards (OpenMoko bug #666). My previous SIM cards had a vendor and version number of 4022; however, the new SIM I received from AT&T had vendor and version number 2022. Unfortunately, the 2022 cards are newer and do not work with the FreeRunner. As it turns out, the OpenMoko wiki has a page that lists the compatibility status of various SIM cards. The good news is that once I figured out the problem, I was able to visit a local AT&T store and request a new 4022 SIM card, which they happily gave me.
- High-Availability Storage with HA-LVM
- DNSMasq, the Pint-Sized Super Dæmon!
- March 2015 Issue of Linux Journal: System Administration
- Localhost DNS Cache
- Real-Time Rogue Wireless Access Point Detection with the Raspberry Pi
- Days Between Dates: the Counting
- The Usability of GNOME
- PostgreSQL, the NoSQL Database
- Linux for Astronomers
- You're the Boss with UBOS