Kuinka päivittää Android-ytimesi uusimpaan Linux-vakauteen

rakentaa jokaisen ytimen osan, ei edes yleisimmät Linux-distrot, kuten Ubuntu tai Mint. Tämä ei tarkoita, että sinun ei pitäisi ottaa näitä korjauksia, koska ne ovat siellä OVAT korjaukset kuljettajille TEHDÄ juosta. Otetaan esimerkiksi arm / arm64 ja ext4, jotka ovat vastaavasti yleisin Android-arkkitehtuuri ja tiedostojärjestelmä. Kohdassa 4.4, 4.4.78 (viimeisimmän Oreo CAF -tunnisteen versio) ja 4.4.121 (viimeisin ylävirran tag), nämä ovat seuraavat numerot näiden järjestelmien sitoumuksille:

nathan @ flashbox ~ / kernels / linux-stabil (master) $ git log --format =% h v4.4.78..v4.4.121 | wc -l2285 nathan @ flashbox ~ / kernels / linux-stabil (master) $ git log --format =% h v4.4.78..v4.4.121 arch / arm | wc -l58 nathan @ flashbox ~ / kernels / linux-stabil (master) $ git log --format =% h v4.4.78..v4.4.121 arch / arm64 | wc -l22 nathan @ flashbox ~ / kernels / linux-stabil (master) $ git log --format =% h v4.4.78..v4.4.121 fs / ext4 | wc -l18

Eniten aikaa vievä osa on alustava esittely; Kun olet ajan tasalla, sulautuminen uuteen julkaisuun ei vie aikaa ollenkaan, mikä sisältää yleensä enintään 100 sitoutumista. Tämän tuomat edut (enemmän vakautta ja parempaa turvallisuutta käyttäjille) edellyttävät kuitenkin tätä prosessia.

Linux-vakaan ytimen yhdistäminen Android-ytimeen

Ensin on selvitettävä, mitä ytimen versiota Android-laitteesi käyttää.

Niin triviaalilta kuin tämä näyttää, on välttämätöntä tietää, mistä sinun on aloitettava. Suorita seuraava komento ytimen puussa:

tee ydinlaskenta

Se palauttaa käyttämäsi version. Kahta ensimmäistä numeroa käytetään selvittämään haara (esim. Linux-4.4.y mille tahansa 4.4-ytimelle) ja viimeistä numeroa käytetään määrittämään, minkä version sinun on aloitettava yhdistämällä (esim. .21, yhdistät seuraavaksi 4.4.22).

Tartu uusimpaan ytimen lähteeseen osoitteesta kernel.org

kernel.org talon viimeisin ytimen lähde Linux-vakaa arkisto . Sivun alaosassa on kolme hakulinkkiä. Kokemukseni mukaan Googlen peili on yleensä nopein, mutta tulokset voivat vaihdella. Suorita seuraavat komennot:

git-kaukosäädin lisää linux-vakaa https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable.gitgit noutaa linux-vakaa

Päätä, haluatko yhdistää koko ytimen vai valita kirsikat

Seuraavaksi sinun on valittava, haluatko yhdistää tehtävät tai kirsikka-valinta. Tässä on kunkin edut ja haitat ja milloin haluat tehdä ne.

MERKINTÄ: Jos ytimen lähde on tarball-muodossa, sinun on todennäköisesti valittava kirsikka, muuten saat tuhansia tiedostoristiriitoja, koska git täyttää historian puhtaasti ylävirtaan, ei siihen, mitä OEM tai CAF on muuttanut. Siirry vain vaiheeseen 4.

Kirsikoiden poiminta:

Plussat:

  • Konfliktien ratkaiseminen on helpompaa, kun tiedät tarkalleen mikä konflikti aiheuttaa ongelman.
  • Helpompi tehdä uudelleen, koska jokainen sitoutuminen on oma.
  • Helpompi jakaa, jos törmäät ongelmiin

Haittoja:

  • Se kestää kauemmin, koska jokainen sitoutuminen on valittava erikseen.
  • Hieman vaikeampi sanoa, onko sitoutuminen ylävirtaan ensi silmäyksellä

Mennä

Plussat :

  • Se on nopeampi, koska sinun ei tarvitse odottaa kaikkien puhtaiden laastareiden yhdistämistä.
  • On helpompi nähdä, kun sitoutuminen on ylävirtaan, koska et ole sitoutuja, alkupään ylläpitäjä on.

Haittoja:

  • Konfliktien ratkaiseminen voi olla hieman vaikeampaa, koska sinun on etsittävä mikä syy aiheuttaa konfliktin git log / git syyttää, se ei kerro sinulle suoraan.
  • Uudelleenasentaminen on vaikeaa, koska yhdistämistä ei voi perustaa uudelleen, se tarjoaa valita kaikki sitoutuneet erikseen. Sinun ei kuitenkaan pitäisi tehdä uudelleenkäynnistystä usein, vaan käyttää git-palautusta ja git-yhdistämistä aina kun mahdollista.

