Même si elle n'est pas d'une clareté violente:
Lors de l'installation précédente, le Board Support Package avait fait tout le travail à notre place et avait installé entre autre U-Boot, le boot loader des BananaPI. Sauf que le dit BSP était bloqué à l'antique noyau 3.4.x associé à un non moins antédiluvien U-Boot.
Les kernels récents nécessitent un U-Boot à la page ... heureusement, pas de big-bang, car ce dernier fonctionne aussi avec notre vieux kernel.
Première étape donc : mettre à jour U-Boot et continuer à booter sous 3.4.x
U-boot permet maintenant d'afficher ses informations aussi sur un écran (HDMI, VGA ou composite, voir ses options).
Il n'empêche que je ne saurais trop recommander l'usage d'un câble permettant l'accès à la console ... indispensable si quelque chose ne va pas !
Nous allons avoir besoin de 2 outils supplémentaires pour mener à bien cette installation :
emerge -va dtc dev-embedded/u-boot-tools
Pas besoin d'être joueur ici : évitons les problèmes en prenant la dernière version stable.
cd bPI
git clone git://git.denx.de/u-boot.git
cd u-boot
Il faut bien avouer que notre A20 n'est pas des plus rapide pour les grosses compilations : comme je le sais avec portage, j'utiliserai donc la puissance des autres machines de mon parc grâce à distcc.
Dorénavant, la compilation d'U-Boot ressemble étrangement à celle du ... kernel.
Pas de surprise, pas de piège, le BananaPI (ainsi d'ailleurs que le BananaPro) fait partie des cibles connues :
make Bananapi_defconfig
make CC="distcc" -j4
On obtient dans la racine des sources la tant convoitée image d'U-Boot :
-rw-r--r-- 1 laurent laurent 494509 26 avril 00:20 u-boot-sunxi-with-spl.bi
Il ne reste plus qu'à créer le script de démarrage comme suit :
setenv bootm_boot_mode sec
setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10
load mmc 0:1 0x43000000 script.bin || load mmc 0:1 0x43000000 boot/script.bin
load mmc 0:1 0x42000000 uImage || load mmc 0:1 0x42000000 boot/uImage
bootm 0x42000000
et à le compiler par un
mkimage -C none -A arm -T script -d boot.cmd boot.scr
A noter que pour cet exemple, je n'ai rajouté aucun paramètre au kernel : on trouvera sur cette page quelques options qui peuvent libérer quelques mégas de RAM.
Maintenant que nous avons les binaires, il est temps de graver notre SD.
Même si on a une confiance inébranlable dans la technique, il est évidemment beaucoup plus sûr d'utiliser une SD vierge : on garde ainsi sous la main le système qui fonctionne, sur la carte originale.
La nouvelle SD sera gravée sur un PC où elle est présentée en tant que sdb (ce qui apparait clairement dans /var/logs/messages à son insertion).
Effacement de ce qui pourrait s'y trouver précédemment :
dd if=/dev/zero of=/dev/sdb bs=1M count=1
Installation de l'image que nous venons de compiler
dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8
Et enfin création des 2 partitions :
sfdisk -R ${card} cat <<EOT | sfdisk --i-order -L -uM /dev/sdb 1,32,c ,,L EOT
Et leur formatage
mkfs.vfat /dev/sdb1 mkfs.ext4 /dev/sd2
Comme nous l'avons vu plus haut, 2 partitions ont été créées sur la SD. Dans la première, nous allons y placer ce qui permet au système de charger son noyau, à savoir :
La 2nd partition doit contenir le stage3 du système ... que nous allons récupérer lui-aussi de notre SD originale. Combien de fois ai-je lu sur les forums qu'il fallait passer par une copie de bas niveau par dd ou outils du même genre. Mouai, quelle perte de temps : ce n'est qu'un file system comme un autre et un simple tar est suffisant (et beaucoup plus rapide).
Genre
tar cvf /pt_montage_sdb2 /dir_ou_il_y_a_de_la_place/root.tar
puis, après avoir inséré la nouvelle carte
tar xvf /dir_ou_il_y_a_de_la_place/root.tar /pt_montage_sdb2
On passe par tar, car les PC n'ont généralement qu'un emplacement pour les cartes SD. De plus, le tar préserve les droits particuliers que peuvent avoir les fichiers.
On éjecte proprement la carte du PC, on l'insère délicatement dans le BananaPI, on l'alimente et ... RIEN ! Seule la LED rouge s'éclaire, mais la verte reste désespérément éteinte et la machine n'apparaît pas sur le réseau.
Heureusement, vous avez attaché un câble de console où on voit qu'U-Boot a bien tenté quelque chose mais n'est pas content :
Error: unrecognized/unsupported machine ID (r1 = 0x100010bb).
Si c'est le cas, c'est que le kernel 3.4 était trop vieux et il existe une configuration pour U-Boot pour corriger la situation. Retour dans le répertoire des sources de ce dernier
Comme je le disais précédemment, U-Boot reprend plus ou moins la même philosophie que celle du kernel pour sa configuration, qui se fait par un
make CC="distcc" -j4 menuconfig
pour se retrouver dans le même genre de menu
.config - U-Boot 2017.05-rc2 Configuration
─────────────────────────────────────────────────────────────────────────────────────────────────────────────
┌─────────────────────────────────── U-Boot 2017.05-rc2 Configuration ───────────────────────────────────┐
│ Arrow keys navigate the menu. <Enter> selects submenus ---> (or empty submenus ----). Highlighted │
│ letters are hotkeys. Pressing <Y> includes, <N> excludes, <M> modularizes features. Press │
│ <Esc><Esc> to exit, <?> for Help, </> for Search. Legend: [*] built-in [ ] excluded <M> module │
│ < > module capable │
│ ┌────────────────────────────────────────────────────────────────────────────────────────────────────┐ │
│ │ Architecture select (ARM architecture) ---> │ │
│ │ ARM architecture ---> │ │
│ │ General setup ---> │ │
│ │ Boot images ---> │ │
│ │ API ---> │ │
│ │ Boot timing ---> │ │
│ │ Boot media ---> │ │
│ │ Environment ---> │ │
│ │ (2) delay in seconds before automatically booting │ │
│ │ Console ---> │ │
│ │ () Default fdt file │ │
│ │ [ ] add U-Boot environment variable vers │ │
│ │ [*] Display information about the CPU during start up │ │
│ │ [*] Display information about the board during start up │ │
│ │ Start-up hooks ---> │ │
│ │ SPL / TPL ---> │ │
│ │ Command line interface ---> │ │
│ └───────────────↓(+)─────────────────────────────────────────────────────────────────────────────────┘ │
├────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ <Select> < Exit > < Help > < Save > < Load > │
└────────────────────────────────────────────────────────────────────────────────────────────────────────┘
La page du Wiki de SunXI liste quelques problèmes qui peuvent survenir : dans mon cas, j'ai activé l'option "Enable workarounds for booting old kernels" qui se trouve sous "ARM architecture". Ils indiquent aussi que j'aurai pu mettre-à-jour mon kernel vers la dernière version de leur repo pour 3.4, mais je n'allais pas m'acharner alors que mon but est justement de passer à une version 4.x.
On recompile U-Boot, on l'installe sur la SD et zou, problème résolu !
Visitez : Nos sorties Ski et rando |
Copyright Laurent Faillie
2001-2024
N'oubliez pas d'entrer le mot de passe pour voir aussi les photos perso. |
Contactez moi si vous souhaitez réutiliser ces photos et pour les obtenir avec une plus grande résolution. |
Visites durant les 7 derniers jours au total. |
Vous pouvez
laissez un commentaire
sur cette page.
Bonjour,
J'essaye de compiler la version actuelle de U-Boot (2017.07-rc2) mais j'ai l'erreur suivante:
"ImportError: No module named _libfdt"
Avez-vous rencontre ce probleme?
Merci,
JM