Visualizzazione post con etichetta kernel. Mostra tutti i post
Visualizzazione post con etichetta kernel. Mostra tutti i post

lunedì 23 marzo 2009

Compilare il kernel Atrmark 2.6.26 per armadillo 500

Ecco le maggiori info :)
Cercando in rete ho scoperto che su armadillo 500-FX è già ststo portato android con kernel 2.6.26.
Dato che le due macchine sono così simili a livello hardware mi è parso così strano che il kernel più aggiornato disponibile per armadillo 500 sia il solo 2.6.18.. Quindi ho cercato tra i repository dell'armadillo 500-FX i sorgenti del kernel con l'intenzione di portarlo su armadillo-500.
Il kernel disponibile era proprio il 2.6.26 e con gioia ho scoperto che esisteva anche il file di configurazione per armadillo 500! nonché tutti i sorgenti specifici della CPU board e driver della board di sviluppo!

Bene! Allora i passi per il deploiment:
1
Scaricare e decomprimere i sorgenti del kernel dai repository atmark:
$ wget http://download.atmark-techno.com/armadillo-500-fx/source/kernel/linux-2.6.26-at3.tar.gz
$ tar -xvf linux-2.6.26-at3.tar.gz
2
Configurare e compilare i sorgenti per armadillo con l'aiuto di android:
$ cd linux-2.6.26-at3
$ make armadillo500_defconfig
$ export ARCH=arm
$ export CROSS_COMPILE=[basePathAndroid]/cupcake/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-
$ make
Nota: ho usato la toolchain di cupcake, credo che anche con il branch master non abbia problemi..
3
Deploiment nella scheda:
In ./arch/arm/boot sono stati creati i file immagine del kernel: Image e compresso zImage
quindi copiando zImage nella cartella /tftp e scaricandolo nella flash attraverso hermit come nei post precedenti (indicando il nome di file zImage eh!) al reboot tutto funziona correttamente :)

Nota: il comando tftpdl da hermit della scheda, all'attivazione della periferica di rete è come se alcune volte non avesse il link attivato.. rimanendo in attesa della risposta dal server per il download.
Workaround: se da workstation eseguo il ping al'indirizzo impostato per la board il download dell'immagine, prima in attesa, parte contemporaneamente.

giovedì 19 marzo 2009

Porting del Kernel Android 2.6.27 su Armadillo 500

Link di riferimento:
Specifiche della board: http://www.atmark-techno.com/en/products/armadillo/a500/specs
Specifiche del processore: http://www.arm.com/products/CPUs/ARM1136JF-S.html
Area di download sw armadillo: http://download.atmark-techno.com/armadillo-500/

Bene Bene! Prima fase reale del mio progetto: Porting del kernel più aggiornato possibile nella board di sviluppo Atmark Armadillo 500! Questa monta un processore Freescale i.MX31L con set di istruzioni ARMv6.
Ho ordinato il mio fantastico libro Building Embedded Linux Systems, Second Edition che spero illuminerà la mia strada ma nell'attesa che arrivi cerco di individuare le modifiche fatte al kernel "vanilla" per supportare la scheda nella versione presente sul sito atmark.

Importante: Questi Giapponesi scrivono solo in giapponese! Servirà la mail che ho inviato per la richiesta di doc inglese?

Altro: Il kernel a disposizione è un 2.6.18 debian etch1 sssoooo old! :)

sabato 7 marzo 2009

Sul repository locale del kernel

Nella cartella "master/prebuilt/android-arm/kernel/" troviamo un bellissimo file "PREBUILT" che recita:
To rebuild the emulator kernel:

% git clone git://android.kernel.org/kernel/common.git kernel
% cd kernel
% export ARCH=arm
% export CROSS_COMPILE=arm-eabi-
% make goldfish_defconfig
% make

If kernel/common.git is mapped into your repo client, you can
just built it from there instead of re-cloning it.
ehm.. un pò da adattare dato che non menziona il branch android-goldfish-2.6.27 (nel branch common del kernel non c'è il file goldfish_defconfig) e che la toolchain di crosscompilazione non è (per ora) nel path d'esecuzione principale (non abbiamo modificato PATH).
Ma almeno abbiam trovato delle informazioni :)

Il nostro nuovo Android sull'emulatore!!

Bene bene, compilato il Kernel 2.6.27 per la macchina goldfish eseguiamo il tutto sull'emulatore!
Raccimoliamo tutti i file di output dei processi di build necessari che sono:
  • Kernel, l'immagine compressa:
    alberdroid/kernel-goldfish/.repo/manifests/arch/arm/boot/zImage
  • Android, i file immagine per ramdisk userdata e system nella cartella:
    alberdroid/master/out/target/product/generic
Io ho copiato la zImage nella cartella di output di android:

$ cd PATH_GIUSTO/alberdroid/master/out/target/product/generic/
$ cp PATH_GIUSTO/alberdroid/kernel-goldfish/.repo/manifests/arch/arm/boot/zImage .

e via all'emulatore!
$ emulator -system . -kernel zImage -show-kernel
Così l'emulatore cercherà i file ramdisk.img userdata.img e system.img nella cartella corrente (-system .), utilizzerà zImage come immagine del kernel (..non utilizzare l'immagine Image ma quella compressa zImage) e nella shell corrente mostrerà l'output del kernel!

venerdì 6 marzo 2009

Kernel per Android..

Link di riferimento:
http://groups.google.com/group/android-kernel
Allora, la sottocartella kernel esiste in master! e perché non viene compilata????
Urc! solita ricerca in rete e vien fuori che la versione che ho non è propriamente la versione per goldfish -> attiviamo il branch giusto!
..consiglio, creiamo un'altra directory per il nostro kernel:
$ mkdir -p alberdroid/kernel-goldfish
$ cd alberdroid/kernel-goldfish
$ repo init -u git://android.git.kernel.org/kernel/common.git -b android-goldfish-2.6.27
$ repo sync
Solito tempo che passa.....
poi:
-
Edit: perché ha salvato i sorgenti in .repo/manifests ??
cmq, dal precedente codice shell
$ cd .repo/manifests
e si continua con:
-
$ export ARCH=arm
$ export CROSS_COMPILE=PATHGIUSTO/alberdroid/master/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-
$ make goldfish_defconfig
$ make
Verrà così creato un buon kernel per l'emulatore :)

Prima Build!

Dopo il sync con i sorgenti via al processo di make!
se si vuol compilare il sistema per l'emulatore goldfish (emulatore arm v5) allora dalla directory madre eseguiamo:
$ cd ~/alberdroid/master
$ make
Il processo è abbastanza lungo (più di un'ora nel mio portatile) e necessita di molta memoria! 1GB di ram non basta.....

Ma al termine, con il comando:
$ emulator -system out/target/product/generic/ \
-kernel prebuilt/android-arm/kernel/kernel-qemu -show-kernel
Vedremo apparire il nostro caro emulatore arm con android funzionante!!
Chiaro.. dovremmo avere l'emulatore installato correttamente.. rimando all'installzione dell'sdk per le applicazioni di android.. ma notiamo una cosa fondamentale: Il kernel!
In quasi due ore di compilazione il processo make non ha compilato il kernel! ho dovuto usarne uno che stà nella cartella prebuilt!

Ma siamo contenti d'aver compilato tutto il resto dai..! Il prossimo post sarà dedicato al kernel!