Cum să construiți Kernel Android pe Windows 10

Appual are câteva ghiduri excelente în domeniul dezvoltării Android, cum ar fi Cum să construiți o ROM personalizată din proiectul Open Source pentru Android - dar aceste ghiduri sunt de obicei orientate către un mediu de construire Linux pur.

În acest ghid, vă vom arăta cum să construiți un kernel Android pe Windows 10 - da, vom folosi în continuare un mediu de compilare Linux, dar va fi un subsistem Linux în Windows 10. Deci, dacă sunteți un Windows 10 utilizator interesat să se dezvolte pentru Android, urmați cu atenție ghidul nostru.

În acest ghid, vom învăța în mod special cum să construim un nucleu pentru dispozitivele ARM și MediaTek, adăugând funcții și o privire de ansamblu de bază a utilizării Git.

cerinţe

  • Windows 10 x64 (cu actualizarea Fall Creator)

Configurarea mediului Linux

  1. Pe Windows 10, accesați Setări> Actualizare și securitate> Pentru dezvoltatori> activați modul dezvoltatori.
  2. Acum accesați Panoul de control> Programe> Activează sau oprește funcțiile Windows> activează Subsistemul Windows pentru Linux.
  3. Reporniți computerul.
  4. Lansați subsistemul Linux și permiteți-l să parcurgă procesul de descărcare. Setați o parolă și nu o pierdeți.
  5. Acum accesați magazinul de aplicații Windows și descărcați Ubuntu.
  6. Lansați Ubuntu pe desktopul Windows 10 și va solicita un nume de utilizator și o parolă.
  7. În Ubuntu, lansați terminalul nativ și tastați următoarea comandă: apt-get update
  8. Aceasta va continua să actualizeze toate repos pentru aplicații și dependențe.
  9. Următorul în tipul terminalului: sudo apt-get install -y build-esențialul kernel-pachet libncurses5-dev bzip2
  10. Pentru a verifica dacă toate dependențele au fost instalate corect, tastați „gcc” în terminal (fără ghilimele).
  11. Dacă „gcc” este deja instalat, ar trebui să vedeți „gcc: eroare fatală: fără fișier de intrare”
  12. Acum puteți tasta „marca” în terminal. Dacă „make” este deja instalat, ar trebui să vedeți „make: *** nicio țintă specificată și niciun makefile găsit. Stop."
  13. Tipul următor „git” și dacă „git” este deja instalat, ar trebui să vedeți o mulțime de comenzi de bază git.
  14. Acum avem nevoie de câteva instrumente (există mai multe tipuri, inclusiv GCC, Linaro și o mână de altele personalizate). Unele dispozitive pot necesita diferite cabluri de unelte, de exemplu, nu toate nucleele de dispozitiv vor porni sau compila cu GCC.

Pentru dispozitivele ARM

Vom folosi GCC 4.7 pentru asta.

  1. Deschide terminalul Linux și tipează: mkdir kernel
  2. Introduceți acum: CD kernel
  3. (nu trebuie să fie „kernel”, aceasta este pentru simplitate, poți numi orice vrei).
  4. Acum tastați: git clone //android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7

Pentru dispozitivele ARM 64

Ai nevoie de un compilator de kernel pe 64 de biți pentru dispozitivele ARM 64, de exemplu aarch64.

Obținerea fișierelor sursă pentru dispozitivul dvs.

Aceasta este o parte complicată, deoarece trebuie să găsiți un repo GitHub care găzduiește sursa de kernel. Desigur, va trebui să îl căutați, cel mai probabil poate fi găsit pe forumurile XDA.

Iată un exemplu Git sursa de sâmbure.

În partea stângă sus, ar trebui să vedeți „Sucursala: completată de xxxx”.

Există diferite versiuni ale unui kernel / proiect, de obicei separate prin „Testing”, „Beta”, „Release Final” etc.

Dosarele de kernel sunt de obicei după cum urmează:

  • / arch / arm / configs : Acesta conține diferite fișiere de configurare pentru dispozitiv, cum ar fi guvernanți etc.
  • / output / arch / bra / boot / : Aici va fi stocat zimajul.
  • build.sh : Un script care va simplifica procesul de construire.
  • /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2 : Aceasta este, de obicei, o cablă de unelte plasată în sursa de sâmbure, făcând astfel mai ușor de găsit.

Va trebui să descărcați sursa de kernel.

Deschideți terminalul Linux și asigurați-vă că vă aflați în folderul kernel creat anterior (CD kernel).

Apoi tastați terminalul: „URL-ul clonă” URL-ul nucleului github ”-b„ numele ramurii ”

De exemplu: „git clone //github.com/atxoxx/android_ke…amsung_msm8974 -b xenomTW”

Construirea nucleului

