Last September Dale went to MobileCampLondon, and managed to snaffle an openmoko neo1973 device. Search on google for more information about openmoko then I can talk about here, but basically it is an opensource mobile phone, running on an ARM processor and using a linux operating system. At some point whilst playing with it Dale managed to break the device and it has sat in his house ever since.
Today however he gave the device to me, with the initial task of making it usable again. The symptoms firstly where that it would not turn on. No feedback, no backlight, nothing. A quick google search and flick through the openmoko wiki told me to “Remove the battery for 30 seconds, and then charge for around 2 hours before turning on”. This worked, and I was soon presented with the bootup screen. Boot up takes around 3 minutes when you first start it, and if all is working well you are briefly confronted with a “Please Wait…” message followed by the UI loading. I managed to get to the Please Wait message, but it would go no further. Hmmmm….
There is a usb port on the side of the phone, and connecting it to a laptop (mine is running linux) enables you to connect to the phone using ethernet over usb. Simply set up the port using:
sudo ifconfig usb0 192.168.0.200 netmask 255.255.255.0
and then you can
ssh as root to 192.168.0.202
where the default root password is blank. It may take short while to connect, so be patient! Looking in /var/log/messages I found that the kernel and rootfs were corrupt, which would require that I flash the phone again. Not only would I have to flash the phone but I would be flashing someone else’s phone so turning it into a useless brick was definately not an option. Fortunately there are really easy to use tools to do this.
dfu-util is an application written by openmoko to help with flashing your phone. As the phone is still very much in development this is probably an every day occurrence and so the tool is very quick and easy to use. Firstly I installed the required ubuntu libraries:
sudo apt-get install libusb-dev autogen pkg-config
and then downloaded the debian version of dfu-util from http://packages.debian.org/dfu-util. You also need to have usb file mounting, which can be enabled by adding:
usbfs /proc/bus/usb usbfs defaults
to your /etc/fstab. A reboot maybe required to enable the usbfs, unless you know of a better way. From there I used the
command to display the usb devices I could use, I got the following output (using root):
root@jester:~# dfu-util -l
dfu-util - (C) 2007 by OpenMoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY
Found Runtime: [0x1457:0x5119] devnum=2, cfg=0, intf=2, alt=0, name="USB Device Firmware Upgrade"
Found Runtime: [0x0a5c:0x2110] devnum=3, cfg=0, intf=3, alt=0, name="UNDEFINED"
Using the following two commands I was able to upload the kernel and rootfs:
dfu-util -a kernel -R -D ./uImage-2.6.24+git20080421-r0-om-gta01.bin -d 0x1457:0x5119
dfu-util -a rootfs -R -D ./Openmoko-openmoko-devel-image-glibc-ipk-P1-Snapshot-20080421-om-gta01.rootfs.jffs2 -d 0x1457:0x5119
Note that as I had two devices using dfu-util -l I had to specify the one I was interested in using by specifying the -d flag.
So now I have a fully working openmoko phone, and it is running the latest recommended build. Just need to do something with it now! I will be testing the phone over the next week and may well post my thoughts on how the development is doing. Who knows maybe there is an openmoko/currentcost idea to be developed…..