Home > Gnu/Linux, Hardware > Compilare il kernel android

Compilare il kernel android

Salve a tutti, di seguito una guida per compilare il kernel del nostro disposivo android.

L'articolo sarà volutamente semplice (per gli addetti ai lavori) e si concentrerà più sui comandi da dare che sulle spiegazioni! Se avete qualche domanda, chiedetelo pure attraverso i commenti!

Per compilare il kernel abbiamo bisogno di un sistema operativo Linux e di alcuni pacchetti aggiuntivi, presenti in tutte le distribuzioni linux più comuni.
Ad esempio per ubuntu, potete installare tutto quanto con questo comando:

sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind

Visto che il nostro cellualre ha un'archiettura diversa da quella del nostro pc (ARM), è necessario un compilatore apposito, che potete scaricare da qui:
http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite
Scegliete IA32 GNU/Linux Installer e installatelo seguendo la procedura guidata.

Impostiamo le variabili di ambiente:

echo "export ARCH=arm
export CROSS_COMPILE=arm-none-linux-gnueabi-
export PATH=$PATH:~/CodeSourcery/Sourcery_G++_Lite/bin" > export_arm.sh
. export_arm.sh

Bene adesso il nostro pc + pronto per compilare, adesso abbiamo bisogno di reperire i sorgenti del kernel.
Possiamo scaricarli o in formato tar.gz e decomprimerli in una directory, oppure scaricare direttamente i sorgenti dal repository con git.

mkdir kernel_source
cd kernel_source
git clone git://gitorious.org/liquide/kernel.git

nel caso abbiamo necessità di aggiornare i nostri sorgenti con gli aggiornamenti del repository git:
cd ~/kernel_source/kernel
git pull

per copilare il kernel abbiamo bisogno di una configurazione di partenza che poi possiamo modificare a nostro piacimento.
Possiamo prenderla dal nostro cellulare, oppure prendere quella del repository, o da qualche parte in giro per la rete.
Attenzione al fatto che ogni versione di kernel ha il suo file .config (per rendere compatibile il file .config con versioni nuove: make oldconfig)

Possiamo prendere il file .config anche dal nostro cellulare:

adb pull /proc/config.gz ~/kernel_source/kernel
cd ~/kernel_source/kernel
gunzip config.gz

una volte reperito il nostro file .config e posizionato nella directory dei nostri sorgenti diamo:

make menuconfig

e impostiamo la configurazione desiderata
poi

make

e partirà la procedura di compilazione, se tutto è andato bene troveremo il nostro kernel qui:
~/kernel_source/kernel/arch/arm/boot/zImage

Adesso dobbiamo "fondere" insieme il nostro kernel con il ramdisk, da cui verrò fuori il nostro boot.img

Possiamo prendere il ramdisk, da un altro boot.img (reperito in rete) o anche dal nostro cellulare:

adb shell
cat /dev/mtd/mtd2 > /sdcard/running.img
exit
adb pull /sdcard/running.img ~/kernel_source/
cd ~/kernel_source/
cp running.img boot.img

Adesso che abbiamo il boot.img, scompattiamolo:

./unpack-bootimg.pl boot.img

Volendo possiamo modificare il nostro ramdisk, una volta fatto dobbiamo ricomprimere la directory:

cd boot.img-ramdisk
find . | cpio -o -H newc | gzip > ../newramdisk.cpio.gz

Adesso ricreiamo il boot.img:

./liquidmkbootimg –cmdline 'panic=10 no_console_suspend=1 console=null' –kernel zImage –ramdisk newramdisk.cpio.gz -o newboot.img

Se non abbiamo un liquid, ma un altro terminale android:

./mkbootimg –cmdline 'panic=10 no_console_suspend=1 console=null' –kernel zImage –ramdisk newramdisk.cpio.gz -o newboot.img

Adesso possiamo trasferirlo sul cellulare, copiamo il nostro boot.img nella directory tools di sdk di android (quella dove c'è adb).
Abilitiamo il debug USB del nostro terminale android.

Attenzione, adesso procedete a vostro rischio e pericolo.
Vi consiglio di salvarvi il vostro boot.img prima di procedere.

adb reboot bootloader
fastboot -i 0×0502 flash boot boot.img
echo Rebooting…
fastboot -i 0×0502 reboot

Se l'immagine che abbiamo preparato non dovesse funzionare, possiamo ripristinare la vecchia con questa procedura:
togliere la batteria
attendere 10 secondi
rimettere la batteria
attaccare il cavo usb al pc
quando compare l'immagine della batteria premere: BACK e CAMERA
entreremo in fastboot

adesso ripete la procedura di flash del boot, ma usiamo il boot.img funzionante.
 

Condividi:
  • Print
  • del.icio.us
  • Facebook
  • Twitter
  • Google Bookmarks
  • email
  • Identi.ca
  • LinkedIn
  • Digg
  • Netvibes
  • PDF
  • Reddit
  • RSS
  • Yahoo! Bookmarks

michele Gnu/Linux, Hardware , , , , , , , , , ,

  1. Nessun commento ancora...
  1. Nessun trackback ancora...
Creative Commons License
I contenuti di questo sito sono rilasciati con licenza Creative Commons.