Il y a peu de temps, je me suis rendu compte que les prix des tablettes low-cost avaient réellement atteint des niveaux très intéressants, frôlant parfois une cinquantaine d’euros.

Il existe aujourd’hui beaucoup de matériel peu coûteux permettant d’exécuter un système d’exploitation, de disposer de réseau ethernet ou wifi, voire de brancher un écran. Je citerai notamment la Raspberry Pi, les sticks Androïd tels que le MK802, mais aussi les BeagleBoards par exemple.

Mais en comparaison, même si ces solutions deviennent de plus en plus accessibles (et coûteront sans doute une bouchée de pain d’ici quelques années), une tablette tactile comporte plus de choses, à commencer par un écran tactile capacitif et une batterie.

C’est pourquoi j’ai décidé de m’acheter un de ces jouets low-cost afin d’en étudier les possibilités, et je n’ai pas été déçu ! Voici une vidéo du résultat, ci-dessous je vous explique comment j’y suis parvenu et comment vous pouvez faire la même chose

La tablette

J’ai trouvé ce modèle sur eBay, qui coûte 60€. Elle est livrée sous un Androïd fonctionel qui comporte :

  • Un processeur AllWinner A13, basé sur un ARM Cortex A-8, à peu près à 1Ghz et doté d’un FPU
  • Un GPU « Mali », dont je ne connais pas les détails
  • Un écran de 800×480
  • Un système tactile capacitif (GSL1680)
  • Un haut-parleur
  • Une caméra
  • Un lecteur de carte SD
  • Une puce WiFi (RTL8179)
  • Un accéléromètre qui sert à connaître l’orientation de la tablette (MXC622X)
  • Une batterie de 2000mAh
  • Un port USB qui peut faire USB host (on peut y brancher un clavier, une clé USB, une souris etc.)

Elle était livrée avec un adaptateur USB (mâle) vers microUSB (mâle) et USB (femelle) vers microUSB (mâle) pour pouvoir y brancher soit un ordinateur afin de la recharger ou d’y accéder en tant que périphérique, et y brancher une clé ou n’importe quoi d’autre directement en USB.

Autant dire que c’est beaucoup pour un prix aussi faible.

Faire marcher Debian

En farfouillant, je me suis rendu compte que Olimex proposait des cartes de prototypage basées sur le A13, et également des images de Debian capable de tourner dessus ainsi qu’un tutoriel pour la builder.

L’avantage du A13 est sa capacité à démarrer sur carte SD, j’ai alors acheté une carte microSD pour pouvoir faire mes tests.

L’image de Debian de Olimex démarrait et affichait même un prompt sur l’écran pour m’identifier ! J’ai alors branché un clavier sur la tablette et je disposais d’un premier environnement.

En revanche, le WiFi n’était pas reconnu, et l’environnement très minimaliste (peu d’outils déjà installés). De plus, l’écran n’avait pas la bonne résolution.

L’image Ubuntu de Olimex elle ne démarrait pas du tout.

J’ai fait un mélange des deux, en utilisant le noyau Linux de la Debian et le système de fichiers de la Ubuntu et j’ai ainsi pu obtenir un environnement plus riche, ayant les même défauts mais sur lequel je pouvait notamment exécuter des commandes comme lsusb ou i2cdetect par exemple.

Grâce au /proc/config.gz de la tablette (depuis l’image qui marchait), j’ai pu récupérer un .config valide pour disposer d’un environnement fonctionnel pour cross-compiler le noyau linux. J’ai également pu récupérer le script.bin fonctionnel, fichier de configuration chargé par le noyau au moment du lancement pour pouvoir changer des paramètres sans le recompiler. La version de linux à utiliser est sunxi (qui est en fait un autre nom du A13) disponible ici : https://github.com/linux-sunxi/linux-sunxi

Le WiFi

Grâce à lsusb, j’ai pu identifier le numéro et l’identifiant de la carte WiFi qui m’était jusque là inconnu, il s’agit d’une RTL8179. Ce modèle de carte n’était malheureusement pas géré par les pilotes qu’il est possible de compiler dans le noyau. Après quelques recherches, je trouve ce pilote qui permet de gérer la carte, le 8188: https://github.com/liwei/rpi-rtl8188eu

Je l’ai donc cross-compilé pour la tablette à l’aide des sources obtenues précédemment, et j’ai créé 8188eu.ko, un module noyau qui m’a permis une fois chargé de reconnaître ma carte WiFi et de m’associer enfin à un point d’accès et de pouvoir me connecter dessus en SSH !

Si vous utilisez l’image, modifiez le fichier /etc/network/interfaces pour y placer votre SSID et clé WPA, la tablette le rejoindra automatiquement au boot.

L’écran

L’écran était fonctionnel mais il y avait une zone dans laquelle le terminal ou la souris pouvait aller mais qui n’apparaissait pas, c’est parce que la résolution définie dans le fameux script.bin du kernel que j’avais testé était de 800×600 au lieu de 800×480

Le tactile

Le pilote du tactile m’a donné plus de fil à retordre, et c’est encore très loin d’être parfait. En ouvrant la tablette on constate que la puce responsable de sa gestion est la GSL1680. Cette dernière est supportée par certaines versions d’Androïd qui sont distribuées, mais je n’en ai trouvé ni la datasheet, ni le pilote linux.

A l’aide du nom de la puce j’ai pu retrouver la version originale de mon Androïd qu’il y avait sur la tablette (que j’avais écrasée depuis bien longtemps) et dont je donne le lien plus bas dans les téléchargements, et j’ai constaté qu’effectivement le module gslx680.ko était chargé par Androïd. Bien entendu le module noyau Androïd n’a aucune chance de fonctionner. On trouve cependant sur pastebin un morceau de gslx680.c.

A l’aide de la version fonctionnelle sur Androïd et de ce bout de code j’ai pu comprendre à peu près comment parler à la puce, même si le processus n’est pas encore complet, et j’ai écrit un morceau de python permettant d’aller chercher les points touchées par le tactile et de les passer à X. L’écriture d’un pilote serait un travail très fastidieux mais je pense que j’ai tous les éléments pour le faire.

Si vous testez ma ROM vous serez donc peut être déçu car il faut lancer touchscreen.sh et espérer que ça fonctionne !

L’accéléromètre

A l’aide de la configuration de l’Androïd fonctionnel, j’ai pu faire marcher l’accéléromètre, sur l’image que j’ai faite vous trouverez un acc.c d’exemple d’utilisation qui vous permet de récupérer les informations de l’accéléromètre, qui sont plus qualitatives que précises, voici une vidéo de l’exécution (le PC est connecté à la tablette via SSH) :

Divers

Le son est fonctionnel, un port USB est disponible en host et j’ai recompilé le noyau en activant le pilote FTDI pour pouvoir parler à travers un adaptateur USB/série!

Voici le cpuinfo:

root@tablet:/tmp# cat /proc/cpuinfo
Processor    : ARMv7 Processor rev 2 (v7l)
BogoMIPS    : 383.38
Features    : swp half thumb fastmult vfp edsp neon vfpv3
CPU implementer    : 0x41
CPU architecture: 7
CPU variant    : 0x3
CPU part    : 0xc08
CPU revision    : 2

Hardware    : sun5i
Revision    : 0000
Serial        : 0000000000000000

Téléchargements & liens

Voici les fichiers :