[GUIDA][MOD Kernel] Stock kernel con supporto per init.d
PREMESSA:
I vari kernel custom a disposizione per il Next Turbo non sembrano essere esenti da bug. D'altronde sono compilazioni dei codici sorgente AOSP che sono datati 14 Ottobre 2011. L'ultima stock ROM, la XILG1_ITVLG2_XXLF3 sembra aver risolto o perlomeno migliorato diverse situazioni, tra le quali i consumi della batteria. Purtroppo, con i kernel stock non è possibile far uso degli script in /etc/init.d, quali possono essere S2SD, l'Adrenaline Engine e altri.
Mi sono quindi preso il compito di modificare il kernel XILG1, o per l'esattezza, la RAM disk nel suo boot.img, come verrà spiegato qui di seguito.
PREFAZIONE TECNICA:
Quando si installa un kernel, in realtà si copia in una partizione specifica un file chiamato boot.img. Questo file è dotato di due componenti (compresse in formato gz, lzma oppure xz. Assumiamo gz per semplicità di esposizione):
- kernel.gz: Il kernel vero e proprio
- ramdisk.gz: La RAM disk
Il kernel è quello che viene compilato dai codici sorgenti. La RAM disk contiene invece tutti i file di configurazione di sistema necessari a eseguire il boot più alcuni moduli e comandi binari. In particolar modo contiene il file init.rc che è quello che istruisce il processo init su come eseguire la boot sequence. Qualcuno avrà notato che anche modificando via shell il file /init.rc le modifiche fatte vengono perse dopo il boot. Questo perché init.rc e gli altri file di configurazione del boot.img non fanno parte del file system fisico, ma vengono caricati ogni volta dopo il boot in una o più partizioni di una RAM disk. Risultato? Le modifiche effettuate sono di fatto scritte in RAM e quindi volatili.
Come si risolve questa cosa? Solo ed esclusivamente nel seguente modo:
- Scompattando il boot.img nei due file menzionati
- Decomprimendo il file della RAM disk
- Facendo le modiche necessarie ai file di configurazione
- Ricomprimendo la RAM disk
- Ricompattando il kernel.gz e ma nuova ramdisk.gz in un nuovo boot.img
- Eseguendo il flash del nuovo boot.img (con uno qualsiasi dei metodi disponibili. Installazione via recovery, via Odin, a mano via shell, ecc..)
Per scompattare si una usano i compression magic number per identificare l'inizio della RAM disk. Che ovviamente cambia a seconda del tipo di compressione. Una volta trovato, il boot.img viene spezzato nei due file già compressi. Questo assieme alla decompressione della RAM disk almeno per il formato gzip viene fatto automaticamente da uno script perl che si trova in internet assieme alle istruzioni. Qui lo troverete nella sezione DOWNLOAD. Ne ho fatta una seconda copia, modificata per i boot.img che usano il formato lzma, come il Kernel PX.
Per ricompattare basta comprimere la directory della RAM disk modificata, meglio se nello stesso formato della compressione del kernel e poi eseguire il comando mkbootimg. Fa parte del'Android SDK, non so se vada compilato. Ma si trova ovviamente in internet. In DOWNLOAD troverete anche il secondo script perl per fare il repacking e la versione di mkbootimg per OS X (quella nel link delle istruzioni non è aggiornata), con la quale lavoro.
Il tutto sembra banale e una volta avendo i tool a disposizione lo sarebbe pure se non fosse che per ricompattare bisogna conoscere il base e la ram disk address del specifico cellulare. Si noti infatti la sinstassi di mkbootimg:
codice:
BlueMoon:S5570I_XILG1 Michele$ mkbootimg
error: no output filename specified
usage: mkbootimg
--kernel <filename>
--ramdisk <filename>
[ --second <2ndbootloader-filename> ]
[ --cmdline <kernel-commandline> ]
[ --board <boardname> ]
[ --base <address> ]
[ --pagesize <pagesize> ]
[ --ramdiskaddr <address> ]
-o|--output <filename>
Queste informazioni si dovrebbero dedurre facendo riferimento alla struttura del file boot.img ed eseguendo un hex dump dello stesso:
codice:
BlueMoon:SignApk Michele$ od -h -N 200 XILG1_initd/boot.img
0000000 4e41 5244 494f 2144 8800 0030 8000 8160
0000020 0a89 0015 0000 8260 0000 0000 0000 8250
0000040 0100 8160 1000 0000 0000 0000 0000 0000
0000060 0000 0000 0000 0000 0000 0000 0000 0000
I valori in grassetto rappresentano la parte alta del base e ramdisk address. Questo in teoria, in realtà sono andato a tentativi cambiando i due indirizzi finché quei non ho visto che quei due valori combaciavano. pagesize allo stesso modo ho scoperto essere il tipico 4096. Il comando completo per la compattazione del boot.img del GT-S5570I sarà quindi:
codice:
mkbootimg --pagesize 4096 --kernel <kernel compresso>--base 0x81600000 --ramdiskaddr 0x82600000 --pagesize 4096 --ramdisk <RAM disk compressa> -o <nuovo boot.img>
Fatto il nuovo boot.img dovete scegliere il metodo per installarlo. Io ho optato per il pacchetto zip di installazione da recovery. Altrimenti per la creazione di un file da installare via Odin seguite questa guida.
Non mi addentrerò su come va modificato l'init.rc e gli altri file di sistema. presuppone conoscenze professionali di Unix Shell scripting di sistema. Potete se volere seguire questa guida del noto ACervellati nella quale ho trovato buona parte del materiale.
Nella seconda parte ci sarà il primo kernel stock modificato per il Next Turbo.
DOWNLOAD
Kernel Stock Modded con init.d support (ma volendo anche altro)!!
ATTENZIONE:
Il kernel XILG1_initd non è più supportato
E' stato sostituito da
Cor Optimi™
https://www.androidiani.com/forum/mo...er-s5570i.html
Ssiore e ssiori, dopo quella pappardella sono lieto di presentarvi
IL PRIMO KERNEL STOCK MODDED CON /etc/init.d SUPPORT PER S5570I
(ma sicuramente in futuro anche altro! :D)
NOVITA':
- CUSTOM BOOT ANIMATION SUPPORT WITH ICS BOOT ANIMATION INCLUDED!!
- Busybox inclusa nel kernel. Elimina la necessità del rooting per S2SD :)
- e2fsck e tune2fs inclusi in /system/xbin per mantenere le tua partizione SDext sempre pulite (necessita script apposito. Ovviamente S2SD ne fa uso)!!
CARATTERISTICHE:
- Basato sul kernel XILG1
- Permette l'esecuzione degli script in /etc/init.d
- Supporta il file system ext4
- Permette la personalizzaione dei boot animation
- Busybox 1.15 (per ridurre le dimensioni) inclusa nel kernel
Necessita busybox ma non il rooting
- Aggiunti e2fsck e tune2fs in /system/xbin per la riparazione dei file system ext (necessita script apposito. Ovviamente S2SD ne fa uso!!)
- E' self contained. In teoria, poiché include tutti moduli standard, è possibile installarlo in una qualsiasi custom ROM
- E' installabile da stock recovery
Vantaggi:
- E' l'ultimo kernel della Samsung. Quindi il più affidabile
- Ha tutti i moduli testati e funzionanti. Per forza di cose, vedi sopra
- E' facilmente aggiornabile quando esce una nuova versione del kernel, anche se in una stock ROM asiatica
Non consente:
L'uso del filesystem ext4
- I CPU Governor custom - Solo bcm21553 e performance - Tool come CPU Spy e SetCPU quindi non funzionano
- Gli I/O Scheduler
- E tutto quello che vi viene in mente pensando a un kernel custom
INSTALLAZIONE:
- Scaricate il zip file XILG1_initd.zip
- Trasferitelo nella SD card
- Fate il reboot in stock recovery
- Installate l'update
- Se non funziona può essere necessario reinstallare la ROM che già avete e ripetere il procedimento.
RIMOZIONE:
Se state usando l'ultima stock ROM
- Scaricate il file Kernel_S5570I_XILG1.tar.md5 (originale da Samsung. Ottenuto con SplitFUS2)
- Avviate Odin da Windows
- Mettete il file nella sezione PDA
- Fate il boot del telefono in boot loader (Vol giù-power-home)
- Quando il telefono è riconosciuto fate il flashing con Odin
Altrimenti dovete reinstallare la ROM/kernel che stavate usando oppure installare un altro custom kernel a vostro piacimento (PX, Repencis o altro che uscirà in futuro).
NOTE:
- Ho testato l'installazione più volte sopra la stock ROM ultima e non ho avuto problemi.
- nel file /sbin/sysinit.rc e nel banner in logcat vedrete una versione "1.0v.xy". xy non contano nulla, li sto utilizzando solo per vericare che l'installazione sia avvenuta con successo
- Causa macello avevo installato solo il boot.img (senza moduli) sopra alla versione stock ROM precedente. Funzionava!!
- Se volete testarla con la Repencis o altra custom ROM per favore date una descrizione dei risultati in questa thread.
E ora la sezione più importante!!!
DOWNLOAD: