Debian sur une tablette tactile à 60€

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 :

20 réflexions au sujet de « Debian sur une tablette tactile à 60€ »

  1. Il y a plusieurs branches derrière ce projet

    Premièrement, ça pourrait faire un projet pour des étudiants d’écrire un vrai pilote pour Linux qui pilote l’écran tactile, c’est pédagogique et intéréssant !

    Ensuite, j’arrive à compiler et exécuter des applications Qt4 en plein écran dessus donc ça peut servir d’interface pour piloter des robots ou n’importe quel système embarqué (éclairage/LEDs, domotique, etc.) tout en ayant du WiFi+l’interface tactile, ce qui est assez luxueux pour un prix aussi faible 😉

  2. Bonjour,

    j’ai une tablette équivalente : ICOO D50 lite. Ton image fonctionne bien sur ma tablette mais j’ai deux soucis :
    – le wifi
    – le tactile

    j’ai trouvé les spéc de la tablette et elle est identique à ce qu’on peut trouver sur http://linux-sunxi.org/A13B.
    Le code pour le tactile est sur https://groups.google.com/forum/#!topic/linux-sunxi/w1wNit8ImjA

    Est il possible de me compiler le module wifi et le module tactile afin que je puisse profiter de Debian sur ma tablette. ça serait sympa. Pour ma part je n’y arrive pas.

    Merci

    Cordialement,

  3. Salut!

    Peux tu brancher un clavier dessus?
    Dans ce cas tappe:
    lsusb -v

    Et envoie moi le résultat par mail g.passault@gmail.com
    Je veux bien tenter de t’aider, si tu as le code du tactile ça me semble faisable

    Si tu as le firmware android original, peux tu egalement menvoyer ton script.bin?

  4. Salut

    En effet très intéressant! En revanche j’ai cassé ma tablette physiquement depuis (casier sd arrache et impossible à resouder) donc malheureusement je ne pourrai pas tester pour le moment

  5. Hi,
    I’m trying your ROM with my A13 tablet. It works, but I need also PL2303 driver for my USB/serial adapter.
    Could you, please, recompile kernel to add this driver?

    Thank you

  6. Hi!

    I have an Szenio 1207 tablet that has the same GSL 1680 chip for the tactile screen. I’ve been able to launch Debian, and everything seems to work except the tactile screen. Can you send me the code you made? The pastebin link doesn’t work 🙁

    Thanks.

  7. Hi,

    Actually, as explained in the (french) article, I didn’t create a driver for the GSL1680, but a python script which uses an i2c lib to inject touch events in X. You can find this script on the image.

  8. Great work Grégoire, just passing by to thank you.

    I never played with development boards before and I would have never figure out about script.bin which was a great help.

  9. Hey, i like what you done here m8, would you be able to add some bitcoin mining stuff to the linux. Im planing my tablet to run my bitcoin mining rig.

  10. Hey Greg, would it be possible to copy/install the debian image you provided into the internal memory from the tablet? so you would have 4gb for OS and the whole sd card for media or as an extension of the internal memory?
    i have done some development but never in tablets or linux, and its the first time i have ever done something like this.

    Keep up the great work!

  11. Hi,

    I think you can copy it from your SD card to the internal storage, it’s just a matter of using the good « /dev/… », but I never did it, keep me on touch if you plan to try that!

  12. http://linux-sunxi.org/Cubieboard/Installing_on_NAND

    Using this, it appears i need the the boot partition, and the mbr image, i still havent recieved my tablet so i cant tell, but from my « research » the nand has 3 partitions, bootloader,boot partition and the filesystem, apparently the android is installed in the filesystem, do i just dd the .img into there or do i need to replace something else, because in the website listed above it says i need to replace the bootloader and the mbr

  13. I guess you should indeed discover which nand is used for mbr and which will contain OS data, but i’m not an expert

    I think there is already two partitions on the SD card image, maybe you could dd those partitions directly to the NAND

  14. Well it appears that the image is too big to even put in a 4g sd card, do you think i can shrink it down? maybe remove the unecessary drivers, remove the gui and the rest of the programs (i can install it later, a lighter one), the problem is i dont even know where to begin, i know i can download the linux-sunxi linux but i dont know what drivers to put in, what files and how to do it, im really new to this arm thing and i never had an intrest into compiling the kernel, can you give me a starting point?

  15. Great work on your part. 🙂

    Am I correct, when I understand that you managed to make Debian GNU/Linux run on that tablet with only Free Software? (Free firmwares, and a kind of driver that you made?)

    If so, how possible is it, then, to modify the default Android/Linux, that comes with the tablet, in order for it to only run Free Software (no proprietary drivers/firmware)?

  16. Hello Fernando,

    I did’nt really wrote a driver, just a python script that reads touch data from I2C and send orders to the X server.

    To port Linux on the tablet, I essentially looked for the good options combination while compiling the kernel using linux-sunxi (https://github.com/linux-sunxi/linux-sunxi), which is a port of linux for this kind of micro-controller

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Current month ye@r day *