Google beskriver planer för stöd för Linuxkärnan i Android

Det verkar som om Google arbetar hårt för att uppdatera och uppströms Linuxkärnan som ligger i hjärtat av varje Android-telefon. Företaget var en stor deltagare i årets Linux Plumbers Conference, ett årligt möte för de främsta Linuxutvecklarna, och Google ägnade mycket tid åt att prata om att få Android att fungera med en generisk Linuxkärna i stället för den mycket skräddarsydda version som används nu. Företaget visade till och med en Android-telefon som kör en mainline Linux-kärna.

Men först lite bakgrundsinformation om Androids nuvarande kärnavveckling: För närvarande sker tre stora gafflingar mellan den ”mainline” Linux-kärnan och en Android-enhet som levereras (observera att ”mainline” här inte har någon koppling till Googles eget ”Project Mainline”). För det första tar Google Linuxkärnan LTS (Long Term Support) och förvandlar den till ”Android Common kernel” – Linuxkärnan med alla Android OS-specifika korrigeringar. Android Common skickas till SoC-leverantören (vanligtvis Qualcomm) där den får sin första omgång maskinvaruspecifika tillägg, först med fokus på en viss modell av SoC. Denna ”SoC-kärna” skickas sedan till en enhetstillverkare för ännu mer hårdvaruspecifik kod som stöder alla andra delar av hårdvaran, t.ex. bildskärm, kamera, högtalare, usb-portar och annan extra hårdvara. Detta är ”Device Kernel”, och det är det som faktiskt levereras på en enhet.

Se mer

Detta är en extremt lång resa som resulterar i att varje enhet skickar miljontals rader av kärnkod utanför trädet. Varje enhetskärna som levereras är annorlunda och enhetsspecifik – i princip fungerar ingen enhetskärna från en telefon på en annan telefon. Huvudversionen av kärnan för en enhet låses in i början av SoC:s inledande utveckling, så det är typiskt att en helt ny enhet levereras med en Linuxkärna som är två år gammal. Till och med Googles senaste och, eh, bästa enhet, Pixel 4, levererades i oktober 2019 med Linuxkärna 4.14, en LTS-version från november 2017. Den kommer också att sitta fast på kärna 4.14 för alltid. Android-enheter får vanligtvis inga kärnuppdateringar, förmodligen tack vare den otroliga mängd arbete som krävs för att ta fram bara en enda enhetskärna och den kedja av företag som skulle behöva samarbeta för att göra det. Tack vare att kärnuppdateringar aldrig sker innebär detta att varje ny version av Android vanligtvis måste stödja de senaste tre årens LTS-kärnutgåvor (minimum för Android 10 är 4.9, en utgåva från 2016). Googles åtaganden att stödja äldre versioner av Android med säkerhetsläckor innebär att företaget fortfarande stöder kärnan 3.18, som nu är fem år gammal. Googles plåsterlösning för detta har hittills varit att samarbeta med Linuxgemenskapen och stödja mainline Linux LTS-versioner längre, och de är nu uppe i sex års stöd.

Förra året, vid Linux Plumbers Conference 2018, tillkännagav Google sin första utredning om att föra Android-kärnan närmare mainline Linux. I år delade de med sig av lite mer detaljer om framstegen hittills, men det är definitivt fortfarande ett pågående arbete. ”Idag vet vi inte vad som krävs för att läggas till i kärnan för att den ska kunna köras på en Android-enhet”, berättade Sandeep Patil, ledare för Android Kernel Team, för gruppen på LPC 2019. ”Vi vet vad som krävs för att köra Android men inte nödvändigtvis på en viss hårdvara. Så vårt mål är i princip att ta reda på allt detta, sedan göra uppströmsförbättringar och försöka ligga så nära mainline som möjligt.”

Google säger att ”jämfört med LTS (4.14.0) har Androids gemensamma kärna 355 ändringar, 32 266 infogningar och 1 546 borttagningar (från och med februari 2018)”. Framsteg görs här varje år, men kom ihåg att det fortfarande finns ytterligare två gafflar efter detta.

