J’ai récemment fait l’acquisition d’une carte TQ6410 (SoC Samsung s3c6410 ARM11, Flash NOR: 1Mo, Flash NAND: 256Mo, RAM: 128Mo) avec un écran tactile de 7 pouces dans le but de développer une application industrielle avec des élèves de seconde année BTS IRIS. Cette carte ressemble à une autre carte bien connu : la FriendlyARM 6410. Cette carte provient d’un vendeur sur e-bay (esky-sh) au prix de 175 € (frais de port compris, frais de douanes en sus). Dans l’article qui suit je détaille la prise en main de cette carte : déballage, quelques tests mais surtout l’installation d’une emDebian pour faciliter la gestion des paquets et en faire une base générique de développement. Le but final est d’implanter une application fonctionnant avec le kit graphique Qt de Nokia…
Déballage
En déballant le paquet de la TQ6410 vous trouvez:
- La carte électronique TQ6410
- Un écran LCD TFT de 7 pouces de marque Innolux AT070TN92 avec dalle tactile résistive et cadre de fixation
- un câble série droit équipé avec des connecteurs DB9
- un câble ethernet droit
- un câble USB
- un DVD-R gravé avec les ressources logiciels (cross-compilateur, source du noyau linux, « rootfs » linux, android,WinCE, exemples de codes,etc…)
- une alimentation à découpage 12V-1A (livrée avec une fiche américaine !). Cette alimentation est insuffisante pour assurer un fonctionnement correct de la carte et de l’écran 7 pouces. Il faudra donc faire l’acquisition d’un autre bloc d’alimentation.
Si vous voulez des « visuels » de cette carte, faites une recherche avec un moteur de recherche !
Découverte de la carte
Pour faire quelques tests sur la carte, je câble l’ensemble:
- Connexion de l’écran sur la carte (attention les connecteurs sont TRÈS fragiles)
- Connexion de l’alimentation après changement de la fiche d’origine pour une fiche française
- Connexion du câble série sur la carte et sur un PC fonctionnant sous GNU/Linux
- Connexion du câble USB sur la carte en vu d’une connexion ultérieure sur un PC fonctionnant sous Microsoft Windows7
Avant d’alimenter le tout en basculant l’interrupteur M/A sur le coté de la carte, je lis quelques documentations du DVD. Vous y apprendrez que :
- le chargeur de démarrage est U-Boot aussi bien dans la FLASH NAND que NOR (normalement il est donc impossible de bloquer la carte en écrasant le chargeur de démarrage : on démarre toujours depuis la NAND, si problème on démarre depuis la NOR et on réinstalle U-Boot sur la NAND).
- le noyau linux est un 2.6.28 patché pour supporter le S3C6410 de Samsung
- le système pré-installé dans la NAND est un GNU/Linux avec un environnement QTExtended (Qtopia)
Pour avoir quelques informations supplémentaires, nous allons observer la voie série. L’environnement de développement sera une machine sous GNU/Linux Debian 6 (Squeeze). Pour interagir avec la voie série, nous allons utiliser Minicom. Il faut donc l’installer :
1 |
root@casimir:~#aptitude install minicom |
puis le configurer :
1 |
root@casimir:~#minicom -s |
La rubrique qui nous intéresse est « Configuration du port série ». Dans cette rubrique il faut régler le port série sur « /dev/ttyS0 » si vous utilisez le premier port série (COM1: sous Microsoft Windows) (remarque: si vous utilisez un adaptateur USB-Série son nom sera vraisemblablement ttyUSB0), le « Débit/Parité/Bits » sur 115200 8N1, le « Contrôle de flux matériel et logiciel » sur « Non ». Sauvegardez vos réglages en revenant au menu principal et en choisissant l’option « Enregistrer config. sous dfl ». Sortez de minicom puis relancez-le en ignorant l’initialisation du modem avec:
1 |
root@casimir:~#minicom -o |
Minicom attend alors du trafic sur la voie série…
Amorçage par défaut : Noyau Linux et environnement QTopia
Allumez alors la carte, vous devriez voir des messages du chargeur U-Boot. Appuyez sur la touche ‘entrée’ pour interrompre le chargement ! Vous devriez avoir les messages suivants:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
OK U-Boot 1.1.6 (Aug 29 2010 - 16:56:31) for TQ6410 CPU: S3C6410@532MHz Fclk = 532MHz, Hclk = 133MHz, Pclk = 66MHz, Serial = CLKUART (SYNC Mode) Board: TQ6410 DRAM: 128 MB Flash: 0 kB NAND: 256 MB In: serial Out: serial Err: serial MAC: 08:90:90:90:90:90 Hit any key to stop autoboot: 3 <= Appui sur la touche entrée ##### U-Boot 1.1.6 B01 for 6410, by esky-sh ##### [f] Format the nand flash [v] Download u-boot.bin [k] Download Linux/Android kernel [y] Download root yaffs2 image [a] Download Absolute User Application [n] Download Nboot.nb0 for WinCE [w] Download WinCE NK.nb0 [s] Set the boot parameter of Linux [b] Boot Linux [q] Quit to shell NAND Flash size: 256 MiB Enter your Selection: |
La carte dispose donc de U-Boot en version 1.1.6. On retrouve bien les quantités de mémoire prévues (pas de NOR car on démarre pour l’instant depuis la NAND). On arrête le chargement et on se retrouve avec le menu de U-Boot préparé par le revendeur esky-sh. Nous utiliserons centaines de ces options pour changer le noyau à charger ou encore le système de fichier racine. Pour continuer le chargement, appuyez sur la lettre ‘b’. Le noyau linux préparé par FriendlyARM démarre puis le système de fichier racine est chargé…On peut alors tester l’environnement QTopia préparé par FriendlyARM après avoir calibré l’écran tactile…Je ne détaille pas plus pour l’instant, ci-dessous deux photographies de l’écran sous QTopia :
Remarque: si l’interface est en chinois, il faut aller sur le deuxième onglet et cliquez sur le drapeau pour passer la langue en anglais (voir la capture d’écran de droite ci-dessus).
Amorçage sur un système Android
La carte est vendu comme étant compatible avec un système Android 2.1. Il faut donc charger le noyau et le « rootfs » android précompilé fourni sur le DVD. Il faut démarrer sur la NAND flash, interrompre U-Boot puis dans le menu proposé, choisir l’option « Download Linux/Android kernel » (lettre ‘k’) pour le noyau ou « Download root yaffs2 image » (lettre ‘y’) pour le système de fichier racine. U-Boot attend alors la connexion du cable USB. Le transfert du noyau ou du système de fichier racine s’effectue avec l’utilitaire DNW.exe disponible dans le répertoire ‘Tools’ du DVD. Ce logiciel fonctionne sous Windows et nécessite l’installation d’un pilote lors de la première insertion du câble (disponible lui aussi sur le DVD dans ‘Tools’). Si la carte est reconnu par le logiciel DNW, vous verrez dans la barre de titre [USB:OK]. Vous pouvez alors transférer votre noyau ou votre système de fichiers racine avec le menu ‘USB Port’ puis ‘Transmit/Restore’. Sous Linux, il existe un logiciel du nom de USBPUSH qui a les mêmes fonctionnalités mais je ne l’ai pas utilisé.
Dans notre cas le noyau Linux s’appelle zImage_a70_New et le système de fichier racine rootfs_android.img. La trace de ces opérations est présenté ci-dessous :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
##### U-Boot 1.1.6 B01 for 6410, by esky-sh ##### [f] Format the nand flash[v] Download u-boot.bin [k] Download Linux/Android kernel [y] Download root yaffs2 image [a] Download Absolute User Application [n] Download Nboot.nb0 for WinCE [w] Download WinCE NK.nb0 [s] Set the boot parameter of Linux [b] Boot Linux [q] Quit to shellNAND Flash size: 256 MiB Enter your Selection:k Downloading Linux/Android Kernel from USB... OTG cable Connected! Download address 0xc0000000 Download Done!! Download Address: 0xc0000000, Download Filesize:0x2b6c0c Checksum is being calculated... Checksum O.K. Downloading Linux/Android Kernel successed Writing Linux/Android Kernel into NAND... Erasing at 0x80000 -- 2% complete.Erasing at 0xa0000 ... -- 100% complete. Writing data at 0x80000 -- 0% complete. Writing data at 0x87000 ... Writing data at 0x33f800 -- 100% complete. Writing Linux/Android Kernel successed ##### U-Boot 1.1.6 B01 for 6410, by esky-sh ##### [f] Format the nand flash [v] Download u-boot.bin [k] Download Linux/Android kernel [y] Download root yaffs2 image [a] Download Absolute User Application [n] Download Nboot.nb0 for WinCE [w] Download WinCE NK.nb0 [s] Set the boot parameter of Linux [b] Boot Linux[q] Quit to shell NAND Flash size: 256 MiB Enter your Selection:y Downloading yaffs2-image from USB... Insert a OTG cable into the connector! OTG cable Connected! Download address 0xc0000000 Download Done!! Download Address: 0xc0000000, Download Filesize:0x5ae7b40 Checksum is being calculated....... Checksum O.K. Downloading yaffs2-image successed Writing yaffs2-image into NAND... Erasing at 0x580000 -- 0% complete.Erasing at 0x800000 ... 99% complete.Erasing at 0xffe0000 -- 100% complete. Writing data at 0x580000 -- 0% complete.Writing data at 0x661800 ... Writing data at 0x5da6000 -- 100% complete. Writing yaffs2-image successed |
Remarques:
- On voit que le chargement des noyaux ou des images ‘rootfs’ ce fait en mémoire vive à l’adresse 0xC0000000 donc la taille du noyau ou du rootfs ne pourra excéder 128Mo même si l’on dispose de plus en mémoire NAND. Il faudra donc passer par une étape intermédiaire pour flasher un rootfs plus gros que 128Mo dans la NAND (indice: passer par une mémoire SD).
- On note aussi l’adresse dans la NAND à laquelle est stocké le noyau: adresse de début: 0x80000 et adresse de fin:0xA0000 soit un espace de XX octets. Pour le rootfs on a: adresse de début: 0x580000 et adresse de fin: 0xFFE0000 soit un espace de XX octets.
- On retrouvera ces valeurs lors du boot du noyau linux lors de la découverte des « partitions » de la NAND
On lance alors le système avec l’option « Boot linux » (lettre ‘b’). Si ça ne démarre pas, fixez les paramètres à passer au noyau avec « Set the boot parameter of Linux » (lettre ‘s’) comme suit:
1 |
root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200 |
On obtient les messages suivants:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
NAND read: device 0 offset 0x80000, size 0x500000 Reading data from 0x80000 -- 0% complete ... Reading data from 0x57f800 -- 100% complete. 5242880 bytes read: OK Boot with zImage Starting kernel ... Uncompressing Linux...................................................................... Done. Booting the kernel.Linux version 2.6.28.6 (root@NX-W-3) (gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67) ) #3 Sat Mar 19 18:36:33 CST 2011CPU: ARMv6-compatible processor [410fb766] revision 6 (ARMv7), cr=00c5387f CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache Machine: SMDK6410 Memory policy: ECC disabled, Data cache writeback CPU S3C6410 (id 0x36410101) ... yaffs_read_super: isCheckpointed 0xres = 800, yres = 480Took 62 samples... Top left : X = 3268 Y = 1504Took 50 samples... Top right : X = 762 Y = 1522Took 42 samples... Bot right : X = 760 Y = 2731Took 49 samples... Bot left : X = 3282 Y = 2746Took 43 samples... Center : X = 2031 Y = 2124959.654785 -0.278430 0.001384-419.278076 0.000 pointercal_ioctl: -18247 90 62891936 11 20317 -27477808 65536180 0.310019 init: cannot open '/initlogo.rle' eth0: link down sh: can't access tty; job control turned off # warning: `rild' uses 32-bit capabilities (legacy support in use) eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1 # uname -a Linux localhost 2.6.28.6 #3 Sat Mar 19 18:36:33 CST 2011 armv6l GNU/Linux # free total used free shared buffers Mem: 106952 38028 68924 0 0 Swap: 0 0 0 Total: 106952 38028 68924 # free total used free shared buffers Mem: 106952 104704 2248 0 0 Swap: 0 0 0 Total: 106952 104704 2248 # reboot |
Remarques:
- Le noyau utilisé ici est un 2.6.28 compilé pour un SoC SMDK6410
- L’écran tactile n’étant pas calibré vous passez par cette étape (lignes Top Left, Top Right, etc…)
- La mémoire vive utilisé avant lancement de l’interface graphique d’android est de 38Mo, lorsque l’environnement est complètement chargé on est à 104Mo sur 106Mo utilisé ! D’où trés certainement les problèmes de lenteur…
Après 1 minute vous avez l’écran d’accueil d’Android puis on vérifie la version du noyau :
Android fonctionne donc sur cette plateforme cependant la dalle tactile n’est pas très réactive et globalement le fonctionnement est très lent. Selon moi, il n’est donc pas utilisable dans l’état, le peu de mémoire vive est très certainement la cause de cette lenteur (voir remarques ci-dessus). Cela peut donc servir ponctuellement de plateforme de développement android mais sans plus. Cependant un accès shell ‘root’ est disponible par le biais de la voie série.
Les tests préliminaires s’arrêtent ici…Je ne teste pas Windows CE sur cette plateforme car nous n’avons pas de projet dans l’immédiat avec celui-ci. Je passe donc maintenant à la partie la plus intéressante pour nous : la personnalisation de cette plateforme pour nos besoins spécifiques.
Salut
T’as déjà réalisé des projets avec cette carte ? Je n’arrive pas à faire marcher ma carte mini 2440
Bonjour,
Le mieux est d’acheter le numéro 1 de OpenSilicium, il y a un grand article sur la mise en fonction d’une carte Mini2440 ! Sinon sur le web, il y a pas mal de ressources.