Cos’è il kernel in un telefono Android?

Che cos'è un kernel?
Abbiamo sentito il termine in giro un bel po', ma non abbiamo davvero cercato di capire cos'è e cosa significa, e perché si chiama così?
Il termine non deriva da un grado militare come "colonnello", invece, si riferisce a frutta e noci.
Nel mondo pratico, il gheriglio è la parte più morbida, solitamente commestibile, di una noce o di un seme ed è contenuto all'interno del suo guscio duro.
Quando si parla di smartphone, tablet e persino computer, il gheriglio non è molto diverso... anche se non vi consiglierei di mangiarlo.

main-qimg-aefa974da4b87f0e75e90c1794db1476

Pensaci come ai popcorn.
Ti scheggerai un dente se provi a mangiare un chicco di popcorn senza cuocerlo! Il guscio esterno è duro e protegge l'interno. Puoi sbloccare tutta la bontà che c'è dentro quel guscio duro se hai la giusta miscela di olio e calore.

In Android, il chicco non è poi così diverso. Wikipedia lo riassume abbastanza bene:

Citazione:
Il kernel è il componente principale della maggior parte dei sistemi operativi per computer; è un ponte tra le applicazioni e l'effettiva elaborazione dei dati fatta a livello hardware.

Il kernel fornisce il livello di astrazione più basso per le risorse (processori e dispositivi I/O) ed è responsabile della gestione delle risorse del sistema. Le applicazioni possono parlare attraverso il kernel con i vari componenti hardware del sistema.

Cosa fa un kernel?
I dispositivi Android usano il kernel Linux, ma non è esattamente lo stesso kernel che usano altri sistemi operativi basati su Linux. C'è un sacco di codice specifico di Android incorporato, e i manutentori del kernel Android di Google hanno il loro lavoro da fare.

Anche gli OEM (Original Equipment Manufacturers) devono contribuire, perché hanno bisogno di sviluppare driver hardware per le parti che stanno usando per la versione del kernel che stanno usando.

Questo è il motivo per cui ci vuole un po' di tempo per gli sviluppatori e gli appassionati indipendenti di Android per portare le nuove versioni sui vecchi dispositivi e far funzionare tutto.

I driver scritti per funzionare con il kernel Lollipop su un dispositivo non funzioneranno necessariamente con il kernel Marshmallow. E questo è importante, perché controllare l'hardware è una delle funzioni principali di un kernel.

È un sacco di codice sorgente, con più opzioni mentre lo si costruisce di quanto si possa immaginare, ma alla fine è solo l'intermediario tra l'hardware e il software.

Quando il software ha bisogno che l'hardware faccia qualcosa, invia una richiesta al kernel, e per qualcosa, intendo letteralmente qualsiasi cosa. Dalla rotazione dello schermo, allo sblocco del dispositivo, all'avvio di una chiamata attraverso la radio, anche ciò che viene disegnato sul display è in definitiva controllato dal kernel.

Per esempio, quando si tocca il pulsante di rotazione del telefono, si dice al software di ruotare lo schermo. Quello che succede è che voi dite al software che avete toccato lo schermo a quelle coordinate toccando un certo punto del digitalizzatore.

Il software sa che quando quel particolare punto viene toccato, lo schermo deve ruotare. Il difgitizer prende l'ordine dal kernel di cercare (o ascoltare, gli eventi sono "ascoltati"

main-qimg-31ad5f790ccb27e2289c53879053d321

) per i tocchi, aiuta a capire dove hai toccato, e dice al sistema che hai toccato.

A sua volta, quando il sistema riceve un evento touch in un punto specifico dal kernel (attraverso il driver) sa cosa disegnare sul tuo schermo. Il vostro telefono sa quando fare qualcosa quando sia l'hardware che il software comunicano in entrambe le direzioni con il kernel. L'input da una parte è inviato come output all'altra, sia che si tratti di giocare ad Angry Birds, o di connettersi al Bluetooth della vostra auto.

Sembra complicato, vero? Beh, è rischioso