Suosittelen suorittamaan kirsikan poiminnan selvittämään ongelmakohdat aluksi, suorittamaan yhdistäminen ja palauttamaan ongelma sitten jälkikäteen, joten päivittäminen on helpompaa (koska yhdistäminen on nopeampaa ajantasaisuuden jälkeen).

Lisää sitoumukset lähteeseesi, yksi versio kerrallaan

Tärkein osa tätä prosessia on yksi versio kerrallaan. Ylävirran sarjassa saattaa olla ongelma, joka saattaa aiheuttaa käynnistysongelman tai rikkoa jotain ääntä tai latausta (selitetty vinkkejä ja vihjeitä käsittelevässä osassa). Versiota koskevien muutosten tekeminen on tärkeää tästä syystä. On helpompaa löytää ongelma 50 sitoumuksessa kuin joissakin versioissa yli 2000 sitoumusta. Suosittelen täydellisen yhdistämisen tekemistä vasta, kun tiedät kaikki ongelman sitoumukset ja konfliktinratkaisut.

Kirsikoiden poiminta

Muoto:

git kirsikka-pick ..

Esimerkki:

git cherry-pick v3.10.73..v3.10.74

Mennä

Muoto:

mene sulautumaan

Esimerkki:

git sulge v3.10.74

Suosittelen seuraamaan ristiriitoja yhdistämissitoumuksissa poistamalla # merkinnät.

Kuinka ratkaista ristiriitoja

Emme voi antaa vaiheittaisia ​​ohjeita jokaisen konfliktin ratkaisemiseen, koska siihen liittyy hyvä C-kielen taito, mutta tässä on muutama vinkki.

Jos olet yhdistämässä, selvitä mikä sitoutuminen aiheuttaa ristiriidan. Voit tehdä tämän kahdella tavalla:

  1. git log -p v $ (tee kernelversion) .. saadaksesi muutokset nykyisen ja uusimman version välillä ylävirtaan. -P-lippu antaa sinulle jokaisen sitoutuneen tekemät muutokset, jotta voit nähdä.
  2. Suorita git blame tiedostolle saadaksesi hajautukset jokaisesta sitoutumisesta alueella. Voit sitten suorittaa git show –format = fuller nähdäksesi, oliko komentaja päälinja / vakaa, Google tai CodeAurora.
  • Selvitä, onko sinulla jo sitoutuminen. Jotkut toimittajat, kuten Google tai CAF, yrittävät etsiä ylävirtaan kriittisiä virheitä, kuten Dirty COW -korjaus, ja heidän takaporttinsa voivat olla ristiriidassa alkupään kanssa. Voit suorittaa git log –grep = ”” ja tarkistaa, palauttaako se mitään. Jos näin tapahtuu, voit ohittaa sitoutumisen (jos kirsikan poiminta git reset –hard && git cherry-pick – jatka) tai sivuuttaa ristiriidat (poista<<<<<>>>>>).
  • Selvitä, onko resoluutiota sekoittavaa taustaporttia ollut. Google ja CAF haluavat tuoda tietyt korjaustiedostot, jotka eivät vakaa. Vakaa on usein mukautettava päälinjan sitoumuksen resoluutio tiettyjen korjaustiedostojen puuttumiseen, jotka Google valitsee backportin. Voit tarkastella päälinjan sitoutumista suorittamalla git-show (päälinjan hajautus on käytettävissä vakaan sitoutumisen sitoutumisviestissä). Jos taustaportti sekoittaa sen, voit joko hylätä muutokset tai käyttää päälinjaversiota (mikä sinun on yleensä tehtävä).
  • Lue, mitä sitoutunut yrittää tehdä, ja katso, onko ongelma jo korjattu. Joskus CAF saattaa korjata virheen, joka on riippumaton ylävirtaan, mikä tarkoittaa, että voit joko korvata niiden korjauksen ylävirtaan tai hylätä sen, kuten yllä.

Muuten se voi johtua vain CAF: n / Google / OEM: n lisäyksestä, jolloin sinun on vain sekoitettava joitain asioita.

Täällä on linux-vakaa kernel.org-arkiston peili GitHubissa, mikä voi olla helpompaa etsiä sitoutumisluetteloita ja eroja konfliktien ratkaisemiseksi. Suosittelen siirtymistä ensin sitoutumisluettelonäkymään ja etsimällä ongelman sitoumus nähdäksesi alkuperäisen eron verrataksesi sitä omaan.

Esimerkki URL-osoitteesta: https://github.com/nathanchance/linux-stable/commits/linux-3.10.y/arch/arm64/mm/mmu.c

