COS'E' L'UNDER VOLTING:
L'Under (sotto) Volting (voltaggio) altro non è che una tecnica per ridurre l'alimentazione, i volt appunto, di un componente elettrico o elettronico, in questo caso la CPU del telefono, al fine di ottenere i seguenti vantaggi:
- riduzione dei consumi
- minore dissipazione di calore o surriscaldamento, che comportano il punto precedente
In questa guida tratteremo esclusivamente l'Under Volting (UV) della CPU bcm21553 dei telefono Next Turbo, anche chiamato Mini Plus o Pop Plus in altri mercati. Poiché condividono la stessa CPU gli stessi concetti si applicano anche ai telefoni Galaxy Y, Galaxy Ace-I e altri suoi "fratelli", sempre che abbiano a disposizione un kernel che permetta l'UV.
L'UV può essere distinto in due categorie:
- UV statico: dove l'UV viene effettuato direttamente nei codici del kernel e non può essere modificato (hard wired). Questo è il caso di tutti i kernel custom sino al Cor Plenus™ v2.1 per il Next Turbo
- UV dinamico: dove l'UV può essere configurato dall'utente per ciascuna delle frequenze definite nel kernel custom. E' ora possibile farlo nei nostri telefoni, in anteprima mondiale, con il kernel Cor Plenus™ v2.1
Ovviamente non è possibile ridurre il voltaggio a piacimento, in quanto se la CPU viene troppo sotto alimentata il sistema diventa instabile. Si possono avere freezing del telefono, reboot soft e /o hard, spegnimenti, sino a essere costretti a rimuovere la batteria per poter far ripartire il telefono.
Va da se che frequenze maggiori, consumando più energia, dovranno avere voltaggi superiori. Invertire i voltaggi oltre che stupido potrebbe rendere il telefono instabile.
L'Under Volting va quindi manipolato con estrema cautela. Chi si accinge a farlo sappia in anticipo che lo fa a suo rischio e pericolo.
CONSIDERAZIONI TECNICHE
All'interno del kernel, data una frequenza e il suo voltaggio è compito del voltage regulator far si che che per quella frequenza la CPU abbia quel particolare voltaggio oppure, ove implementato, quello che più si avvicina, dentro determinati limiti. Nel codici del kernel per il bcm21553 infatti il voltage regulator per la CPU ha le seguenti caratteristiche:
- Voltaggio massimo: 1380 mV - Valori superiori verranno tagliati per evitare di bruciare la CPU
- Voltaggio minimo: 880mV - Valori inferiori verranno tagliati per evitare sicuri malfunzionamenti
- Dimensione incrementi: 20 mV - Significa che i voltaggi effettivi saranno multipli di tale valore
Al fine di poter utilizzare l'UV dinamico con applicazioni come SetCPU o Voltage Control è necessario implementare un modulo del kernel che dia accesso alla seguente tabella (frequenze, volt), ordinata dalla maggiore frequenza alla inferiore :
codice:
/sys/devices/system/cpu/cpu0/cpufreq/UV_mV_table
Tale tabella deve poi essere utilizzata dal modulo delle frequenze per utilizzare quei voltaggi ogni qualvolta vengono modificati. Non ci addentreremo in questo aspetto, utile solo agli sviluppatori. Si sappi solo che se N sono le frequenze, per poter modificare i loro voltaggi, basta scrivere in modo ordinato dal maggiore al minore la N-upla di voltaggi in quella tabella
IL KERNEL COR PLENUS™ V2.1 (e versioni successive):
Il kernel Cor Plenus™ v2.1, che come anticipato è il primo a introdurre l'UV dinamico nei processori bcm21553 implementa tutti i concetti di cui sopra, con le seguenti caratteristiche:
- Voltaggio massimo: 1380 mV
- Voltaggio minimo: 1000 mV - Già con questo valore il telefono diventa quasi sicuramente instabile (ma andrebbe testato).
- Dimensione incrementi: 20 mV - Implementa però un meccanismo per arrotondare al primo multiplo inferiore di 20 mV il voltaggio. Per esempio se inserite 1237 mV il valore effettivo sarà 1220 mV
SetCPU e Voltage Control sono stati testati e sono funzionanti. Come pure la modifica manuale dell'UV direttamente da sistema o Unix shell script tramite la scrittura nella N-upla dei voltaggi nella tabella UV_mV_table menzionata sopra. A tal fine è stato sviluppato anche uno script, parte della installazione del kernel stesso:
codice:
/etc/init.d/92setUV
Il kernel, al fine di cercare di evitare possibili reboot con alcune schede SIM, ha settato di default nei codici (hard wired) la 5-upla dei voltaggi per le 5 frequenze ai seguenti valori:
codice:
1360 mV - 1360 mV - 1360 mV - 1240 mV - 1240 mV
Che sono quelli stock per le frequenze 832Mhz e 312Mhz.
COME CONFIGURARE L'UV (E RENDERLO PERMANENTE AL BOOT TIME)
E qui la parte che tutti aspettavate. Per configurare l'UV a vostro piacimento esistono al momento 3 possibiltà:
Via script 92setUV:
Semplicemente con un editor di root (Root Browser va benissimo) modificate all'inizio dello script la variabile UV_MODE con uno dei tre valori predefiniti: STOCK, MEDIUM, LOW. Questi valori, che sono già stati utilizzati nelle versioni precedenti di Cor Plenus™ v2, potrebbero causare reboot in alcune SIM, pare soprattuto quando si ricevono chiamate. Se così fosse ripristinate il valore originale UV_MODE=NONE. Alternativamente, magari dopo aver testato con SetCPU o Voltage Control potete aggiungere il vostro UV personale nello script. Per farlo basta aggiungere le seguente linee di codice prima della linea "case $UV_MODE in":
codice:
"CUSTOM")
echo (inserite qui la vostra quintupla) > /sys/devices/system/cpu/cpu0/cpufreq/UV_mV_table
log -p d -t setUV "CUSTOM Volting selected"
;;
ricordandovi ovviamente di settare UV_MODE=CUSTOM.
Attenzione che a ogni installazione del kernel il file 92setUV verrà sovrascritto e perderete così tutte le vostre modifiche. Si consiglia in tal caso di fare una copia di backup del file nella SD card ogni qualvolta lo modificate. Oppure dovrete reinserire i valori a mano.
Via SetCPU:
SetCPU è una applicazione la cui ultima versione è a pagamento. Altrimenti potete trovare la versione 2.2.4 free in XDA (link). La versione free non l'ho testata, quindi non so se e come funzioni. Qui tratteremo la versione 3.0.7. Per utilizzarla è semplice. Come dir si suole, una immagine vale mille parole:
SC20121117-004059.jpg
Come vedete ci sono i valori "current" e "saved". Questi devono essere uguali. Per modificare "saved" premete su di una frequenza, e vi verrà chiesto di inserire il nuovo valore. Non usate gli slider, in quanto hanno incrementi di 25mV, usate la tastiera. Quando lo avrete fatto per tutte le frequenze cliccate in alto sul "confirm" (simbolo "√"). Possono essere necessari vari tentativi, in quanto SetCPU è tutto tranne che una applicazione perfetta. Quando avrà uno sfondo blu significa che i valori sono stati applicati e "current" diventerà uguale a "saved" per tutte le frequenze. Testate i valori per qualche ora, e se vi sembra stabile procedete con il flag "set on Boot". Se invece va in reboot quei valori andranno persi, quindi l'UV tornerà ai valori di default o come definiti nello script. Insomma, è più lungo scriverlo che farlo!
Via Voltage Control:
Voltage Control è una applicazione gratuita che si trova nel market (link). Il concetto è simile a quello di SetCPU, come altrimenti non può essere. Solo che Voltage Control usa solo gli slider, anch'esso con incrementi di 25mV. Come prima, cliccate su una frequenza e uscirà lo slider:
SC20121117-120456.jpg
Non appena cambiate un valore usciranno i due bottoni di conferma/annulla. Se confermate il voltaggio verrà cambiato immediatamente per quella o più frequenze che avete modificato. Di nuovo, testate per un po' di tempo e se vi sembra stabile procedete a rendere le modifiche permanenti. Per farlo cliccate il tasto "menu" e selezionate "Save as boot settings". Esiste una ulteriore opzione nel menu, "Recovery instruction", che dà la possibilità di creare un file zip di recovery per ripristinare i valori originali da stock recovery/CWM nel caso che abbiate scelto una configurazione troppo instabile.