Ep 2 – Ce este un kernel Android?

By | nov. 9, 2012

In episodul trecut am discutat despre bootloader si particularitatile sale. O alta componenta de baza a sistemului de operare Android este kernelul. Un kernel nu este ceva unic pentru Android. Unix, MacOS, iOS, Windows, Blackberry au cate unul la fel ca majoritatea sistemelor de operare. Ce ne intereseaza pe noi este kernelul Linux care este folosit de Android.

Dispozitivele Android utilizeaza kernelul Linux. Pana recent, inainte de lansarea versiunii 3.0 kernelul Android era intr-o oarecare masura diferit de cel Linux, cu bucati de cod specifice implementate de Google si producatorii de dispozitive. Odata cu lansarea versiunii 3.0 aceste bucati de cod au devenit generice si au putut fi implementate in versiunea principala intretinuta de Linux Fundation ce ruleaza pe dispozitive x86, x64, ARM si o multitudine de alte platforme disponibile.

Una din functiile de baza ale kernelului este controlul hardware. Kernelul este o colectie destul de impresionata din punct de vedere a codului sursa cu foarte multe optiuni de compilare ce in final are rolul de a asigura comunicatia intre  hardware si software.Interesul producatorilor in dezvoltarea kernelului consta in necesitatea driverelor pentru componentele hardware care ruleaza Android.

Cand o componenta software are nevoie ca hardware-ul sa indeplineasca o anumita functie trimite o cerere catre kernel. Aceste functii variaza de la luminozitatea ecranului, nivelul volumului, initierea unui apel folosind componenta radio pana la ce este afisat pe display. Comunicatia intre hardware si software functioneaza in ambele sensuri. De exemplu in momentul in care dinspre chip-ul radio este primit un apel acesta ii transmite o cerere kernelului catre software ca sa initieze aplicatia de telefonie si sa afiseze numarul care apeleaza si meniul de acceptare sau respingere a apelului. Aceste aspecte sunt valabile pentru orice componente hardware si software din telefon.

Kernelul pare o componenta complicata si in general este. Fara kernel insa dezvoltatorii ar trebui sa scrie cate un cod diferit pentru fiecare scenariu posibil intre fiecare componenta hardware si software. Folosind kernelul tot ce trebuie sa faca este sa comunice cu acesta folosind un set de librarii Android (API-uri) iar producatorii trebuie doar sa faca dispozitivul hardware sa comunice cu acesta.

Problema este ca pentru fiecare versiune noua de kernel trebuie dezvoltat un nou set de drivere. De aceea dezvoltatorii din comunitatea open source construita in jurul Android au nevoie de o perioada de timp destul de mare pentru a porta versiunile noi ale sistemului de operare pe dispozitivele mai vechi, nesuportate oficial de producatori. Astfel, driverele care functioneaza pe un kernel folosit de  Gingerbread sau ICS nu vor functionea pe unul ce ruleaza Jelly Bean sau alte versiuni mai noi.

In general kernelul unui dispozitiv Android este intretinut de producator si/sau Google. Nu de putine ori vedem si eforturi din partea comunitatii de dezvoltatori care pun la dispozitie propriile versiuni de kernel cu propriile add-on-uri si particularitati.

Ce este un kernel custom?

Un kernel custom este o versiune de kernel nesuportata oficial, dezvoltata de utilizatori dupa propriile nevoi sau preferinte. Un kernel custom de poate diferentia de cel original prin urmatoarele:

  • Performanta imbunatatia : De multe ori acesta este principalul motiv pentru un kernel custom. Dezvoltatorii imbina diferite tehnologii/module pentru a obtine maximul de performanta de la dispozitivul lor Android. Un exemplu destul de cunoscut este in cazul Samsung Galax S. Initial telefonul folosea partitii in format RFS pentru stocarea datelor. Prin adaugarea suportului pentru ext4 in kernel si convertirea partitiilor RFS s-a obtinut un salt de performanta uimitor.
  • Overclock : In dispozitivele Android frecventa procesorului este controlata de kernel. Un kernel stock este limitat din start la frecventa dorita de producator. Cu ajutorul unui kernel custom se poate modifica atat frecventa maxima a procesorului cat si frecventa minima. Un alt aspect care este controlat de kernel este voltajul procesorului iar modificarea acestuia poate aduce imunatatiri substantiale duratei de viata a bateriei.
  • Supercharging : Supercharging inseamna incarcarcarea bateriei intr-un timp cat mai scurt prin fortarea unui curent mai mare de incarcare. Desi inca nu sunt clare implicatiile pe care acest aspect le au asupra bateriei este totusi un hack destul de important mai ales pentru cei care au nevoie de o incarcare rapida a bateriei in unele situatii.
  • Stabilitate : Unele kernele sunt pur si simplu prost facute. Imaginati-va ca dispozitivul vostru a fost facut tinand cont de cel mai mic pret posibil si cel mai scurt timp de dezvoltare. (Pentru costuri cat mai mici si profit cat mai mare). Din experienta mea cel mai bun exemplu este Motorola Droid 3 XT862. Desi are o constructie si un hardware mai mult decat decent (cel putin pentru vremea sa) din punct de vedere software este un dezastru – Wi-Fi instabil, blocari sau restart-uri foarte dese si multe altele. Cu un kernel custom deja am impresia ca detin alt telefon.