Pentru a vă ușura, puteți naviga către locația din exploratorul de fișiere. Ar trebui să fie / home / user ID / kernel (sau orice ați numit folderul kernel).

Ar trebui să vedeți două foldere în interior, pentru cablul de instrumente și sursa nucleului. Intrați în folderul sursă al kernel-ului.

Pentru dispozitivele ARM

Într-un terminal, introduceți următoarele comenzi:

 #! / bin / bash export ARCH = arm export CROSS_COMPILE = mkdir ieșire make -C $ (pwd) O = ieșire "nume defconfig și variantă, dacă este nevoie" make -j4 -C $ (pwd) O = output 

Iată o imagine de ansamblu asupra a ceea ce fac aceste comenzi, pentru a facilita acest lucru în viitor.

  • #! / bin / bash: Spune scriptul să fie executat în comanda shell
  • export ARCH = arm: Definirea tipului de arhitectură a sâmburelui (de exemplu arm64 etc)
  • export CROSS_COMPILE = : Localizați unde se află cablul de instrumente. Trebuie să se potrivească cu calea exactă, iar liniuța în final este într-adevăr obligatorie.
  • ieșire mkdir: Aceasta creează un director pentru salvarea zimajului compilat
  • make -C $ (pwd) O = output : Definirea defconfig pentru ghidarea compilării nucleului.
  • make -j4 -C $ (pwd) O = output : Când începe procesul de construire, -j # îi spune cât de rapid să încerci și să compilezi. De obicei, setați acest număr în funcție de procesorul dvs. Setarea pe -j32 pe un procesor bugetar, de exemplu, ar provoca probabil instabilitate masivă.
  • cp output / arch / bra / boot / Image $ (pwd) / arch / arm / boot / zImage : Aceasta este pentru a muta imaginea la o a doua cale.

Alt exemplu:

 #! / bin / bash export ARCH = arm export CROSS_COMPILE = $ (pwd) /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2/bin/arm-cortex-linux-gnueabi- mkdir output -C $ (pwd) O = ieșire msm8974_sec_defconfig VARIANT_DEFCONFIG = msm8974_sec_ks01_skt_defconfig SELINUX_DEFCONFIG = selinux_defconfig make -j4 -C $ (pwd) O = ieșire cp output / arch / bra / boot / Image $ (pwd) 

Pentru dispozitivele ARM 64

 #! / bin / bash export ARCH = arm64 export CROSS_COMPILE = "calea către toolchain-ul tău" (trebuie să se încheie cu ceva de genul "nameofarch-qualcosa-") ieșire mkdir make -C $ (pwd) O = output "numele defconfig și variantă, dacă este nevoie, „make -j4 -C $ (pwd) O = output 

Pentru dispozitivele Mediatek (MTK)

 #! / bin / bash export CROSS_COMPILE = "calea către cablul tău de instrumente" (trebuie să se încheie cu ceva de genul "numeofarch-ceva-") export ARCH = braț ARCH_MTK_PLATFORM = face "numele defconfig și varianta, dacă este nevoie" make -j4 

După ce ați finalizat pașii necesari pentru arhitectura kernelului dvs., puteți să introduceți terminalul: sudo bash build.sh

Vei introduce apoi parola de utilizator și procesul de compilare va începe.

Poate dura ceva, dar de obicei nu foarte lung, compilarea unui kernel nu este ca și cum ai compila un întreg ROM ROM. Acesta este într-adevăr dependent de procesor - de exemplu, un AMD Phenom X4 3.4GHz cu 8 GB RAM ar trebui să dureze aproximativ 10 minute pentru a compila de la început la sfârșit.

Când se termină, ar trebui să vă anunțe cu un mesaj de genul „zimage este gata”.

Dispozitive ARM și ARM64

Accesați „/ Ieșire / arcul / braț / boot /” pentru a găsi zimajul.

Dispozitive Mediatek

Accesați „/ arch / bra / boot /” pentru a găsi zimajul.

Nu toate compilările de kernel vor avea ca rezultat un fișier Zimage, uneori poate fi construit ca alte formate de imagine.

Important: Dacă urmează să compilați din nou, vă recomandăm să introduceți comenzile make clean și să faceți mrproper înainte de a începe procesul de compilare din nou.

Realizarea cizmei de sâmbure

Există două opțiuni pentru tine.

Puteți utiliza metoda anykernel (așa cum este definită de utilizator XDA @ osm0sis în acest thread XDA). Ar trebui să citiți întregul tutorial, dar un rezumat al pașilor este următorul:

  1. Plasați zImage în rădăcină (dtb și / sau dtbo ar trebui să meargă și aici pentru dispozitivele care necesită cele personalizate, fiecare se va întoarce la original, dacă nu este inclus)
  2. Plasați toate fișierele ramdisk necesare în / ramdisk și module în / module (cu calea completă cum ar fi / module / sistem / lib / module)
  3. Puneți fișierele de patch necesare (în general fișiere parțiale care merg cu comenzi) în / patch
  4. Modificați anykernel.sh pentru a adăuga numele kernel-ului, locația partiției de pornire, permisiunile pentru fișierele ramdisk incluse și utilizați metodele pentru orice modificări necesare pentru ramdisk (opțional, de asemenea, plasați fișiere banner și / sau versiune în rădăcină pentru a le afișa în timpul flash)
  5. `zip -r9 UPDATE-AnyKernel2.zip * -x .git README.md * placeholder`

Cealaltă metodă pe care o ai la dispoziție este dezambalarea boot.img din aceeași ROM (cum ar fi CM, TouchWiz, EMUI etc.) și aceeași versiune Android. Vei schimba apoi Zimage. Din nou, acesta este un proces cu adevărat complicat și ar trebui să citiți tutorialul exact, dar un rezumat al etapelor este:

  1. Dezarhivarea.
  2. Fie folosiți linia de comandă „unpackimg”, fie pur și simplu glisați și fixați imaginea. Aceasta va împărți imaginea și va despacheta ramdisk-ul într-un subdirector.
  3. Modificați ramdisk-ul după cum doriți.
  4. Script-ul de reîncărcare lot nu necesită nicio intrare și pur și simplu recombină zImage-ul împărțit anterior cu ramdisk-ul modificat recent folosind toate informațiile originale ale imaginii (care a fost, de asemenea, împărțit și salvat).
  5. Scriptul pentru lotul de curățare resetează folderul la starea inițială, eliminând directoarele split_img + ramdisk și orice fișier nou sau ambalat ramdisk ambalat.

Înainte de a face flash-ul kernel-ului dvs., ar trebui să creați o copie de rezervă a stocului de stocare boot.img, apoi flash-ul kernel-ului pentru a vedea dacă permite sistemului dvs. de Android să pornească.

Adăugarea de funcții la nucleul tău

Adăugarea de caracteristici la kernel este o modalitate excelentă de a-l condimenta. Există o mulțime de lucruri pe care le puteți regla, cum ar fi guvernanții procesorului, programatoare IO, overclockarea GPU, îmbunătățiri audio etc.

Un exemplu pentru adăugarea unui guvernator este aici (acest guvernator este numit cu numele de cod Intellimm).

În primele 2 căsuțe de text putem vedea că în „arch / bra / configs /” „msm8974_sec_defconfig” și „cm_msm8974_sec_defconfig” au fost modificate.

Între liniile 140 și 141 din aceste fișiere, acest text a fost adăugat: „CONFIG_CPU_FREQ_GOV_INTELLIMM = y”

(Această linie este destinată activării Intellimm atunci când vă compilați nucleul)

Aceeași tehnică se aplică și celorlalte casete de text (ceea ce a fost adăugat și șters și locația sa)

În funcție de funcțiile pe care le adăugați, mai multe sau mai puține fișiere pot fi modificate, adăugate sau șterse.

Deci, pentru a rezuma, un angajament să vedem toate modificările făcute și orice altceva!

Sfaturi și trucuri generale

Cum se schimbă numele și versiunea kernel-ului:

Metoda simplă:

Editați această linie în fișierul dvs. defconfig:

 "CONFIG_LOCALVERSION =" - "după - în defconfig 

Exemplu: CONFIG_LOCALVERSION = ”- XenomTW-3.2.6 ″

Metodele avansate:

Navigați la Makefile din folderul rădăcină al sursei de kernel.

Adaugă aceste linii:

 CONFIG_LOCALVERSION = "nameofyourkernel" LOCALVERSION = "versionofyourkernel" 

NU modificați versiunile Versiunea, PatchLevel, Sublevel sau Extraversion.

Metodă alternativă:

Accesați scripturile / mkcompile_h și adăugați aceste linii:

 LINUX_COMPILE_BY = "numeofyourchoice" LINUX_COMPILE_HOST = "numeofyourchoice" 

Rezolvarea problemelor PATH:

Dacă întâmpinați eroarea „Este calea dvs. corectă?”, Încercați acest lucru în terminalul Linux:

 "export PATH =" pathtotoolchainlocation "/ bin: $ PATH" 

Accesarea dosarelor Ubuntu din Windows 10

Calea dvs. către Ubuntu ar trebui să fie de obicei:

C: \ Users "NAME" \ AppData \ Local \ Pachete \ CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc \ LocalState \ rootfs \ home

Dar nu ar trebui să editați fișierele direct din Windows, deoarece, de obicei, acestea vor rupe permisiunile de pe ele - va trebui apoi să resetați permisiunile de pe terminalul Linux.

Articole Interesante