Cet article a pour but de regrouper les informations essentielles pour commencer ses premiers pas avec le module iMX6 Rex fabriqué et distribué par Voipac. Je vous propose de consulter d’abord mon article sur les différentes solutions du marché à base de NXP i.MX6.
Se procurer le i.MX6 Rex
Le module iMX6 Rex est distribué par la société Slovaque Voipac. C’est un Computer on Module (CoM) destiné à être utilisé dans des projets de prototypage rapide. Même certaines solutions industrielles finales peuvent l’utiliser, ce qui permet d’éviter une conception et routage de PCB sur mesure qui est complexe (processeur, mémoire, I/O, etc) et ne peut pas toujours être amorti sur des petites séries.
Pour l’évaluer et faire ses premiers pas en vue de son utilisation dans un projet industriel, il est nécessaire de disposer d’une Carrier Board dénommée iMX6 Rex Base Board.
La conception du module iMX6 Rex a été réalisée par FEDEVEL Academy, une autre société Slovaque spécialisée dans la formation sur l’embarqué, et le design de PCB sur mesure. On comprend mieux la présence de l’inscription FEDEVEL sur le PCB du module et l’écosystème associé au produit.
Comme déjà évoqué dans mon précédent article, le iMX6 Rex est dans une phase de « maturité » du cycle de vie chez Voipac, environ 6 à 10 ans après l’introduction sur le marché. Le distributeur indique distribuer de grosses quantités à ses clients actuels, mais déconseille l’usage du module pour de nouveaux projets de conception. C’est le iMX8M qui doit remplacer à terme le iMX6 Rex.
Le wiki de Voipac contient une méthode de compilation du noyau Linux 4.1 « standalone » que j’ai réussi à faire fonctionner (détails ici), et une méthode Yocto 2.1 Krogoth qui ne fonctionne plus.
Ressources utiles au iMX6 Rex
Outre la page produit du distributeur Voipac (ci-dessus) c’est le site imx6rex.com qui contient le plus de ressources utiles. On a d’ailleurs la confirmation que Voipac est le distributeur exclusif de ce produit et FEDEVEL le concepteur (source).
Formations
Deux formations en lien avec le iMX6 Rex sont proposées par Fedevel :
Même si Linux est un noyau standard et très largement adopté, la seconde formation sur uBoot et YOCTO semble tout à fait pertinente même pour les Linuxiens de longue date.
Fichiers utiles
La page d’accueil du site imx6rex.com présente de nombreux fichiers utiles avec notamment :
Binaries
- Binaires u-boot, le système d’amorçage bien connu sur les plateformes embarquées ARM (fichiers au format imx6rex-u-boot-*)
- Images Linux (fichiers au format imx6rex-uImage-*)
- Une image de partition sda1 (fichier UImage-3.15-1GB-sda1-rw-boot-vivante)
Sources & Other files
- L’outil Cfimager, pour écrire des fichiers imx sb, ou des données raw sur une carte SD
- Une suite de tests Emc-test-all et Emc-test1 sous forme de script bash
- Un outil permettant de rendre le iMX6 bootable depuis la carte SD (IMX6DQ SPI To SD Loader Binaries Rev1.0). A priori cela est déjà le cas d’usine sur le module Rex.
- Plusieurs images : Imx6rex-debian-7.5-linux-3.0.35-1-JUL-2014, Imx6rex-filesystem-12-MAR-2014, Imx6rex-xubuntu-13-04. Il y a à priori l’OS Debian 7.5, Xubuntu, et un système de fichiers dont je ne connais pas l’utilité.
On trouve également de nombreux plans, schémas, vue 3D, listes de composants, etc.
Pages de référence
- iMX6 Rex Software
- How to start with Linux and uBoot
- How to uBoot & Kernel – Compile, Flash, Update, Boot
- How to use & access iMX6 peripherals (Examples)
- How to start with YOCTO (page ancienne remplacée par la page ci-dessous)
- How to develop your own software: uBoot, Linux, Filesystem, YOCTO (OpenRex)
Analyse de la distribution de démonstration proposée sur carte SD
Le iMX6 Rex avec sa carrier board sont livrées avec une carte SD qui contient une distribution Linux de démonstration. Une carte SD avec Android est également disponible.
Noyau Linux
Voici le résultat de la commande uname -a
1 |
Linux imx6-rexultra 4.1.36-yocto+ge698d75 #1 SMP PREEMPT Sat Mar 24 15:31:10 CET 2018 armv7l armv7l armv7l GNU/Linux |
On constate un noyau Linux 4.1.36. Cette branche du noyau est sortie en 2015 et son support étendu s’est arrêté courant 2018 (source). Il est étonnant qu’une distribution Linux complète soit fournie sur la carte SD alors que Yocto n’est pas officiellement supporté par FEDEVEL (cf. cet article).
Ce noyau est à la fois plus récent que le 3.0.35 proposé selon la méthodologie LTIB de imx6rex.com (avec le fichier L3.0.35_4.1.0_130816_source.tar.gz
), et assez ancien pour une compilation Yocto. Il est fort dommage que la procédure complète de construction avec Yocto ne soit pas rendue publique.
Processeur
Plusieurs mentions sont intéressantes en regardant le fichier /proc/cpuinfo :
1 2 |
ARMv7 Processor rev 10 (v7l) flags: half thumb fastmult vfp edsp neon vfpv3 tls vfpd32 |
Mémoire RAM
Je dispose ici d’une version avec 4 Go de mémoire, selon la commande free :
1 |
Mem : 3887796 bytes |
Partition /boot
La partition /boot est remplie avec trois fichiers dtb (Device Tree Blob) et un noyau zImage. Les Device Tree Blob décrivent l’architecture matérielle précise du SOM, et permettent d’utiliser un noyau relativement générique pour plusieurs matériels.
1 2 3 4 5 |
root@ordinateur:/mnt/sdb1# file * imx6-rexbasic.dtb: Device Tree Blob version 17, size=38328, boot CPU=0, string block size=2424, DT structure block size=35848 imx6-rexpro.dtb: Device Tree Blob version 17, size=38671, boot CPU=0, string block size=2491, DT structure block size=36124 imx6-rexultra.dtb: Device Tree Blob version 17, size=40386, boot CPU=0, string block size=2550, DT structure block size=37780 zImage: Linux kernel ARM boot executable zImage (little-endian) |
On pourra probablement exploiter ce noyau et ces Device Tree Blob pour construire une distribution Linux sur-mesure autour. Mais encore une fois, il est bien dommage que la procédure Yocto complète ne soit pas supportée (cf. ci-dessus).
Exécutables
Il est intéressant de passer la commande file sur les binaires fournis sur la carte SD de démonstration du iMX6 Rex.
1 2 |
# file bin/ls.coreutils bin/ls.coreutils: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=bb959e09b644160cb231c15f94eccfc06fcbfaab, stripped |
Si votre chaîne de compilation produit bien des binaires qui se présentent comme ceci, ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), c’est très bon signe. Si ce n’est pas le cas, il semble peu probable que vous réussissiez à l’exécuter sur la machine cible.
A noter que ceci est extrêmement proche des binaires fournis dans Raspberry Pi OS 32 bits qui se présentent comme ceci, pour comparaison :
1 |
ls: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, BuildID[sha1]=81004d065160807541b79235b23eea0e00a2d44e, for GNU/Linux 3.2.0, stripped |