sabato 6 giugno 2015

SheevaPlug : "UBIFS: recovery needed"

Qualche tempo fa è partita la corrente e con essa anche lo SheevaPlug, già una volta ho dovuto sostituire la parte dell'alimentazione perchè si era bruciata ma questa volta sono stato più fortunato, infatti il led dell'alimentazione era acceso e anche quelli sulla presa di rete, quindi il problema per cui non vi potevo accedere doveva essere di diversa natura.
Ho quindi attaccato il cavo USB alla presa JTAG, che funge anche da console seriale, e mi ci sono collegato con il classico :

screen /dev/ttyUSB0 115200
e scopro che l'avvio si interrompe con il seguente messaggio :
UBIFS: recovery needed
Error reading superblock on volume 'ubi:rootfs'!
UBIFS not mounted, use ubifs mount to mount volume first!
UBIFS not mounted, use ubifs mount to mount volume first!
Wrong Image Format for bootm command
ERROR: can't get kernel image!
purtroppo cercando in rete scopro che da U-Boot non è possibile eseguire il recovery del file system, la sfiga di avere installato Debian sulla NAND.
La soluzione è in realtà semplice, basta eseguire questi comandi :
ubiattach /dev/ubi_ctrl -m 2
mount -t ubifs ubi0:rootfs /mnt
e verrà eseguito il recovery, in quanto si accorge del problema sul file system.
Ma per eseguirlo bisogna avere un sistema da avviare da USB o da SD, ecco io con questo device la SD non sono mai riuscito ad usarla, provato schede di ogni marca da 2 a 8 giga e nessuna è mai andata bene.
Insomma alla fine della fiera ho seguito questa guida è ho installato Wheezy su USB, poi avviato da questa, fatto il mount e corretto il problema.
Due cose, la guida ha i link per scaricate l'installer di Jessie che però non funziona, poi una volta installato Wheezy bisogna installare il pacchetto mtd-utils altrimenti non verrà riconosciuto UBIFS come un file system valido.

Per abilitare nuovamente il boot dalla  NAND digitare questi comandi al prompt di U-BOOT :
setenv mtdids nand0=orion_nand
setenv mtdparts mtdparts=orion_nand:0xa0000@0x0(u-boot),0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs)
setenv bootargs_ubi 'console=ttyS0,115200 ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs'
setenv bootcmd_ubi 'ubi part nand0,2; ubifsmount rootfs; ubifsload 0x1100000 /boot/uInitrd; ubifsload 0x800000 /boot/uImage'
setenv bootcmd 'setenv bootargs $(bootargs_ubi); run bootcmd_ubi; bootm 0x00800000 0x01100000'
 
saveenv
Ora posso usare tranquillamente la mia Wheezy installata su NAND, ma sarà bene che mi tenga da parte una chiavetta USB in caso di necessità.