Kā atjaunināt Android kodolu uz jaunāko stabilo Linux versiju

izveido katru atsevišķu kodola daļu, pat ne visizplatītākās Linux distros, piemēram, Ubuntu vai Mint. Tas nenozīmē, ka nevajadzētu lietot šos labojumus, jo tur IR labojumi draiveriem DARI palaist. Ņemiet, piemēram, arm / arm64 un ext4, kas attiecīgi ir visizplatītākā Android arhitektūra un failu sistēma. 4.4. Punktā no 4.4.78 (jaunākā Oreo CAF taga versija) līdz 4.4.121 (jaunākā augšējā taga atzīme) šie skaitļi attiecas uz šo sistēmu saistībām:



nathan @ flashbox ~ / kernels / linux-stabil (master) $ git log --format =% h v4.4.78..v4.4.121 | wc -l2285 nathan @ flashbox ~ / kodoli / linux-stabil (master) $ git log --formāts =% h v4.4.78..v4.4.121 arka / roka | wc -l58 nathan @ flashbox ~ / kernels / linux-stabil (master) $ git log --format =% h v4.4.78..v4.4.121 arch / arm64 | wc -l22 nathan @ flashbox ~ / kodoli / Linux-stabils (master) $ git log --formāts =% h v4.4.78..v4.4.121 fs / ext4 | wc -l18

Laikietilpīgākā daļa ir sākotnējā audzināšana; tiklīdz esat pilnībā atjaunināts, nav vajadzīgs laiks, lai apvienotos jaunā laidienā, kurā parasti ir ne vairāk kā 100 saistību. Priekšrocības, ko tas dod (lielāka stabilitāte un labāka lietotāju drošība), tomēr prasa šo procesu.

Kā apvienot Linux stabilo kodolu Android kodolā

Vispirms jums jānoskaidro, kāda kodola versija darbojas jūsu Android ierīcē.

Lai cik mazsvarīgi tas šķiet, ir jāzina, ar ko jāsāk. Kodola kokā izpildiet šādu komandu:

veikt kernelversion

Tas atgriezīs versiju, kuru izmantojat. Pirmie divi numuri tiks izmantoti, lai noskaidrotu nepieciešamo atzarojumu (piem., Linux-4.4.y jebkuram 4.4 kodolam), un pēdējais skaitlis tiks izmantots, lai noteiktu, kura versija jāsāk ar apvienošanu (piemēram, ja izmantojat 4.4 versiju) .21, pēc tam jūs apvienosiet 4.4.22.)

Paņemiet jaunāko kodola avotu no kernel.org

kernel.org ir jaunākais kodola avots stabilā Linux krātuve . Šīs lapas apakšdaļā būs trīs ielādes saites. Pēc manas pieredzes, Google spogulis parasti ir ātrākais, taču jūsu rezultāti var atšķirties. Palaidiet šādas komandas:

git tālvadības pievienošana linux-stabila https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable.gitgit ielādēt Linux-stabila

Izlemiet, vai vēlaties apvienot visu kodolu vai izvēlēties ķirsis

Pēc tam jums būs jāizvēlas, vai vēlaties apvienot saistības vai ķiršu izvēli. Šeit ir katra priekšrocības un trūkumi, un kad jūs tos vēlēsities darīt.

PIEZĪME: Ja jūsu kodola avots ir tarball formā, visticamāk, jums būs jāizvēlas ķirsis, pretējā gadījumā jūs saņemsiet tūkstošiem failu konfliktu, jo git aizpilda vēsturi, pamatojoties tikai uz augšup, nevis uz to, ko OEM vai CAF ir mainījis. Vienkārši pārejiet pie 4. darbības.

Ķiršu lasīšana:

Plusi:

  • Vieglāk atrisināt konfliktus, jo jūs precīzi zināt, kāds konflikts rada problēmu.
  • Vieglāk pārvērtēt, jo katra saistība ir pati par sevi.
  • Vienkāršāk sadalīt, ja rodas problēmas

Mīnusi:

  • Tas aizņem vairāk laika, jo katra apņemšanās ir jāizvēlas atsevišķi.
  • Nedaudz grūtāk pateikt, vai apņemšanās notiek no augšupējā skatiena

Ej

Plusi :

  • Tas ir ātrāks, jo jums nav jāgaida visu tīro plāksteru saplūšana.
  • Vieglāk ir redzēt, kad saistības ir no augšteces, jo jūs nebūsiet izpildītājs, bet gan iepriekšējais uzturētājs.

Mīnusi:

  • Konfliktu atrisināšana var būt nedaudz sarežģītāka, jo jums būs jāpameklē, kurš apņemšanās izraisa konfliktu, izmantojot git log / git vainu, tas jums tieši nepateiks.
  • Pārveidošana ir sarežģīta, jo jūs nevarat atkārtoti apvienot apvienošanos, tā piedāvās individuāli izvēlēties visu apņemšanos. Tomēr jums nevajadzētu bieži pārkārtot bāzi, bet, ja iespējams, izmantojiet git revert un git sapludināšanu.

