la prima cosa da scoprire e' vedere come fa' il boot, e cosa e' possibile montare come immagini .....
presto fatto , (fonte in inglese http://a10linux.org/a10_boot.html )
il processo di avvio (boot) , puo' seguire due strade, una detta di recovery (con il pulsantino recovery premuto , non presente dentro il mele A2000) , o una via standard.
il boot e' avviato dal codice brom (boot rom) codice presente sul micro e non modificabile, il quale riconosce o meno la pressione del pulsante di recovery (sarebbe piu' corretto parlare di stato logico del pin utilizzato per la funzione recovery)
secondo il sito succitato, e' possibile forzare la partenza del codice FEL tramite un codice scritto nella SDcard , scaricare http://www.hno.se/code/A10/fel-boot.sunxi
e quindi scriverlo sulla SDcard
dd if=fel-boot.sunxi of=/dev/sdX bs=1024 seek=8
brom, avvia il programma boot0 o SPL , cercandolo nell' ordine su : mmc (spl) , nand (boot0) , usb (spl) , a meno che non sia attivo il recovery, in quel caso lo cerca direttamente e solamente sulla prima porta usb!
(esiste anche un' altro link, che suggerisce un diverso funzionamento del pulsante di recovery , http://rhombus-tech.net/allwinner_a10/a10_boot_process/
secondo questa guida, la pressione del pulsantino, fa' partire un piccolo programma che mette la porta usb [quale?] in uno stato di comunicazione che accetta il dialogo con un programma, livesuite, che consente di riscrivere il contenuto della NAND anche nel caso questa sia stata cancellata!)
l' SPL (Second Program Loader) e' il programma : sun4i-spl.bin , programma che concorre all' inizializzazione dell' hardware
boot0 esegue , boot1 che inizializza l' hardware
entrambi boot0 e spl, richiamano u-boot il quale finisce l' inizializzazione del restante hardware , fornisce HAL (l' astrazione hardware) ed esegue l' avvio col Kernel!
la configurazione hardware, e' scritta in un file binario script.bin (puo' anche esser chiamato evb.bin, mele.bin sys_config.bin, l' importante e' usare lo stesso nome che e' stato settato in uboot durante la compilazione) , tale file assieme a uboot , svolgono la funzione di initrd.
la configurazione hardware, puo' esser generata tramite un tool a partire da un file di testo con estensione *.fex
basta scaricarsi i sorgenti e compilarlo
git clone https://github.com/amery/sunxi-tools
cd sunxi-tools
make
quindi avremo i due eseguibil
./bin2fex e ./fex2bin
./bin2fex mele.bin > mele.fex
in assenza del file descrivente l' hardware il processore parte con una configurazione hardware di default!
dentro al file della configurazione hardware, vi sono i parametri necessari a settare l' output video di default, quindi a poter selezionare se all' avvio usare l' uscita hdmi , video composito (scart) o vga , o due di essi in contemporanea)
il file completo lo potete scaricare da qui':
https://raw.github.com/amery/sunxi-bin-archive/master/mele-a1000/sys_config1.evb.fex
o una copia locale da qui:
http://www.davidea.it/download/mele/sys_config1.evb.fex
;---------------------------------------------------------------------------------- ;disp init configuration ; ;disp_mode (0:screen0<screen0,fb0> 1:screen1<screen1,fb0> 2:two_diff_screen_diff_contents<screen0,screen1,fb0,fb1> ; 3:two_same_screen_diff_contets<screen0,screen1,fb0> 4:two_diff_screen_same_contents<screen0,screen1,fb0>) ;screenx_output_type (0:none; 1:lcd; 2:tv; 3:hdmi; 4:vga) ;screenx_output_mode (used for tv/hdmi output, 0:480i 1:576i 2:480p 3:576p 4:720p50 5:720p60 6:1080i50 7:1080i60 8:1080p24 9:1080p50 10:1080p60 11:pal 14:ntsc) ;screenx_output_mode (used for vga output, 0:1680*1050 1:1440*900 2:1360*768 3:1280*1024 4:1024*768 5:800*600 6:640*480 10:1920*1080 11:1280*720) ;fbx format (4:RGB655 5:RGB565 6:RGB556 7:ARGB1555 8:RGBA5551 9:RGB888 10:ARGB8888 12:ARGB4444) ;fbx pixel sequence (0:ARGB 1:BGRA 2:ABGR 3:RGBA) --- 0 for linux, 2 for android ;---------------------------------------------------------------------------------- [disp_init] disp_init_enable = 1 disp_mode = 0 screen0_output_type = 3 screen0_output_mode = 4 screen1_output_type = 1 screen1_output_mode = 4
da notare che di Uboot ne esistono due o tre versioni, una liscia che sembra esser poco flessibile, ed una denominata multiboot , piu' una terza per alcune revision hardware che non funzionano con la prima.
la versione multiboot si differenzia dalla versione standard per la facilita' di configurazione tramite file testuali.
ora che sappiamo il processo d' avvio come funziona iniziamo a vedere come e' strutturato sulla SDcard!
come prima cosa, dovremo cancellare parte della sdcard se gia' l' abbiamo usata per un' altra installazione simile (A10 Allwinner)
dd if=/dev/zero of=/dev/mmcblk0 bs=1024 seek=544 count=128
cosi' facendo azzereremo le variabili d' ambiente di uboot
sulla SD card avremo di bisogno di 3 porzioni di spazio,
la prima, dall' inizio fino al settore 2048 deve esser lasciato inutilizzato per poter scrivere uboot e l' enviroment!
quindi possiamo iniziare a creare la prima partizione, circa 100 mb , formattata ext2/3 dove scrivere la cartella /boot
ed infine il restante spazio puo' esser impiegato per la root /
se vogliamo puo' esser creata una partizione di swap!
mkfs.ext3 -L "A10_BOOT" /dev/sdb1
mkfs.ext4 -L "A10_ROOT" /dev/sdb2
copiamo quindi il SPL a partire dal blocco 8 , col comando
dd if=sun4i-spl.bin of=/dev/sdb bs=1024 seek=8
(copia il file sun4i-spl.bin sulla sd a partire dal blocco 8 legendolo in blocchi da 1024 byte)
stessa cosa per u-boot a partire dal blocco 32
dd if=u-boot.bin of=/dev/sdb bs=1024 seek=32
visto che stiamo lavorando su di un device usb , assicuriamoci di aver scritto tutto e non aver ancora qualcosa nel buffer utilizzando il comando
sync
nella partizione di boot , dobbiamo inserire il file script.bin ,