Voit tehdä sen myös komentorivillä:

git loki .. git show

Päätöslauselmien ratkaisemisessa on kyse kontekstista. Sinun tulee AINA tehdä, että varmistat, että viimeinen ero on vastaava ylävirtaan suorittamalla seuraavat komennot kahdessa erillisessä ikkunassa:

git diff HEAD git diff v $ (tee kernelversion) .. $ (git tag --sort = -taggerdate -l v $ (tee kernelversion | cut -d. -f 1,2) * | head -n1)

Ota uudelleenohjaus käyttöön

Gitillä on ominaisuus nimeltä rerere (tarkoittaa uudelleenkäytettyä tallennettua tarkkuutta), mikä tarkoittaa, että kun se havaitsee ristiriidan, se tallentaa kuinka ratkaisit sen, jotta voit käyttää sitä myöhemmin. Tämä on erityisen hyödyllistä sekä kroonisille rebasereille, joilla on sekä sulautuminen että kirsikointi, koska sinun tarvitsee vain suorittaa git add. && git - jatka uudelleenkäynnistettäessä ylävirran esittelyä, koska konflikti ratkaistaan ​​samalla tavalla kuin aiemmin ratkaisit sen.

Se voidaan ottaa käyttöön suorittamalla seuraava komento ytimen repossa:

git config rerere.enabled tosi

Kuinka saada puolitettu, kun suoritat kääntäjän tai ajonaikaisen virheen

Ottaen huomioon, että lisäät huomattavan määrän sitoutumisia, voit ottaa käyttöön kääntäjä- tai ajonaikaisen virheen. Sen sijaan, että vain luopuisit, voit selvittää ongelman perimmäisen syyn gitin sisäänrakennetulla puolisuunnittelutyökalulla! Ihannetapauksessa rakennat ja vilkkaat jokaista ytimen versiota lisäämällä sitä, joten puolittaminen vie tarvittaessa vähemmän aikaa, mutta voit puolittaa 5000 sitoutumista ilman ongelmia.

Mitä git bisect tekee, on tehdä joukko sitoumuksia, mistä ongelma on läsnä, mihin sitä ei ollut läsnä, ja aloita sitten puolittamaan sitoutumisalue, jolloin voit rakentaa ja testata ja ilmoittaa, onko se hyvä vai ei . Se jatkaa tätä, kunnes se sitoo ongelman aiheuttavan sitoutumisen. Siinä vaiheessa voit joko korjata sen tai peruuttaa sen.

  1. Aloita puolittaminen: git bisect start
  2. Merkitse nykyinen versio huonoksi: git bisect bad
  3. Merkitse versio hyväksi: git bisect good
  4. Rakenna uudella versiolla
  5. Tuloksen perusteella (jos ongelma esiintyy tai ei), sano git: git bisect good OR git bisect bad
  6. Huuhtele ja toista vaiheet 4-5, kunnes ongelma on löydetty!
  7. Palauta tai korjaa ongelma.

MERKINTÄ: Sulautumien on suoritettava väliaikaisesti git rebase -i -sovellus, jotta kaikki korjaustiedostot levitetään haarallesi oikeaan jakamiseen, sillä puolittaminen sulautumisten kanssa usein kertaa kassaa ylävirran sitoumuksiin, mikä tarkoittaa, että sinulla ei ole mitään Android-erityisiä sitoumuksia. Voin mennä syvemmälle asiaan pyynnöstä, mutta luota minuun, sitä tarvitaan. Kun olet tunnistanut ongelman, voit palauttaa sen tai yhdistää sen uudelleen yhdistämiseen.

ÄLÄ purista ylävirran päivityksiä

Monet uudet kehittäjät houkuttelevat tekemään tämän, koska sen hallinta on 'puhtaampaa' ja 'helpompaa'. Tämä on kauheaa muutamista syistä:

  • Tekijänoikeus menetetään. On epäoikeudenmukaista, että muut kehittäjät saavat luottokelpoisuuden työstään.
  • Halkaisu on mahdotonta. Jos puristat sarjan sitoumuksia ja jokin on kyseisen sarjan asia, on mahdotonta kertoa, mikä syy aiheutti ongelman squashissa.
  • Tulevat kirsikkapaketit ovat vaikeampia. Jos sinun on aloitettava uudelleen puristetulla sarjalla, on vaikea / mahdotonta kertoa, mistä konflikti johtuu.

Tilaa Linux-ytimen postituslista, jotta päivitykset saadaan nopeasti

Tilaa tilaus, jotta saat ilmoituksen aina, kun päivitys on alkupäässä linux-kernel-announce -luettelo . Tämän avulla voit saada sähköpostin joka kerta, kun uusi ydin julkaistaan, jotta voit päivittää ja työntää mahdollisimman nopeasti.

9 minuuttia luettu