Within my position for the promotion of free, open-source hardware solutions in general (and currently, telephony in particular), I am of course trying to keep in touch with the latest developments in this field. Eventually, I have met the fine people at ROAD
, a small company in Berlin developing a phone: the Officer S101
If you don't know about it already, its form-factor will remind you of the Nokia Communicator: from the outside, it looks like a regular candy-bar phone, but it also reveals a full keyboard and wide-screen display when opened. What interests us here is that its inside is open, too :)
The device is not in production yet, but they have been so kind as to let me borrow a sample for a while, which I demonstrated during my hackable:Device workshops
by the way. This is where I managed to install hackable:1
on the phone.
On the hardware side, it was difficult to let it be easier to test. Let me stress first that this was a pre-production device, and all of this may be subject to changes! So here we are:
- the phone has an internal flash memory but can also boot on an SD card, which is conveniently replaceable without opening the phone or even removing the battery,
- the first partition of the SD card must be formatted as a FAT filesystem,
- I was provided with two second-stage bootloaders: one that boots the phone from flash, and the other which updates it.
Therefore, it was just a matter of copying the correct bootloader on the SD card, along with the root filesystem to flash if desired.
About the software now, this device happens to use the same architecture as the Openmoko Freerunner
, "armel". One only has then to choose the right packages, configure them accordingly and generate a filesystem archive.
First, I have added a generic device definition file in trunk/build/profiles/ROAD-Officer.include
The "STRIP" line is necessary because of the way we are currently cross-compiling Debian packages: the native tools are unable to strip the binaries cross-compiled. Therefore, strap:1 is currently doing it instead, while generating the images.
#this device is a phone
#add bluetooth support
#add GPS support
#add touchscreen support
#add wifi support
This should be self-explanatory :)
Unlike the Openmoko Freerunner, which has its own dedicated X server, we are using the generic framebuffer-based X server. It just works :)
#FIXME still needs to be packaged
In order to gain space, we are blacklisting this meta-package: xserver-xorg-core dependencies are actually satisfied with at least one video driver installed, which is the case here.
Next comes the actual profile definition, in trunk/build/profiles/ROAD-Officer-user.profile
#blacklist packages to gain space
#additional dependencies adjustments
This was directly taken from the Openmoko Neo1973
profile, which has tough space constraints on the flash. Here we do not have such limitations, however it made the testing process slightly faster.
Anyway, after some more tuning in trunk/build/packages
, it was time to generate the filesystem archive:
$ ./build.sh VENDOR=ROAD MODEL=Officer PURPOSE=user archive
At this stage, the only missing bit was the kernel. I simply used the one already flashed onto the device, but I still needed some modules. They were of course provided to me in source and binary forms, but I don't think this kernel tree is available publicly at the moment. I am sure it will be as soon as the ROAD developers can manage.
Unfortunately, I could only get this far yet. It boots all the way to the graphical user interface, where the Om2007.2
design does not really fit the rather wide screen. We are currently working hard on the next release, rev5
, and focusing on the Openmoko Freerunner first, but I will be resuming this work soon enough!