Men även om det fortfarande finns arbete att göra för att få det bredare Android-ekosystemet och myriader av enhetskonfigurationer med på tåget, verkar saker och ting för specifika enhetsmodeller gå bra framåt. Tom Gall, chef för Linaro Consumer Group, visade upp en Xiaomi Poco F1 som faktiskt kör huvudlinjen Linux-kärnan under det vanliga Android OS. Gall sa till publiken: ”Det finns stora, stora fördelar att ge till Google Kernel Team i synnerhet för att de har fått sin kod uppströms så att vi kan starta upp enheter med en mainline-kärna.”

Ledsamman med planen att uppströma så mycket kärnkod som möjligt, siktar Google också på att replikera sitt tidigare arbete med att modularisera Android, Project Treble. Precis som Treble skapade ett stabilt gränssnitt mellan Android OS och enhetens HALs (Hardware Abstraction Layers), innebär Googles förslag för att föra Android närmare mainline-Linux (hur kommer det sig att det inte finns något fånigt projektnamn för detta ännu?) att man stabiliserar Linux ABI i kärnan och har ett stabilt gränssnitt för Linuxkärnan och hårdvaruleverantörer att skriva till. Google vill frikoppla Linuxkärnan från dess hårdvarustöd.

Annons

Linuxcommunityt har varit emot idén om ett stabilt gränssnitt under en längre tid, med förslaget att om man vill ha möjlighet att snabbt uppdatera en kärna, så bör man öppna källkod för sina drivrutiner och få in dem i huvudkärnans träd, där eventuella ändringar kommer att tas om hand åt en. Öppna drivrutiner är dock en absolut omöjlighet för många hårdvaruföretag, och ingen förespråkare eller produktförsämring kommer att ändra på det. Det faktum att Google är fast med stöd för fem år gamla versioner av Linux visar att den här modellen inte fungerar.

Förstora / Istället för ett gäng gafflar föreställer sig Google den nya kärnan som en serie moduler.

Matthias Männich, senior mjukvaruingenjör på Google, visade ett diagram med rubriken ”Android Next Generation” som visade hur den här föreslagna kärnarkitekturen skulle se ut. Google skulle leverera en ”Generic Kernel Image (GKI)” tillsammans med flera ”GKI-moduler” som skulle exponera detta stabila API/ABI i kärnan. De maskinvaruspecifika drivrutinerna (förmodligen drivrutiner med sluten källkod) skulle laddas som kärnmoduler. Så i stället för gafflar ovanpå gafflar blir allting modulariserat i additiva paket.

För tillfället föreslår Google bara att ABI:et i kärnan ska vara stabilt för en enda LTS-version. Detta skulle alltså inte göra det möjligt för enheter att uppgradera från en version av Linuxkärnan till en annan – det skulle bara göra det möjligt för en enda generaliserad kärnavbildning att fungera på flera enheter, i stället för de enhetsspecifika kärngafflar vi har idag. Det skulle definitivt möjliggöra enklare säkerhetsuppdateringar, och förhoppningsvis skulle nya LTS-versioner komma ut på marknaden snabbare.

Reklam

Vi skulle vara förhastade om vi sa att det här är en förändring som definitivt är på väg till Android och Linuxkärnan. Det finns fortfarande massor av problem att lösa (både tekniskt och politiskt, kan jag tänka mig), och vissa av dessa föredrag var mer som offentliga brainstorming-sessioner mellan Googles presentatörer och Linux-ingenjörerna (varav många också var Googlers!) i publiken. Det här är andra året i rad som Google dyker upp på LPC och presenterar idén om att använda den vanliga Linuxkärnan i Android, och eftersom Android är en av de största Linux-distributörerna på jorden är det väl rimligt att alla samarbetar, eller hur?

”Vi har långt kvar att gå, och det vet vi, men vi har kommit en bra bit på väg från där vi började”, sa Patil till publiken. ”Förra året talade jag om att det skulle bli verklighet. Den här gången har vi faktiskt problem att diskutera.”

Lämna ett svar

Din e-postadress kommer inte publiceras.