Es iesaku izvēlēties ķiršu izvēli, lai sākotnēji noskaidrotu jebkādus problēmu konfliktus, veicot apvienošanu, pēc tam atjaunojot problēmu, pēc tam atjaunināšana ir vienkāršāka (jo apvienošana notiek ātrāk pēc atjaunināšanas).

Pievienojiet apņemšanos savam avotam pa vienai versijai

Vissvarīgākā šī procesa daļa ir viena versija vienā reizē. Iespējams, ka jūsu augšpusē esošajā sērijā ir problēmu plāksteris, kas var radīt problēmas ar sāknēšanu vai salauzt kaut ko, piemēram, skaņu vai uzlādi (paskaidrots padomu un triku sadaļā). Šī iemesla dēļ ir svarīgi veikt pakāpeniskas izmaiņas versijā. Dažās versijās problēmu ir vieglāk atrast 50, nevis vairāk nekā 2000 saistībās. Es ieteiktu veikt pilnu apvienošanu tikai tad, kad zināt visas problēmas un konfliktu risinājumus.

Ķiršu lasīšana

Formāts:

git cherry-pick ..

Piemērs:

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

Ej

Formāts:

ej saplūst

Piemērs:

git merge v3.10.74

Iesaku sekot konfliktiem apvienošanās saistībās, noņemot # marķierus.

Kā atrisināt konfliktus

Mēs nevaram sniegt soli pa solim katra konflikta risināšanu, jo tas ietver labas C valodas zināšanas, taču šeit ir daži padomi.

Ja jūs apvienojaties, noskaidrojiet, kas apņemas izraisīt konfliktu. To var izdarīt vienā no diviem veidiem:

  1. git log -p v $ (make kernelversion) .. lai iegūtu izmaiņas starp jūsu pašreizējo versiju un jaunāko no augšteces. P-karodziņš sniegs jums izmaiņas, kuras veikusi katra apņemšanās, lai jūs varētu redzēt.
  2. Palaidiet failu git blame, lai iegūtu katra izdarītā jaucēja laukumu. Pēc tam varat palaist git show –format = fuller, lai redzētu, vai izpildītājs bija no mainline / stabil, Google vai CodeAurora.
  • Izdomājiet, vai jums jau ir saistības. Daži pārdevēji, piemēram, Google vai CAF, mēģinās meklēt kritiskas kļūdas, piemēram, Dirty COW fix, un viņu aizmugurējie logi var būt pretrunā ar augšpusē esošajiem. Jūs varat palaist git log –grep = ”” un pārbaudīt, vai tas neko neatgriež. Ja tā notiek, varat izlaist saistības (ja ķiršu novākšana, izmantojot git reset –hard && git cherry-pick – turpināt) vai ignorēt konfliktus (noņemiet<<<<<>>>>>).
  • Izdomājiet, vai ir bijis aizmugures ports, kas sajauc izšķirtspēju. Google un CAF vēlas atbalstīt noteiktus ielāpus, kas nebūtu stabili. Stabils bieži būs jāpielāgo galvenā līnijas izšķirtspēja, lai nebūtu noteiktu ielāpu, kurus Google izvēlas atbalstīt. Jūs varat apskatīt galveno līniju saistību, palaižot git show (galvenās līnijas jaukšana būs pieejama stabilās saistības saistības ziņojumā). Ja kāds aizmugures ports to sajauc, varat vai nu atmest izmaiņas, vai arī izmantot galveno līnijas versiju (kas jums parasti būs jādara).
  • Izlasiet, ko apņemšanās mēģina izdarīt, un noskaidrojiet, vai problēma jau ir novērsta. Dažreiz CAF var novērst kļūdu, kas nav atkarīga no augšpus straumes, kas nozīmē, ka jūs varat vai nu pārrakstīt to labojumu augšpusē, vai arī to izmest, tāpat kā iepriekš.

Pretējā gadījumā tas var būt tikai CAF / Google / OEM pievienošanas rezultāts, tādā gadījumā jums vienkārši jāmaina dažas lietas.

Šeit ir linux-stabil kodola.org repozitorija spogulis vietnē GitHub, kas var būt vienkāršāk, meklējot saistību sarakstus un diffus konfliktu risināšanai. Es iesaku vispirms doties uz saistību saraksta skatu un atrast problēmu saistību, lai redzētu sākotnējo diff, lai salīdzinātu to ar jums.

URL piemērs: https://github.com/nathanchance/linux-stable/commits/linux-3.10.y/arch/arm64/mm/mmu.c

