[Dev] Having fun with an Iconia tab

I got an Iconia tab as a sort of Christmas present, and I’m very excited about it because it is my first tablet. Having a tablet now bridges some gaps in form-factors in my device collection, and I can study more user-cases with it. This article, or maybe series of articles, will describe some hacking that I’m doing with it, for instance, running the Mer project, and maybe some UI like Nemo or Plasma Active on it.

An orphan in the Asus family

Asus released quite a series of tablets, from the Transformers range to the Iconia range. The Iconia tab W500, however, is a sort of orphan. It is the only Windows 7 based tablet in the Iconia range, and did not received much love. Just after release, the hardware spec were actually already quite bad compared to other tablets. It sports a AMD Fusion A50, that is a 1Ghz dual core CPU, helped with a AMD Radeon HD 6250 GPU, 2 gigs of RAM and an SSD. Being X86 based, and having a BIOS, it is really easy to customize and hack, and a lot of people have already run quite a lot of OS on it, from Linux to Android.

The first thing that I have done to that lovely HW is to install an X86 build of Android. The community behind that project is vibrant, and most of the features worked out of the box. I even got some goodies, like access to Google play and many apps working. But Android rapidly became boring and limited, so I decided to do something funnier, like booting Mer on it, as I always wanted to learn how to deploy a Mer based distribution.

Hacking the tablet

The Asus Iconia tab W500, unlike mobile devices, do not have an USB port. Actually, it does have 2 host ports, but no way to plug it on a computer, so I decided to boot several live USB images. I first tried Nemo, without much success, and then, ran Plasma Active.

The images provided by Basyskom worked pretty well, and nearly everything worked out of the box. Only the touchscreen was not supported. The problem is that this image nearly bricked my device, since it failed to turn on for nearly one hour.

Based on these experiences, I decided to build my own image, using the Mer platform SDK and the kickstart files for the mer SDK, Nemo and Plasma Active. These files are used by an utility called mic, the Mer Image Creator. A pretty tool. It takes that kickstart file, that is basically a recipe to build the image, and that provides the packages to imstall as well as some configurations, and create either a filesystem, a live CD or USB or a raw image.

I first created some hybrid images, combining some components of the Plasma Active image (X86 adaptation Kernel) and the Nemo one (UI), but quickly decided to go to simpler images, so I decided to boot Mer alone, with only the X86 Kernel.

I got some nice fails, like image that could not be created because the glibc was in the i686 repo instead of the i586 one, or the X86 kernel not recognizing the SD card reader, leading to some kernel panic, but I quickly succeded in booting Mer in a few hours of tinkering.

Mer core running on the Iconia tab

Mer core running on the Iconia tab

Nothing is working yet, but I have to say that taking less than one day, for a total noob, to build an image for an unsupported device is pretty impressive (even if the X86 arch helps). Kudos to the Mer project folks that enabled that.

Adaptation

Mer, as a core, do not provide abstraction layer. Well, actually it does, for the SDK target based in VirtualBox for example, and I actually got the Kernel for free. But, not everything is free, and the touchscreen, as well as HW acceleration are yet to be done.

I first started with a nice X session, after messing a bit with uxlaunch, and tried to get the support for the touchscreen. After a bit of Googling, knowing that the touch layer was provided by eGalax, I landed in their proprietary drivers page. A bit more Googling led me to some OpenSuse packages, and I took some inspiration from their spec to build my own one for Mer on the MeeGo community OBS.

I then created an image, and after the furst try, everything just worked. I have to say that the X86 adaptation kernel from Mer actually shipped everything that was required for the touchscreen driver to work, and that the touchscreen manufacturer was nice enough not to build their own solution and reguires a totally new kernel, but instead, tried to integrate.

Aftre that first mini-success some other questions still need to be solved.

  • Which graphical driver should I use: radeon, fglrx, llvmpipe ?
  • Why my X is displayed at 1024×768 insted of 1280×800 ?
  • How to enable multitouch ?

Leave a comment