Valutazione attuale: 1 / 5

Stella attivaStella inattivaStella inattivaStella inattivaStella inattiva
 

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 ,