main-qimg-aefa974da4b87f0e75e90c1794db1476

. Ma è anche una logica informatica abbastanza semplice, per ogni evento c'è un'azione specifica generata. Gli sviluppatori dovrebbero scrivere codice per ogni singolo evento per ogni singolo pezzo di hardware nel dispositivo se il kernel non accetta e invia informazioni. Con il kernel, tutto quello che devono fare è comunicare con esso attraverso le API del sistema Android (Application Program Interface), e gli sviluppatori di hardware devono solo far comunicare l'hardware del dispositivo con il kernel.

main-qimg-b0fcee5eda12890e34a12beafc4ba8f9.webp

Che cos'è la versione del kernel?
La versione del kernel Linux su cui si basa Android è chiamata versione del kernel. È il nucleo del sistema operativo che gestisce le richieste da e verso l'hardware, la gestione della memoria e dei processi e tutte le cose di basso livello che sono necessarie perché Android possa funzionare.
Il kernel non viene aggiornato molto frequentemente perché ci sono molte cose da tenere a mente e molte cose che possono andare male. Un aggiornamento del kernel significa assicurarsi che tutto ciò che è nella vecchia versione di Android funzioni correttamente sulla nuova versione.
Di seguito ci sono le versioni del kernel dalla loro build iniziale all'ultima build.

main-qimg-060f7b13086ed0ad781c13f59c5b48be.webp

Kernel nuovi e migliorati
Qui entra in gioco la comunità Android. Ci sono sviluppatori che contribuiscono creando kernel personalizzati per un dispositivo specifico. Lo fanno solo perché gli piace contribuire il loro lavoro alla comunità.

Il vantaggio di un kernel personalizzato è che è in grado di garantire un maggiore controllo sui parametri ed è ottimizzato per eseguire in modo diverso che influenzano le prestazioni di un dispositivo. Per esempio, si può underclockare il dispositivo per risparmiare la batteria. Quando si dice al kernel di eseguire il processore ad una frequenza più bassa per risparmiare energia si chiama Underclocking.
Underclocking rende il telefono un po' più lento, ma la sua capacità di risparmiare batteria è molto buona. Un telefono modificato in questo modo con un kernel personalizzato può seriamente funzionare come un fascino.

In alternativa, si può Overclockare un telefono. Questo è quando il kernel permette al processore di funzionare alla massima frequenza, producendo grandi quantità di energia (più alta di quella che il telefono usa di solito). Questo mangerà attraverso una batteria estremamente rapidamente (come un coltello caldo attraverso il burro), ma è grande perché non permette a varie applicazioni di lag (come Ashphalt 8). Per non parlare del fatto che quando un telefono è Overclockato tutto si carica estremamente velocemente.
Ci sono alcuni rischi nell'installare un nuovo kernel. Se gli dici di usare una quantità di batteria troppo piccola, c'è la possibilità che il telefono non sia in grado di accendersi.

Trovare il kernel giusto
XDA Developer Forum è il posto migliore dove puoi cercare un kernel personalizzato, in particolare la sezione per il tuo particolare dispositivo. È molto importante scegliere un kernel che sia compatibile non solo con la versione di Android che stiamo eseguendo nel nostro dispositivo, ma anche con il dispositivo che possediamo.

Puoi anche trovare una varietà di kernel personalizzati per il tuo dispositivo se cerchi sul MIUI Forum qui.

Se non sei sicuro che un kernel sia compatibile con il tuo dispositivo, chiedi nel forum o sul thread specifico del kernel. Flashare il kernel sbagliato potrebbe portare il tuo dispositivo ad un bootloop o a un brick.

Come una sostituzione del kernel ti avvantaggia
Utilizzare un kernel personalizzato con più parametri da mettere a punto suona piuttosto bene, ma cosa può fare un kernel personalizzato per te? Avrai un sacco di opzioni tra cui scegliere, dato che ci sono molti kernel personalizzati diversi disponibili per ogni dispositivo Android che esiste. Puoi scegliere kernel che sono ottimizzati per il risparmio energetico, o quelli che sono ottimizzati per le prestazioni, a seconda delle tue esigenze. Ci sono anche altri kernel che hanno un buon equilibrio di entrambi.

