OpenWrt Kamikaze 7.07 et La Fonera : Can’t locate c0000(786432) bytes free in FLASH
En voulant mettre à jour mon routeur La Fonera avec la version 7.07 d'OpenWrt Kamikaze, j'ai rencontré un problème lors du flashage via RedBoot :
Can't locate c0000(786432) bytes free in FLASH
En d'autres termes : impossible d'allouer 786432 octets en mémoire flash. Le problème vient de la taille du noyau Linux, le fichier openwrt-atheros-2.6-vmlinux.lzma. Jusqu'à présent sa taille était de 720896 octets (0xB0000) mais, à présent, il fait 786432 (0xC0000). Il faut donc revoir les valeurs de la table des images de RedBoot.
Voici ce que nous avions jusqu'à présent :
RedBoot> fis list Name FLASH addr Mem addr Length Entry point RedBoot 0xA8000000 0xA8000000 0x00030000 0x00000000 rootfs 0xA8030000 0xA8030000 0x00700000 0x00000000 vmlinux.bin.l7 0xA8730000 0x80041000 0x000B0000 0x80041000 FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000 RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000
Pour gagner de la place pour le noyau, nous devons allouer moins d'espace pour le rootfs et arriver à :
RedBoot> fis list Name FLASH addr Mem addr Length Entry point RedBoot 0xA8000000 0xA8000000 0x00030000 0x00000000 rootfs 0xA8030000 0xA8030000 0x006F0000 0x00000000 vmlinux.bin.l7 0xA8720000 0x80041000 0x000C0000 0x80041000 FIS directory 0xA87E0000 0xA87E0000 0x0000F000 0x00000000 RedBoot config 0xA87EF000 0xA87EF000 0x00001000 0x00000000
Le jeu de commandes à utiliser devient donc :
load -r -b 0x80041000 openwrt-atheros-2.6-root.jffs2-64k fis create -b 0x80041000 -f 0xA8030000 -l 0x006F0000 -e 0x00000000 rootfs
puis
load -r -b 0x80041000 openwrt-atheros-2.6-vmlinux.lzma fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
0x006F0000 et non plus 0x00700000 ! Vous pouvez, avant cela supprimer les images existantes avec fis delete ou, plus simplement, réinitialiser le tout avec fis init -f. Ceci ne supprimera pas le bootloader et recréera un répertoire système (System directory). Notez qu'il est important de flasher l'image rootfs avant celle du noyau. En effet, on précise avec l'option -f l'emplacement de l'image en 0xA8030000. Si vous flashez le noyau en premier, cet emplacement sera déjà (dynamiquement) utilisé.