🛠 Développement noyau : extlinux sur FAT32 et contournement de l'erratum i2329
Objectifs
Itérer vite sur un noyau maison du BeaglePlay (TI AM625) : la partition de boot est une FAT32 (mmcblk0p1) lue par U-Boot via extlinux, ce qui permet d'échanger un noyau depuis n'importe quel PC sans reflasher. Deux contraintes notables : la chaîne de boot attend un noyau non compressé Image, et l'erratum silicon i2329 de la famille AM62x impose, selon la configuration du port Ethernet, de piloter le MDIO en bit-bang GPIO au lieu du contrôleur MDIO matériel. On intègre le contournement en overlay.
Matériel
- Une carte BeaglePlay bootant sur SD ou eMMC
- Un PC de cross-build aarch64 avec les paquets de build du noyau
- Un accès série ou SSH fiable (risque de kernel panic)
Code complet
# 1. Monter la partition de boot FAT32
sudo mkdir -p /mnt/boot && sudo mount /dev/mmcblk0p1 /mnt/boot
cat /mnt/boot/extlinux/extlinux.conf
# 2. Config et build (noyau non compressé)
make ARCH=arm64 defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc) Image dtbs
# 3. Déployer sur la FAT
sudo cp arch/arm64/boot/Image /mnt/boot/Image-dev
sudo cp arch/arm64/boot/dts/ti/k3-am625-beagleplay.dtb /mnt/boot/dtbs/
# 4. Nouveau label dans extlinux.conf
# label dev
# linux /Image-dev
# fdtdir /dtbs/
# fdtoverlays /overlays/k3-am625-beagleplay-mdio-bitbang.dtbo # erratum i2329
# append root=PARTUUID=... rootwait console=ttyS2,115200n8
sudo umount /mnt/boot && sudo reboot
Vérification attendue
Au menu extlinux, le label dev démarre le noyau maison : uname -a affiche la version locale, dmesg montre la sonde MDIO en bit-bang GPIO au lieu du contrôleur matériel, et le lien Ethernet monte normalement. Le retour au noyau d'usine se fait en choisissant l'autre label — la FAT étant lisible depuis le PC, aucun reflash n'est nécessaire pour revenir en arrière.
Erreurs fréquentes
- Déployer un
Image.gznu : la chaîne de boot ne le décompresse pas, rien ne démarre après le choix du label. - Éditer l'extlinux de la SD alors qu'on a redémarré sur l'eMMC (et inverse) : le noyau ne change pas, croire que le build est mort.
- Ignorer l'erratum i2329 sur une configuration qui le déclenche : le PHY ne répond plus sur le MDIO matériel, pas de lien Ethernet, et des heures perdues côté câble.
- Retirer
rootwaitde la ligne append : la racine n'a pas le temps d'apparaître, panicUnable to mount root. - Travailler sans console série : au premier oops, plus aucun moyen de comprendre pourquoi.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash