Hoe Android-kernel op Windows 10 te bouwen

Appual's heeft een paar geweldige handleidingen over Android-ontwikkeling, zoals Hoe maak je een Custom ROM van Android Open Source Project - maar deze handleidingen zijn meestal gericht op een pure Linux-buildomgeving.

In deze gids laten we je zien hoe je een Android-kernel op Windows 10 bouwt - ja, we zullen nog steeds een Linux-buildomgeving gebruiken, maar het zal een Linux-subsysteem binnen Windows 10 zijn. Dus als je een Windows 10 bent gebruiker geïnteresseerd in het ontwikkelen voor Android, volg onze gids zorgvuldig.

In deze gids zullen we specifiek leren hoe we een kernel voor ARM- en MediaTek-apparaten kunnen bouwen, functies toevoegen en een basisoverzicht van het gebruik van Git.

Vereisten

  • Windows 10 x64 (met Fall Creator's update)

De Linux-omgeving instellen

  1. Ga in Windows 10 naar Instellingen> Update en beveiliging> Voor ontwikkelaars> schakel Ontwikkelaarsmodus in.
  2. Ga nu naar Configuratiescherm> Programma's> Windows-functies in- of uitschakelen> Windows-subsysteem voor Linux inschakelen.
  3. Start uw pc opnieuw op.
  4. Start het Linux-subsysteem en laat het het downloadproces doorlopen. Stel een wachtwoord in en verlies het niet.
  5. Ga nu naar de Windows app store en download Ubuntu.
  6. Start Ubuntu op het bureaublad van Windows 10 en u wordt om een ​​gebruikersnaam en wachtwoord gevraagd.
  7. Start in Ubuntu de native terminal en typ de volgende opdracht: apt-get update
  8. Hiermee worden alle repo's voor apps en afhankelijkheden bijgewerkt.
  9. Volgende in het terminaltype: sudo apt-get install -y build-essential kernel-pakket libncurses5-dev bzip2
  10. Om te controleren of alle afhankelijkheden correct zijn geïnstalleerd, typt u 'gcc' in de terminal (geen aanhalingstekens).
  11. Als "gcc" al is geïnstalleerd, ziet u "gcc: fatale fout: geen invoerbestand"
  12. Nu kunt u 'make' in de terminal typen. Als "make" al is geïnstalleerd, ziet u "make: *** geen doel opgegeven en geen makefile gevonden. hou op."
  13. Volgend type 'git', en als "git" al is geïnstalleerd, zou je een aantal basis git-commando's moeten zien.
  14. Nu hebben we enkele toolchains nodig (er zijn verschillende soorten, waaronder GCC, Linaro en een handvol aangepaste). Sommige apparaten kunnen verschillende toolchains vereisen, bijvoorbeeld, niet alle apparaatkernels zullen opstarten of compileren met GCC.

Voor ARM-apparaten

We zullen hiervoor GCC 4.7 gebruiken.

  1. Open de Linux-terminal en typ: mkdir kernel
  2. Typ nu: cd kernel
  3. (het hoeft geen 'kernel' te zijn, dit is omwille van de eenvoud, je kunt het noemen wat je maar wilt.)
  4. Typ nu: git clone //android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7

Voor ARM 64-apparaten

U hebt een 64-bits kernelcompiler nodig voor ARM 64-apparaten, bijvoorbeeld aarch64.

De bronbestanden voor uw apparaat ophalen

Dit is een lastig onderdeel, omdat je een GitHub-repo moet vinden die je kernelbron host. Je moet er natuurlijk naar zoeken, hoogstwaarschijnlijk is het te vinden op XDA-forums.

Hier is een voorbeeld kernelbron Git.

Linksboven zou u "Branch: Completed by xxxx" moeten zien.

Er zijn verschillende versies van een kernel / project, meestal gescheiden door "Testing", "Beta", "Final Release", etc.

De kernelmappen zijn meestal als volgt:

  • / arch / arm / configs : dit bevat verschillende configuratiebestanden voor het apparaat, zoals regelaars, enz.
  • / output / arch / arm / boot / : hier wordt de zimage opgeslagen.
  • build.sh : een script dat het bouwproces vereenvoudigt.
  • /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2 : dit is meestal een toolchain in de kernelbron, waardoor het gemakkelijker te vinden is.

Je moet je kernelbron downloaden.

Open de Linux-terminal en zorg ervoor dat u zich in de kernelmap bevindt die u eerder hebt gemaakt (cd-kernel).

Typ vervolgens terminal: "git clone" URL van de github-kernel "-b" naam van de tak "

Bijvoorbeeld: "git clone //github.com/atxoxx/android_ke…amsung_msm8974 -b xenomTW"

De kernel bouwen

Om het eenvoudiger te maken, kunt u naar de locatie in de bestandsverkenner navigeren. Dit moet / home / user ID / kernel zijn (of hoe je de kernelmap ook noemt).

Je zou binnen twee mappen moeten zien, voor de toolchain en de kernelbron. Ga naar de kernelbronmap.

Voor ARM-apparaten

Typ de volgende opdrachten in een terminal:

 #! / bin / bash export ARCH = arm export CROSS_COMPILE = mkdir output make -C $ (pwd) O = output "naam van defconfig en variant indien nodig" make -j4 -C $ (pwd) O = output 

Hier is een overzicht van wat deze opdrachten doen om dit in de toekomst eenvoudiger te maken.

  • #! / bin / bash: laat het script uitvoeren in shell-opdracht
  • export ARCH = arm: definiëren welk kernelarchitectuurtype het is (bijvoorbeeld arm64 enz.)
  • export CROSS_COMPILE = : Zoek waar de toolchain zich bevindt. Het moet overeenkomen met het exacte pad en het streepje aan het einde is echt verplicht.
  • mkdir output: dit creëert een map voor het opslaan van de gecompileerde zimage
  • make -C $ (pwd) O = output : defconfig definiëren voor het begeleiden van kernelcompilatie.
  • make -j4 -C $ (pwd) O = output : Wanneer het bouwproces begint, vertelt -j # hoe snel het moet proberen te compileren. Doorgaans stelt u dit nummer in op basis van uw CPU. Als u bijvoorbeeld -j32 instelt op een budget-CPU, zou dit waarschijnlijk enorme instabiliteit veroorzaken.
  • cp output / arch / arm / boot / Image $ (pwd) / arch / arm / boot / zImage : Dit is voor het verplaatsen van beeld naar een tweede pad.

Een ander voorbeeld:

 #! / 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 make -C $ (pwd) O = output msm8974_sec_defconfig VARIANT_DEFCONFIG = msm8974_sec_ks01_skt_defconfig SELINUX_DEFCONFIG = selinux_defconfig make -j4 -C $ (pwd) O = output cp output / arch / arm / boot / Image $ (pwd) / Image $ (pwd) 

Voor ARM 64-apparaten

 #! / bin / bash export ARCH = arm64 export CROSS_COMPILE = "pad naar je toolchain" (het moet eindigen met zoiets als "nameofarch-something-") mkdir output make -C $ (pwd) O = output "naam van defconfig en variant indien nodig "make -j4 -C $ (pwd) O = output 

Voor Mediatek (MTK) -apparaten

 #! / bin / bash export CROSS_COMPILE = "pad naar uw toolchain" (deze moet eindigen met zoiets als "nameofarch-something-") export ARCH = arm ARCH_MTK_PLATFORM = maak "naam van defconfig en variant indien nodig" make -j4 

Wanneer u de benodigde stappen voor uw kernelarchitectuur hebt voltooid, kunt u de terminal typen: sudo bash build.sh

U voert dan uw gebruikerswachtwoord in en het compilatieproces begint.

Het kan een tijdje duren, maar meestal niet erg lang, het compileren van een kernel is niet hetzelfde als het compileren van een volledige Android-ROM. Dit is echt CPU-afhankelijk - het duurt bijvoorbeeld ongeveer 10 minuten om een ​​AMD Phenom X4 3, 4 GHz met 8 GB RAM te compileren van begin tot einde.

Wanneer het klaar is, zou het u moeten informeren met een bericht als "zimage is klaar".

ARM- en ARM64-apparaten

Ga naar "/ Output / arch / arm / boot /" om je zimage te vinden.

Mediatek-apparaten

Ga naar "/ arch / arm / boot /" om je zimage te vinden.

Niet alle kernel-builds resulteren in een Zimage-bestand, het kan soms worden gebouwd als andere afbeeldingsindelingen.

Belangrijk: als u opnieuw gaat compileren, is het raadzaam om de opdrachten make clean in te voeren en mrproper te maken voordat u opnieuw aan het compileerproces begint.

De kernel opstarten

U kunt kiezen uit twee opties.

U kunt de anykernel-methode gebruiken (zoals gedefinieerd door XDA-gebruiker @ osm0sis in deze XDA-thread). U moet de volledige zelfstudie lezen, maar een samenvatting van de stappen is als volgt:

  1. Plaats zImage in de root (dtb en / of dtbo zouden hier ook moeten zijn voor apparaten die aangepaste vereisen, elk zal terugvallen op het origineel indien niet inbegrepen)
  2. Plaats alle benodigde ramdisk-bestanden in / ramdisk en modules in / modules (met het volledige pad zoals / modules / system / lib / modules)
  3. Plaats alle vereiste patchbestanden (meestal gedeeltelijke bestanden die bij opdrachten horen) in / patch
  4. Wijzig de anykernel.sh om de naam van uw kernel, de locatie van de opstartpartitie, machtigingen voor opgenomen ramdisk-bestanden toe te voegen en methoden te gebruiken voor eventuele vereiste ramdisk-wijzigingen (plaats eventueel ook banner- en / of versiebestanden in de root om deze tijdens flash te laten weergeven)
  5. `zip -r9 UPDATE-AnyKernel2.zip * -x .git README.md * placeholder`

De andere beschikbare methode is het uitpakken van de boot.img van hetzelfde ROM (zoals CM, TouchWiz, EMUI, etc.) en dezelfde Android-versie. Je zou dan de Zimage ruilen. Nogmaals, dit is een heel ingewikkeld proces en u moet de exacte zelfstudie lezen, maar een samenvatting van de stappen is:

  1. Uitpakken.
  2. Gebruik de opdrachtregel "unpackimg" of sleep de afbeelding eenvoudigweg naar beneden. Dit splitst de afbeelding en pakt de ramdisk uit in een submap.
  3. Wijzig de ramdisk zoals u wilt.
  4. Het repackimg batch-script vereist geen invoer en combineert eenvoudig de eerder gesplitste zImage met de nieuw verpakte aangepaste ramdisk met behulp van alle originele afbeeldingsinformatie (die ook werd gesplitst en opgeslagen).
  5. Met het batch-script voor opschonen wordt de map teruggezet naar de oorspronkelijke status, waarbij de mappen split_img + ramdisk en alle nieuwe ingepakte ramdisk- of afbeeldingsbestanden worden verwijderd.

Voordat u uw kernel flasht, moet u een back-up van uw stock boot.img maken en vervolgens uw kernel flashen om te zien of hiermee uw Android-systeem kan opstarten.

Functies toevoegen aan uw kernel

Het toevoegen van functies aan uw kernel is een geweldige manier om het wat pittiger te maken. Er zijn veel dingen die je kunt aanpassen, zoals CPU-regelaars, IO-planners, overklokken van de GPU, audio-verbeteringen, etc.

Een voorbeeld voor het toevoegen van een gouverneur is hier (deze gouverneur heeft de codenaam Intellimm).

We kunnen in de eerste 2 tekstvakken zien dat in "arch / arm / configs /" "msm8974_sec_defconfig" en "cm_msm8974_sec_defconfig" zijn gewijzigd.

Tussen de regels 140 en 141 van deze bestanden is deze tekst toegevoegd: "CONFIG_CPU_FREQ_GOV_INTELLIMM = y"

(Deze regel is voor het inschakelen van Intellimm wanneer u uw kernel compileert)

Dezelfde techniek is van toepassing op de andere tekstvakken (wat is toegevoegd en verwijderd en de locatie)

Afhankelijk van de functies die u toevoegt, kunnen meer of minder bestanden worden gewijzigd, toegevoegd of verwijderd.

Dus kort samengevat, een Commit laat je alle veranderingen zien die zijn gemaakt en al het andere!

Algemene tips en trucs

Hoe de kernelnaam en -versie te wijzigen:

De eenvoudige methode:

Bewerk deze regel in uw defconfig-bestand:

 "CONFIG_LOCALVERSION =" - "after - in uw defconfig 

Voorbeeld: CONFIG_LOCALVERSION = ”- XenomTW-3.2.6 ″

De geavanceerde methoden:

Navigeer naar de Makefile in de hoofdmap van uw kernelbron.

Voeg deze regels toe:

 CONFIG_LOCALVERSION = "nameofyourkernel" LOCALVERSION = "versionofyourkernel" 

Wijzig NIET de regels Versie, PatchLevel, Sublevel of Extraversion.

Alternatieve methode:

Ga naar scripts / mkcompile_h en voeg deze regels toe:

 LINUX_COMPILE_BY = "nameofyourchoice" LINUX_COMPILE_HOST = "nameofyourchoice" 

PATH-problemen oplossen:

Als je de fout "Is je pad correct?" Tegenkomt, probeer dit dan in de Linux-terminal:

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

Toegang tot uw Ubuntu-mappen vanuit Windows 10

Uw pad naar Ubuntu moet meestal zijn:

C: \ Users ”NAME” \ AppData \ Local \ Packages \ CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc \ LocalState \ rootfs \ home

Maar u moet bestanden niet rechtstreeks vanuit Windows bewerken, omdat dit meestal de machtigingen op hen verbreekt - u zou dan de machtigingen opnieuw moeten instellen vanuit de Linux-terminal.

Interessante Artikelen