Yocto Project sur i.MX8M Plus
Guide complet : du setup initial a la creation d’une image custom deployable, en passant par tous les paquets NXP disponibles.
Vue d’ensemble
NXP fournit un BSP Linux complet pour l’i.MX8M Plus via le Yocto Project. Le BSP est distribue sous forme de manifestes repo qui assemblent toutes les couches (layers) necessaires : noyau Linux, U-Boot, firmware proprietaires, drivers GPU/VPU/NPU, stack multimedia, machine learning, et plus.
Prerequisites systeme
Systeme d’exploitation
- Ubuntu 22.04 LTS ou 24.04 LTS (recommande)
- Debian 12 (Bookworm) fonctionne egalement
- Eviter Ubuntu 20.04 avec Scarthgap (incompatibilites GCC/host tools)
Ressources materielles
| Ressource | Minimum | Recommande |
|---|---|---|
| Espace disque | 100 Go | 300+ Go (SSD NVMe) |
| RAM | 8 Go | 32+ Go |
| CPU | 4 coeurs | 8+ coeurs (Ryzen 7 / Xeon) |
| Internet | Stable | Fibre (repo sync + fetcher) |
Paquets systeme requis
Installer l’outil repo
Installation du BSP avec repo
NXP distribue le BSP via des manifestes repo heberges sur GitHub. Le manifeste definit la liste exacte de tous les depots Git (layers Yocto, kernel, U-Boot, firmware…) avec leurs branches et commits.
Initialiser le workspace (Scarthgap LTS)
Manifestes disponibles (Scarthgap)
| Manifeste | Kernel | Notes |
|---|---|---|
| imx-6.6.52-2.2.2.xml | 6.6.52 | Derniere release Scarthgap (recommandee) |
| imx-6.6.52-2.2.1.xml | 6.6.52 | Patch release |
| imx-6.6.52-2.2.0.xml | 6.6.52 | Release initiale 2.2 |
| imx-6.6.36-2.1.0.xml | 6.6.36 | Release 2.1 |
| imx-6.6.23-2.0.0.xml | 6.6.23 | Release initiale Scarthgap |
Alternative : Styhead (latest)
imx-setup-release.sh
NXP fournit un script qui configure automatiquement l’environnement de build. Il cree le repertoire de build, configure local.conf et bblayers.conf, et accepte le EULA NXP.
source setup-environment build-xwayland
Choix de la DISTRO
La variable DISTRO determine le backend graphique utilise par le systeme. Pour l’i.MX8MP, trois options sont disponibles :
| DISTRO | Backend | Description | Usage |
|---|---|---|---|
| fsl-imx-xwayland | Wayland + XWayland | Weston compositor avec support X11 via XWayland. Applications X11 et Wayland natives. | Recommande — le plus polyvalent |
| fsl-imx-wayland | Wayland pur | Weston compositor sans X11. Plus leger mais pas de retro-compatibilite X. | Systemes dedies Wayland |
| fsl-imx-fb | Framebuffer | Rendu directement sur le framebuffer, sans Wayland ni X11. | Headless, kiosk, ou UI custom (Qt DirectFB) |
Choix de la MACHINE
La variable MACHINE cible une carte de reference specifique. Pour l’i.MX8MP :
| MACHINE | Description |
|---|---|
| imx8mp-lpddr4-evk | i.MX8MP EVK avec LPDDR4 — le plus courant |
| imx8mp-ddr4-evk | i.MX8MP EVK avec DDR4 classique |
| imx8mpevk | Alias generique (ancienne denomination) |
Images disponibles
NXP propose plusieurs recettes d’images, du minimal au complet :
| Image | Taille ~ | Contenu |
|---|---|---|
| core-image-minimal | ~30 Mo | Shell BusyBox, init systeme, pas de GUI — test de boot basique |
| imx-image-core | ~150 Mo | Systeme de base NXP : systemd, networking, firmware, pas de GUI |
| imx-image-multimedia | ~500 Mo | GPU, VPU, GStreamer, Wayland/Weston, lecteur multimedia, camera ISP |
| imx-image-full | ~2-3 Go | Tout : multimedia + Qt 6 + Machine Learning (TFLite, ONNX, PyTorch) + demos NXP |
imx-image-full : contenu detaille
L’image imx-image-full est l’image de reference la plus complete de NXP. Elle inclut :
Multimedia & GPU
- GPU : imx-gpu-viv (drivers Vivante GC7000UL), OpenGL ES 3.1, Vulkan 1.0, OpenCL 1.2
- VPU : imx-vpu-hantro (H.265/H.264 decode 4Kp60, H.265/H.264 encode 1080p60)
- GStreamer 1.x : plugins imx (vpudec, vpuenc, v4l2), PipeWire, ALSA
- Weston : Compositeur Wayland avec rendu GPU
- ISP : Drivers camera ISP (imx8-isp) pour double camera MIPI-CSI2
- imx-codec : Codecs audio/video proprietaires NXP
- imx-parser : Parsers multimedia proprietaires
Machine Learning / IA
- TensorFlow Lite 2.x avec delegate VX pour le NPU (Vivante VIP8000, 2.3 TOPS)
- ONNX Runtime avec acceleration VSI NPU
- ArmNN (Arm Neural Network SDK)
- OpenCV 4.x avec modules DNN
- eIQ demos : classification, detection d’objets, segmentation, pose estimation
- GoPoint : demos NXP interactives (meta-nxp-demo-experience)
Qt 6
- Qt 6.x complet : QtQuick, QtMultimedia, QtWebEngine, Qt3D
- Rendu GPU via OpenGL ES sur Wayland
- Applications de demo Qt incluses
Systeme
- systemd : init systeme et gestion des services
- NetworkManager : gestion reseau (Ethernet, WiFi, modem)
- BlueZ 5 : stack Bluetooth
- ConnMan / wpa_supplicant : gestion WiFi
- firmware-imx : firmware proprietaires (SDMA, EASRC, VPU, etc.)
- imx-test : suite de tests NXP (memoire, peripheriques, stress)
- UUU : Universal Update Utility (recovery USB)
Lancer le build
Commandes de build
Ou trouver les images generees
Parallelisme et optimisation
Layers NXP (meta-imx)
Le BSP NXP est organise en plusieurs layers Yocto, chacun avec un role specifique :
| Layer | Role | Contenu principal |
|---|---|---|
| meta-imx-bsp | BSP hardware | Machine configs, kernel, U-Boot, firmware, device tree |
| meta-imx-sdk | Distro & demos | Images recipes, distro configs, applications de demo |
| meta-imx-ml | Machine Learning | TFLite, ONNX Runtime, ArmNN, OpenCV, eIQ |
| meta-imx-cockpit | eCockpit auto | Applications cockpit automobile (optionnel) |
| meta-imx-v2x | V2X | Vehicle-to-Everything (optionnel, auto) |
| meta-freescale | BSP communautaire | Recettes stables upstreamees, machines, kernel mainline |
| meta-freescale-distro | Distro communautaire | Packagegroups, recettes multimedia communautaires |
| meta-freescale-3rdparty | Cartes tierces | SoM Toradex, Variscite, SolidRun, PHYTEC, etc. |
| meta-nxp-demo-experience | Demos GoPoint | Demos interactives NXP (IA, multimedia, benchmarks) |
| meta-arm | ARM firmware | ATF (Trusted Firmware), OP-TEE |
| meta-qt6 | Qt 6 | Framework Qt 6 complet |
Voir les layers actifs
Paquets NXP cles
Voici les paquets proprietaires et open-source essentiels fournis par NXP pour l’i.MX8MP :
BSP & Firmware
| Paquet | Licence | Description |
|---|---|---|
| firmware-imx | Proprietaire | Firmware SDMA, EASRC, EPDC, VPU, HDMI, DSP HiFi4 |
| linux-imx | GPLv2 | Kernel Linux NXP (fork avec patches i.MX) |
| u-boot-imx | GPLv2 | U-Boot NXP (fork avec support i.MX) |
| imx-atf | BSD-3 | ARM Trusted Firmware (BL31) |
| optee-os-imx | BSD-2 | OP-TEE OS pour TrustZone |
| imx-lib | LGPLv2 | Bibliotheques de support i.MX |
| imx-test | GPLv2 | Suite de tests materiel (memoire, GPU, VPU, etc.) |
GPU & Display
| Paquet | Licence | Description |
|---|---|---|
| imx-gpu-viv | Proprietaire | Drivers GPU Vivante : OpenGL ES 3.1, Vulkan 1.0, OpenCL 1.2, OpenVG |
| imx-gpu-g2d | Proprietaire | Acceleration 2D (GPU G2D) |
| libdrm-imx | MIT | Extensions DRM specifiques i.MX |
| wayland-protocols-imx | MIT | Extensions Wayland specifiques |
| weston-imx | MIT | Weston patche avec rendu GPU i.MX |
Video & Multimedia
| Paquet | Licence | Description |
|---|---|---|
| imx-vpu-hantro | Proprietaire | Drivers VPU Hantro : H.265, H.264, VP8, VP9 decode/encode |
| imx-vpu-hantro-vc | Proprietaire | Extensions VC8000E (encodeur H.265) |
| imx-codec | Proprietaire | Codecs audio/video proprietaires (AAC, MP3, WMA, etc.) |
| imx-parser | Proprietaire | Parsers multimedia (MP4, AVI, MKV, FLV, etc.) |
| imx-gst1.0-plugin | LGPLv2 | Plugins GStreamer specifiques i.MX (vpudec, vpuenc, v4l2) |
| imx8-isp | Proprietaire | Drivers ISP camera (basler, ov5640, etc.) |
Machine Learning
| Paquet | Licence | Description |
|---|---|---|
| nn-imx | MIT | Driver NPU (VIP8000) : VX Delegate pour TFLite, backend ONNX |
| tensorflow-lite | Apache 2.0 | TensorFlow Lite avec delegate VX NPU |
| onnxruntime | MIT | ONNX Runtime avec acceleration NPU |
| armnn | MIT | Arm Neural Network SDK |
| opencv | Apache 2.0 | OpenCV 4.x avec module DNN |
| tim-vx | MIT | Tensor Interface Module (API bas niveau NPU) |
Audio
| Paquet | Licence | Description |
|---|---|---|
| imx-dspc-asrc | Proprietaire | ASRC (Asynchronous Sample Rate Converter) |
| imx-dsp | Proprietaire | Firmware DSP HiFi4 |
| alsa-lib / alsa-utils | LGPLv2 | Stack audio ALSA (6x SAI, MICFIL, EASRC) |
| pipewire | MIT | Serveur audio/video moderne (remplace PulseAudio) |
Firmware proprietaires
Le paquet firmware-imx contient les blobs binaires indispensables au fonctionnement de l’i.MX8MP. Sans eux, de nombreux peripheriques ne fonctionnent pas.
| Firmware | Peripherique | Impact si absent |
|---|---|---|
| sdma-imx7d.bin | SDMA (DMA engine) | Pas de transferts DMA audio/SPI/UART |
| easrc/easrc-imx8mn.bin | EASRC | Pas de conversion de frequence audio |
| vpu/*.bin | VPU Hantro | Pas de decodage/encodage video hardware |
| hdmi/cadence/*.bin | HDMI TX | Pas de sortie HDMI |
| dsp/hifi4/*.bin | HiFi4 DSP | Pas de traitement audio DSP |
Personnaliser local.conf
Le fichier conf/local.conf est le point central de configuration du build. Voici les variables les plus utiles :
Variables essentielles
Ajouter des paquets supplementaires
Configuration kernel
Options de debug
Creer un layer custom
Pour un projet serieux, il faut toujours creer un layer dedie. Ne modifiez jamais les layers NXP directement.
Creer le layer
Structure recommandee
Modifier une recette (.bbappend)
Les fichiers .bbappend permettent de modifier une recette existante sans la copier. C’est le mecanisme standard pour customiser le kernel, U-Boot, ou tout autre paquet.
Exemple : ajouter un device tree custom au kernel
Exemple : modifier la config U-Boot
Exemple : ajouter un service systemd
Creer une image custom
Plutot que d’utiliser CORE_IMAGE_EXTRA_INSTALL dans local.conf, creez une recette d’image dediee pour votre projet :
Deployer / Flasher
Flasher sur carte SD
Flasher sur eMMC
Flasher uniquement le bootloader
SDK & cross-compilation
Yocto peut generer un SDK complet pour cross-compiler des applications en dehors de l’environnement Yocto.
Problemes courants
| Probleme | Cause | Solution |
|---|---|---|
| EULA not accepted | EULA NXP non accepte | Ajouter ACCEPT_FSL_EULA = « 1 » dans local.conf |
| do_fetch failed | Source introuvable / timeout | Verifier la connexion. Relancer bitbake -c cleanall <recipe> puis rebuild |
| No space left on device | Espace disque insuffisant | Liberer de l’espace ou deplacer DL_DIR / SSTATE_DIR / TMPDIR |
| OOM Killer | RAM insuffisante | Reduire BB_NUMBER_THREADS, ajouter du swap |
| Kernel ne boot pas | Device tree incorrect | Verifier KERNEL_DEVICETREE, tester avec le DTB de l’EVK |
| GPU ne fonctionne pas | DISTRO framebuffer au lieu de Wayland | Utiliser fsl-imx-xwayland et verifier imx-gpu-viv |
| NPU non detecte | Driver galcore absent ou config kernel | Verifier CONFIG_MXC_GPU_VIV=y et presence de nn-imx |
| locale error | Locales non configurees sur le host | sudo locale-gen en_US.UTF-8 |
| Build U-Boot echoue sur Ubuntu 20.04 | GCC/binutils trop anciens pour Scarthgap | Migrer vers Ubuntu 22.04+ ou utiliser un container Docker |
Commandes de debug bitbake
Astuces & bonnes pratiques
Accelerer les builds
- SSD NVMe obligatoire — Un build Yocto sur HDD est 3-5x plus lent
- Partager DL_DIR et SSTATE_DIR entre les builds pour eviter de tout retelecharger
- Utiliser un serveur de build avec 16+ coeurs et 64 Go de RAM pour les builds CI
- sstate mirror : configurer un miroir sstate sur un serveur HTTP pour partager le cache entre les developpeurs
- hashserv : utiliser le hash equivalence server de Yocto pour optimiser les rebuilds
Gestion des versions
- Versionner votre layer custom dans Git (jamais les layers NXP)
- Utiliser un manifest custom repo qui reference vos layers en plus des layers NXP
- Pinater les versions dans votre manifest avec des commits precis (pas de HEAD)
- Tester les mises a jour BSP sur une branche dediee avant de merger
Docker
Builds CI/CD
- GitLab CI / GitHub Actions : utiliser une image Docker CROPS avec des runners puissants
- kas : outil de configuration declaratif (YAML) pour Yocto — simplifie le setup CI
- Toaster : interface web Yocto pour monitorer les builds
Ressources
Documentation NXP
- UG10164 : i.MX Yocto Project User’s Guide (document de reference principal)
- RN00210 : i.MX Linux Release Notes
- AN12292 : i.MX Graphics User’s Guide
- UG10166 : Machine Learning User’s Guide (eIQ)
Depots GitHub NXP
- nxp-imx/imx-manifest : Manifestes repo de toutes les releases
- nxp-imx/meta-imx : Layers Yocto NXP (meta-imx-bsp, meta-imx-sdk, meta-imx-ml)
- nxp-imx/linux-imx : Sources du kernel Linux NXP
- nxp-imx/uboot-imx : Sources de U-Boot NXP
Communaute Yocto
- docs.yoctoproject.org : Documentation officielle Yocto Project
- layers.openembedded.org : Index de tous les layers disponibles
- community.nxp.com : Forum NXP (i.MX Processors Knowledge Base)
- meta-freescale mailing list : Communaute BSP open-source
Articles Wiki Connexes
Besoin d’aide pour votre BSP Yocto i.MX8MP ?
Creation de layer custom, portage sur votre carte, optimisation d’image, integration CI/CD — je vous accompagne.
Discuter de votre projet →