Ci sono alcuni sviluppatori che sostituiscono alcuni driver con altri (per vari motivi), o sviluppano le proprie patch per i problemi che identificano. Molti sviluppatori cercano anche di includere le patch del kernel Linux a monte, o usano i loro toolkit per la compilazione. Per esempio, per il Nexus 5, c'è uno sviluppatore che usa il proprio toolkit, che include l'ultima versione di GCC, una toolchain Linaro con ottimizzazioni specifiche per l'architettura della CPU utilizzata, e i flag di ottimizzazione massima per il compilatore.

Gli sviluppatori possono anche aggiungere alcune caratteristiche aggiuntive da altri kernel che non esistono ufficialmente per il tuo dispositivo. Per esempio, ci sono alcuni kernel per il Redmi 1s che includono la funzione "double tap to wake" che è apparsa per la prima volta sull'LG G2.

Più di tutto, una manciata di kernel permette di accedere alle variabili configurabili da soli, in modo da poter utilizzare il codice che gli sviluppatori del kernel rilasciano ma modificarlo per aggiustare il suo comportamento a proprio piacimento. Tuttavia, vorrete ricercare alcune delle opzioni disponibili prima di iniziare effettivamente a cambiarne i valori. In altre parole, un kernel personalizzato può fornire miglioramenti, caratteristiche extra, specializzazione ed estrema configurabilità.

Opzioni di personalizzazione di un kernel
Il kernel, a questo proposito, è estremamente personalizzabile. Non solo il produttore deve inserire i driver necessari per far funzionare correttamente tutto l'hardware, ma ci sono un sacco di variabili da impostare. Possono pasticciare con ogni sorta di cose.
Alcune variabili con cui possiamo pasticciare sono:
- Le frequenze minime e massime a cui la CPU può scalare su o giù
- La frequenza a cui la CPU dovrebbe aumentare ogni volta che rileva un input tattile (per garantire un risveglio più fluido)
- Quanto occupato la CPU dovrebbe essere prima di attivare i core extra che normalmente ha disabilitato per risparmiare batteria
- Il governatore della CPU (che determina quanto velocemente tende ad aumentare o meno la frequenza) che dovrebbe essere usato
- Abilitare la ricarica veloce USB (per porte USB 3.0)
- Cambiare la tensione della CPU durante tutte le frequenze possibili
- La frequenza massima della GPU
- Configurare lo scheduler I/O che viene utilizzato

App per la gestione del kernel
Il kernel personalizzato può fare la sua magia una volta installato. Tuttavia, dobbiamo dire al kernel cosa deve fare. È possibile controllarlo manualmente dalle impostazioni con alcune ROM come MIUI. Tutti gli altri avranno bisogno di app di terze parti come Kernel Adiutor, Synapse, ecc.

Queste app ti permettono di modificare le impostazioni come:
CPU (frequenza, governatore)
TensioneCPU
CPU Hotplug
GPU (frequenza, governatore)
Schermo (calibrazione del colore [RGB])
Controlli di risveglio (DT2W, S2W)
Suono (Faux Sound, TA-Mod)
Batteria (Fast Charge)
I/O Scheduler
Kernel Samepage Merging
Low Memory Killer (impostazioni Minfree)
Memoria virtuale
Build prop Editor
Salvataggio profili

Pensiero finale
Il kernel è il componente più importante per eseguire un dispositivo in quanto è un ponte tra hardware e software di un dispositivo. Senza kernel non è possibile per un dispositivo funzionare. Installare un nuovo kernel può essere un po' rischioso, ma se fatto correttamente c'è davvero un rischio minimo. Ma non è necessario flashare un kernel personalizzato nel vostro dispositivo, a meno che non vogliate alcune funzioni aggiuntive, perché il kernel stock fornito dagli OEM funziona senza problemi.