domenica 10 maggio 2009

Beagleboard, come ho fatto per avviare la Angstrom

Dunque:

- fase 1, ricompilarsi "in casa" la Ångström (cfr. qui e qui)

- fase 2, allestirsi una SD card con almeno due partizioni:
* una in formato MSDOS VFAT in cui mettere il kernel (il boot manager se la cava solo con la FAT32)
* l'altra in formato EXT2 in cui mettere il filesystem

Note:
* va bene qualsiasi filesystem supportato dal kernel (so per certo solo di ext2 ed ext3, ma l'ext3 è ancor più lento dell'ext2 se usato su una secure digital; l'ideale sarebbe l'ubifs ma per quello farò esperimenti in futuro)

* ho fatto tre partizioni: la prima è FAT32 da circa 20Mb, per accomodarmi oltre al kernel Angstrom anche kernel+validazione+MLO etc, la seconda EXT2 da circa 100Mb (avevo sopravvalutato le necessità della Angstrom!) e la terza (800Mb e passa) di nuovo in FAT32 perché quella ciofèca di Mac OS X è incapace di scrivere su EXT2 (ha un paio di driver ma sono vecchi e possibilmente bacati) - la mia memory card è in realtà una MicroSD da un giga, con adattatore da SD a MicroSD; recentemente avevo adocchiato una SD 16Gb solo per imbottirla di file multimediali da portarmi in giro sulla Beagleboard

- fase 3, accendere la Beagleboard, interrompere la sequenza di boot e dare questi comandi:
mmcinit
setenv bootargs 'console=ttyS2,115200n8 console=tty0 rootfstype=ext2 root=b302 rootdelay=1 rw'
fatload mmc 0 80200000 uImage.bin
bootm 80200000

Note:
* non utilizza alcuna ramdisk! È sufficiente il kernel Linux (uImage.bin) ed un "root filesystem" con tutto il resto (moduli, eseguibili, Xorg, etc), nel mio caso da prendere a b302 (siccome il kernel non ha montato ancora il root filesystem, per dirgli dov'è il root filesystem non si può usare "/dev/qualcosa"). Quel b302 indica il device che ha major=176 (in esadecimale b3), cioè quello delle memory card, e la partizione 02 (cioè la seconda partizione, quella che sopra avevo formattato in EXT2 e riempito col filesystem Linux compilato col famoso bitbake x11-image)

* mmcinit è l'inizializzazione dello slot SD/MMC (dopo questo comando si può dare per esempio un comando fatls mmc 0:1 per vedere cosa c'è sulla prima partizione FAT della memory card)

Nota sul setenv dei parametri di boot del kernel Linux:
* specifica la solita seriale RS232 a 115200
* indica che il filesystem root è ext2 (non so se sia davvero necessario, ma ce l'ho messo lo stesso)
* rootdelay indica di fare una piccolissima pausa prima di montare la root (non so perché, ma qui da me il kernel non ce la fa a montarlo se non c'è quel rootdelay; può darsi che ciò sia dovuto alla tremenda vecchiaia della MicroSD sopracitata)
* rw indica che il filesystem dev'essere montato read-write (già pronto per l'uso, non c'è bisogno di arzigogolare con readonly e affini).

Il comando fatload carica poi il file della image del kernel Linux in RAM ad indirizzo prefissato (0x80200000) e da lì lo eseguiamo col comando bootm.

3 commenti:

  1. Avevo dimenticato di specificare che la Angstrom si compila col metodo OpenEmbedded.

    RispondiElimina
  2. Ho seguito scrupolosamente ogni passo, ma a volte ho ancora problemi a bootare da SD. La mia e' una "vecchia" rev B4. Ho subito aggiornato u-boot all-ultimo grido ( altrimenti il kernel rimaneva in hang perche' u-boot passava un machine number sbagliato al kernel ).
    Detto questo, dopo aver corrett aggiornato i bootargs, a volte il sistema mi si inchioda alla riga console [ttyS2] enabled. Se invece blocco il boot e immetto gli stessi comandi manualmente in u-boot, funziona tutto.
    Qualche idea?

    contemporaneamente volevo capire: ci mette 15min a bootare? E' normale? E' 1 problema di SD lenta?
    Se flasho il kernel su NAND cambia qualcosa? ( non credo visto che con la bootm questo viene gia' effettivamente eseguito in RAM ).

    Grazie

    Ricky

    RispondiElimina
  3. Per l'environment:

    - blocca il boot, aggiorna tutte le variabili e poi dai il comando saveenv così non hai più bisogno di bloccare il boot.

    Probabilmente anche la parte riguardante i command-line parameters del kernel deve essere modificata prima di fare quel saveenv

    15 minuti per il boot sono troppi; anche su una B4, non dovresti veder passare più di un paio di minuti. Probabilmente durante il boot c'è qualcuno dei drivers o servizi che si impalla e resta lì fermo finché non va in timeout.

    La NAND serve solo per evitare di avere una memory card inserita.

    RispondiElimina