„Google“ bendruoju branduolio vaizdu siekiama išspręsti „Android“ susiskaidymo problemą, nors tai sudėtinga tema. Štai kaip tai veikia.
„Google“ daugelį metų stengėsi sumažinti „Android“ susiskaidymą, nors dalis to priežasčių yra būdinga „Android“ prigimtis ir dviašmenis pasirinkimo ir laisvės kardas. Erdvėje veikia daugybė originalios įrangos gamintojų, ir visi jie nori patys modifikuoti savo įrenginius. Problema ta, kad atrodo, kad „Android“ OS naujinimai išleidžiami lėtai, tačiau „Google“ iš tikrųjų negali padaryti daug, kad priverstų originalios įrangos gamintojus atnaujinti savo įrenginius. Kitas geriausias dalykas, kurį „Google“ gali padaryti, yra padaryti atnaujinimo procesą kuo lengvesnį ir lengvesnį.
„Android“ atnaujinimo skausmo mažinimas
Pirmoji didelė iniciatyva „Google“ ilgalaikiame projekte siekiant sumažinti plėtros naštą buvo Projektas Treble. 2017 m. kartu su Android 8.0 Oreo paskelbtas Project Treble moduliavo Android, atskirdamas OS sistemą nuo tiekėjo diegimo (HAL ir konkrečiam įrenginiui skirtos Linux branduolio šakutės). Dėl to „Android“ originalios įrangos gamintojams buvo lengviau iš naujo nustatyti savo OS pagal naujausią AOSP sistemą, nes jie galėjo paleisti naujausią versiją nereikalaujant atnaujinto tiekėjų kodo. Dėl to originalios įrangos gamintojai galėtų greičiau nei anksčiau paruošti savo pasirinktines „Android“ šakes ir greičiau išleisti pagrindinius OS naujinimus.
Kitas „Google“ planų žingsnis buvo supaprastinti pagrindinių „Android“ komponentų naujinimų pristatymą. „Google“ pavadino šią iniciatyvą Pagrindinis projektas kai jis pristatė jį kartu su „Android 10“ 2019 m. „Google“ iš esmės perėmė pagrindinių OS komponentų valdymą ir uždraudė originalios įrangos gamintojams jų keisti. Tada jie sukūrė pristatymo mechanizmą per „Google Play“, kad galėtų nuotoliniu būdu įdiegti šių pagrindinių komponentų naujinimus, nelaukdami, kol originalios įrangos gamintojai patys pritaikys pataisas. „Mainline“ žymiai pagerino tai, kaip greitai įrenginiai gauna atnaujintas svarbių OS komponentų versijas, o tai savo ruožtu pagerino visos „Android“ ekosistemos saugumą.
Tačiau kalbant apie „Treble“, „Linux“ branduolys realiai neturėtų būti sujungtas su uždarojo kodo tiekėjo kodu. Todas Kjos at šių metų Linux santechnikų konferencija praeityje paaiškino sunkumus, su kuriais susiduriama, kai kalbama apie „Android“ susiskaidymą, o dabar daugelis jų yra susiję su „Linux“ branduoliu, kurį originalios įrangos gamintojai pristato kartu su savo įrenginiais. Atsižvelgiant į kontekstą, „Google“ sujungia kiekvieną pagrindinį „Linux“ branduolį į „„Android“ bendrasis branduolys“ (ACK) filialas, kuris atidžiai seka pagrindinį leidimą, bet prideda keletą „Android“ specifinių pataisų. Tada „SoC“ pardavėjai, tokie kaip „Qualcomm“, „MediaTek“ ir „Samsung“, pasitraukia kad branduolys kiekvienam jų pagamintam SoC. Tada originalios įrangos gamintojai paima tą SoC specifinį branduolį ir prideda papildomų pataisų, kad palaikytų konkrečią aparatinę įrangą, kurią jie nori siųsti.
Aukščiau pateiktoje diagramoje parodyta, kaip įrenginio branduolys pereina per kelis pakeitimų sluoksnius, kurie abstrahuoja jį toli nuo Linux LTS branduolio. Norėdami tai supaprastinti, pradedame nuo „Linux“ branduolio ir su keliais pakeitimais jis sujungiamas į „Android Common Kernel“. Iš ten „Android Common Kernel“ sujungiamas į pardavėjo branduolį („Qualcomm“, „MediaTek“ ir kt.) su savo pakeitimais ir pakeitimais. Galiausiai tiekėjo branduolys sujungiamas į OĮG įrenginio branduolį. Šiame etape bet kurio įrenginio branduolys yra toli nuo „Linux LTS“ branduolio, su kuriuo jis buvo pradėtas.
Dėl visų tų šakių net 50 % kodo, veikiančio „Android“ įrenginyje, yra išorinis kodas, o tai reiškia, kad jis nėra iš įprastų Linux ar AOSP branduolių. Dėl to nepaprastai sunku (jau nekalbant apie tai, kad tai atima daug laiko ir brangu) sujungti ankstesnius pakeitimus. OĮG neturi paskatų tai daryti, tačiau tokia praktika gali pakenkti įrenginio saugumui. Dėl šios priežasties daugelis „Android“ įrenginių paliekami senesniuose LTS branduolio leidimuose, o tai turi šalutinį poveikį, kai įrenginiai praranda prieigą prie naujų „Linux“ branduolio funkcijų.
„Android“ yra suskaidyta, ir „Google“ tai žino
„Google“ puikiai žino, kad tai yra problema, ir netgi turi skyrių „Suskaidymo išlaidos“ Android kūrėjo dokumentacijoje. „Google“ tai sako "dauguma pavyzdinių įrenginių pristatomi su branduolio versija, kuri jau yra bent 18 mėnesių senumo". Dar blogiau, tai sako ir „Google“. „Android 10 palaiko 3.18, 4.4, 4.9, 4.14 ir 4.19 branduolius, kurie kai kuriais atvejais nebuvo patobulinti naujomis funkcijomis nuo 2017 m. Android 8. Dėl to sunku pridėti funkcijų, kurioms reikia naujų Linux branduolio versijų. „Linux“ branduolys 3.18 buvo paleistas 2014 m. gruodžio mėn., kai „Android 5.0 Lollipop“ buvo naujausia „Android“ versija. Tai akivaizdžiai problema ir gali sulaikyti platformą.
Pavyzdžiui, Code Aurora Forum arba trumpiau CAF talpina įvairių Qualcomm Snapdragon SoC šaltinio kodą. Qualcomm, kaip SoC pardavėjas platina šakotąją „Linux“ branduolio versiją originalios įrangos gamintojams / ODM, o šios įmonės prideda konkrečiam įrenginiui taikomus pakeitimus pristatydamos prietaisai. Tai prideda kelis suskaidymo sluoksnius. Be to, „Qualcomm“ keičia AOSP sistemą, kad optimizuotų „Android“ kiekvienai bendrovės „Snapdragon“ mobiliajai platformai. „Qualcomm“ privačiai platina modifikuotą „Linux“ branduolį, AOSP sistemą ir kitus programinės įrangos įrankius savo partneriams kaip „Board Support Package“ arba BSP dalį. CAF yra vieta, kur Qualcomm viešai skelbia šiuos Linux branduolio pakeitimus ir AOSP sistemos pakeitimus.
Šis CAF leidimas gali būti naudingas pasirinktinių ROM kūrėjams, kurie nori jį naudoti kaip atskaitos tašką, o ne gryną AOSP, todėl kartais matote „CAF pagrįsti“ ROM mūsų forumuose. Prisimenate „Snapdragon 625“, kuris, atrodo, daugelį metų maitino tiek daug vidutinės klasės išmaniųjų telefonų? Tai buvo paleista naudojant „Linux Kernel 3.18“, ir tik 2018 m. pabaigoje (praėjus dvejiems metams po mikroschemų rinkinio paleidimo) „Qualcomm“ atnaujino branduolio šaltinius ir paskelbė juos CAF skirtas msm8953 (Snapdragon 625 mikroschemų rinkinio pavadinimas), palaikantis Linux branduolį 4.9. Problema ta, kad dauguma originalios įrangos gamintojų neatnaujins telefonų į šią naują Linux branduolio versiją, ypač ne vidutinės klasės telefonus praėjus dvejiems metams po lusto paleistas. Tiesa, labai retai kada nors įvyksta toks didelis branduolio atnaujinimas, bet esmė ta, kad turi atsitiko, todėl tai nėra tik neįmanomas scenarijus.
Apskritai, dabartinis „Android“ susiskaidymas yra netvarka, švelniai tariant. Paskutiniai „Google“ bandymai ištaisyti šį susiskaidymą pateikiami kaip bendrasis branduolio vaizdas arba GKI.
Pristatome bendrąjį branduolio vaizdą
Siekdama pašalinti šį susiskaidymą, „Google“ dirbo su „Android Generic Kernel Image“ (GKI). Tai iš esmės yra branduolys, sudarytas tiesiai iš ACK šakos. GKI išskiria SoC tiekėjo ir OĮG tinkinimus į papildinių modulius, pašalina netiesioginį kodą ir leidžia „Google“ perduoti branduolio naujinimus tiesiai galutiniam vartotojui. Daugiau nei metus „Google“ ieško būdų, kaip pristatyti GKI naujinius per „Play“ parduotuvę, naudojant pagrindinį modulį.
Todėl įrenginiuose, kurie paleidžiami naudojant „Android 12“, kuriuose veikia 5.10.43 ar naujesnės versijos „Linux“ branduolys, turi būti atliktas vienas iš šių veiksmų: pagal Mishaalą Rahmaną.
- Įdiekite „Google“ pasirašytą įkrovos vaizdą
ARBA
- Įdiekite įkrovos vaizdą su branduoliu, kuris eksportuoja KMI (branduolių modulio sąsają), kuri yra GKI eksportuoto KMI poaibis, eksportuoja vartotojo erdvės API, kuri yra GKI atskleisto UAPI superrinkinys ir palaiko visas atitinkamo GKI funkcijas. versija
Pardavėjai gali sukurti modulius, prijungtus prie GKI, tačiau GKI idėja yra ta, kad „Google“ prisiima atsakomybės už branduolio pakeitimų tvarkymą. Branduolio modulio sąsaja (arba KMI, daugiau apie tai vėlesnėse straipsnio dalyse) yra veiksminga vieta, kur turėtų būti naudojamas išorinis kodas.
„Google Pixel 6“ serija išleista kartu su „Android 12“ ir pristatoma su „Linux“ branduoliu 5.10. Tai pirmasis telefonas su GKI. Kadangi „Google“ gali atnaujinti branduolį per „Play“ parduotuvę, mes netgi galime matyti dažnus branduolio atnaujinimus, nes LTS branduolio naujinimai paprastai išleidžiami kas savaitę. Bet kuriuo atveju tai daug geresnė sistema nei šiuo metu sudėtingas atnaujinimo per OTA metodas, nors tai reiškia, kad ji yra iš esmės susieta su GMS sistema.
„Google“ tiesiog apibrėžia GKI taip:
- Jis sukurtas iš ACK šaltinių.
- Tai vieno branduolio dvejetainis ir susiję įkeliami moduliai pagal architektūrą, pagal LTS leidimą (šiuo metu tik arm64
android11-5.4
irandroid12-5.4
). - Jis išbandytas su visais Android platformos leidimais, palaikomais susijusiam ACK. Per visą GKI branduolio versijos eksploatavimo laiką funkcijos nenutrūksta
- Tai rodo stabilų KMI vairuotojams tam tikroje LTS.
- Jame nėra SoC arba plokštės specifinio kodo.
„Google“ netgi nori būti tokioje padėtyje, kad iki 2023 m. galėtų imtis „pirmiausia“ plėtros modelio. Tai padės „Google“ užtikrinti, kad naujas kodas pirmiausia atsidurtų pagrindiniame „Linux“ branduolyje ir sumažins „techninę skolą“, susikaupusią „Android“ įrenginiuose esančiame kode.
Branduolio modulio sąsaja (KMI)
Branduolio modulio sąsaja arba KMI yra „Google“ sprendimo dėl nuolatinio „Android“ susiskaidymo dalis. Iš esmės SoC ir plokštės palaikymas nebėra pagrindiniame branduolyje, o perkeliami į įkeliamus modulius. Ir branduolys, ir moduliai gali būti atnaujinami atskirai, kai moduliai atnaujinami /lib/modules
. Pats GKI turėtų būti kuo švaresnis ir bendresnis, o tai įmanoma iškraunant tai, kas dabar nėra medžio kodas, į atskirus modulius.
Kaip Tedas Kjosas paaiškino adresu Šių metų „Linux“ santechnikų konferencijoje „didelis daugiametis postūmis yra iš bendrojo branduolio ištraukti visą aparatūros kodą į pardavėjo modulius. Turime turėti stabilią sąsają tarp tų pardavėjo modulių ir bendrojo branduolio, kad jie galėtų siųsti asinchroniškai." GKI 1.0 iš esmės yra "atitikties testas".
Tiesą sakant, GKI suderinamumas reiškia, kad įrenginys išlaiko VTS ir CTS-on-GSI+GKI testus su bendruoju sistemos vaizdu (GSI). ir GKI branduolys, įdiegtas perkeliant GKI įkrovos vaizdą į įkrovos skaidinį ir GSI sistemos vaizdą sistemoje pertvara. Pardavėjo testų rinkinys arba VTS yra automatinis testas, kurį turi išlaikyti visi įrenginiai, kad būtų laikomas suderinamu su Project Treble. Norint pasiekti „Google“ programų rinkinį, reikalingas suderinamumo testų rinkinys arba CTS.
Įrenginiai gali būti pristatomi su kitu produkto branduoliu ir gali naudoti įkeliamus modulius, kurių GKI nepateikia. Tačiau ir produktas, ir GKI branduoliai turi įkelti modulius iš tų pačių „vendor_boot“ ir tiekėjo skaidinių. Todėl visi produkto branduoliai turi turėti tą pačią dvejetainio branduolio modulio sąsają (KMI).
Aukščiau pateiktoje diagramoje parodyta, ką Google nori ir paaiškina, kaip ji ketina tai pasiekti. Bendrasis branduolys ir GKI moduliai bus AOSP dalis, o GKI gali susisiekti su „Android“ sistema ir aparatūros abstrakcijos sluoksniu (HAL), kuriuos pardavėjas gali įdiegti. Konkretus patentuotas kodas, kurio pardavėjas nori įtraukti į branduolį (pavyzdžiui, fotoaparato tvarkyklės), bus įstumtas į tiekėjo modulį, kuris tampa GKI plėtiniu per KMI.
Kaip GKI gali padėti išspręsti „Android“ susiskaidymo problemą
„Google“ įdėjo daug darbo, kad supaprastintų išmaniųjų telefonų kūrimo procesą. Kiekvienas OĮG nori turėti savo prekės ženklo tapatybę, o kiekvienas OĮG nori turėti savo įrenginių nuosavybės teisę. Skirtingai nuo „Android One“ programos, „Android“ išmanieji telefonai gali būti tokie, kokių tik nori, jei tik jie laikosi taisyklių, kurias „Google“ nustato, kad gautų GMS licenciją. Tačiau praeityje „Google“ nepadarė daug, kad karaliautų kurdama „Android“ įrenginius pakeitimai, tokie kaip „Project Treble“, „Mainline“ ir dabar „Android“ GKI yra daug naujesnis istorija.
Bet ar tai padės? Tai turėtų būti padaryta, nors greičiausiai tai bus kelerius metus trunkantis reikalas, kuris vėliau duos matomų vaisių. Tai bus taikoma tik įrenginiams, kurie paleidžiami naudojant „Android 12“, o tai reiškia, kad ateinančius metus matysime įrenginius, kuriuose nebus GKI. Tai taip pat buvo projekto Treble kritika, kai apie tai buvo paskelbta, nors akivaizdu, kad visi šiais laikais išleisti įrenginiai jį palaiko. Šie dalykai užtrunka, o „Google“ pamažu ima dominuoti „Android“, todėl kūrimo procesas palengvėja visiems originalios įrangos gamintojams. „Android“ ekosistemą, net jei kai kurie iš jų norėtų visiškai valdyti „Android“ naudojamą „Linux“ branduolį išmanieji telefonai.