To var izdarīt arī, izmantojot komandrindu:

git log .. git šovs

Rezolūciju risināšana ir saistīta ar kontekstu. VIENMĒR jādara, lai pārliecinātos, ka jūsu galīgais diffikss atbilst augšpusē, divās atsevišķās logos izpildot šādas komandas:

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

Iespējot pārrakstīšanu

Git ir funkcija, ko sauc par rerere (nozīmē Atkārtoti izmantot ierakstīto izšķirtspēju), kas nozīmē, ka, atklājot konfliktu, tā ierakstīs, kā jūs to atrisinājāt, lai vēlāk varētu to atkārtoti izmantot. Tas ir īpaši noderīgi gan hroniskiem rebaseriem, gan apvienojot, gan ķiršu izvēloties, jo jums vienkārši būs jāpalaiž git add. && git - turpiniet, veicot augšupējās ievades versiju, jo konflikts tiks atrisināts tā, kā jūs to iepriekš atrisinājāt.

To var iespējot, palaižot šo komandu kodola repo:

git config rerere.enabled taisnība

Kā sadalīt divpusēji, palaižot kompilatoru vai izpildlaika kļūdu

Ņemot vērā to, ka pievienosiet ievērojamu skaitu saistību, ir ļoti iespējams ieviest kompilatora vai izpildlaika kļūdu. Tā vietā, lai vienkārši atteiktos, varat izmantot git iebūvēto divpusēju rīku, lai noskaidrotu problēmas galveno cēloni! Ideālā gadījumā jūs veidosiet un mirgosit katru atsevišķo kodola versiju, kad to pievienosiet, tāpēc dalīšana pa daļām prasīs mazāk laika, ja nepieciešams, bet jūs varat sadalīt 5000 saistības bez problēmām.

Ko git bisect darīs, ir veikt virkni apņemšanos, sākot no vietas, kur problēma pastāv, līdz vietai, kur tā nebija, un pēc tam sāciet pusi samazināt saistību diapazonu, ļaujot jums izveidot un pārbaudīt, kā arī paziņot, vai tas ir labs vai nē . Tas turpinās to, līdz izspiedīs saistības, kas izraisa jūsu problēmu. Tajā brīdī to var vai nu salabot, vai arī atcelt.

  1. Sāciet dalīt divās daļās: sāciet divpusēji
  2. Atzīmējiet pašreizējo versiju kā sliktu: slikti sadaliet divpusēji
  3. Iezīmējiet pārskatījumu kā labu: git bisect good
  4. Veidojiet ar jauno pārskatīšanu
  5. Pamatojoties uz rezultātu (ja problēma ir vai nav), pasakiet git: git bisect good OR git bisect bad
  6. Noskalojiet un atkārtojiet 4.-5. Darbību, līdz tiek atrasta problēma.
  7. Atgrieziet vai novērsiet problēmu.

PIEZĪME: Apvienojumiem būs īslaicīgi jāpalaiž git rebase -i, lai uzliktu visus ielāpus savai filiālei, lai pareizi sadalītu, jo, sadalot divās daļās ar izveidoto saplūšanu, bieži vien tiek izrakstītas iepriekšējās apņemšanās, kas nozīmē, ka jums nav nevienas no Android īpašajām saistībām. Pēc pieprasījuma es varu iedziļināties šajā jautājumā, bet ticiet man, tas ir vajadzīgs. Kad esat identificējis problēmu, kuru var izdarīt, varat to atjaunot vai atkārtoti apvienot.

NELIETOJIET jauninājumus pirms straumes

Daudzi jaunie izstrādātāji to kārdina darīt, jo to ir “tīrāk” un “vieglāk” pārvaldīt. Tas ir briesmīgi dažu iemeslu dēļ:

  • Autoritāte ir zaudēta. Tas ir negodīgi pret citiem izstrādātājiem, ja viņu darbs tiek atņemts.
  • Sadalīt pa pusēm nav iespējams. Ja jūs saspiežat virkni saistību un kaut kas ir šīs sērijas jautājums, nav iespējams pateikt, kura izdarīšana izraisīja problēmu skvošā.
  • Nākotnes ķiršu cērtes ir grūtākas. Ja jums ir nepieciešams pārvērtēt ar saspiestu sēriju, ir grūti / neiespējami pateikt, no kurienes rodas konflikts.

Abonējiet Linux kodola adresātu sarakstu, lai savlaicīgi atjauninātu

Lai saņemtu paziņojumu ikreiz, kad notiek augšpusējā atjaunināšana, abonējiet linux-kernel-Announce saraksts . Tas ļaus jums saņemt e-pastu katru reizi, kad tiek izlaists jauns kodols, lai jūs varētu atjaunināt un virzīt pēc iespējas ātrāk.

9 minūtes lasīts