Hoe een aangepaste Android-kernel te bouwen
Als je je ooit hebt afgevraagd hoe je een Android-kernel moet bouwen, is deze gids iets voor jou. Het bouwen van je eigen kernel kan een lonende ervaring zijn, omdat je hierdoor meer controle hebt over je Android-apparaat, van CPU, RAM, GPU tot zelfs de batterij.
Dit is een zeer praktisch proces dat veel compilatie- en consoleopdrachten vereist, maar als u bekend bent met Linux (of goed in de volgende richtingen), zou dit geen probleem mogen zijn.
Let op: deze handleiding is bedoeld voor niet-Mediatek-apparaten. Appual's heeft hier een kernel compilerende gidsspecifieke bondgenoot voor op Mediatek gebaseerde Android-apparaten: Hoe Mediatek Android Kernel te bouwen vanuit Source
Andere artikelen van Appual zijn onder meer:
- Hoe Custom ROM te maken van Android Open Source Project | Punt 2
- Handmatig de gebruikersinterface van het Android-systeem onder de aandacht brengen
Als je een aangepaste kernel aan het bouwen bent, moet je de kernel vanuit Git klonen met onderstaande commando's. Maar als je een stock- kernel compileert, moet je weten waar je de originele kernel van de bron kunt halen (om allerlei redenen).
Originele kernelbronnen voor verschillende merken:
- LG
- Samsung
- HTC
- OnePlus
- Motorola
- Sony
Gebruik voor het downloaden van de kernel een git-kloon of download het tarball-bestand en pak het uit.
Hier is het commando git:
git clone -b
-OF-
tar -xvf
Dus als voorbeeld zou dit het commando zijn om de nieuwste Nexus 6P Nougat 3.10 kernel van Google te pakken:
git clone -b android-msm-angler-3.10-nougat-mr2 https://android.googlesource.com/kernel/msm/ visser
Dit zou de kernel / msm-repo moeten klonen in een vissersmap en automatisch de Android-msm-angler-3.10-nougat-mr2 moeten afrekenen.
Omdat de meeste Android-apparaten op ARM zijn gebaseerd, moeten we een compiler gebruiken die op ARM-apparaten is gericht. Dit betekent dat een host / native-compiler niet zal werken, tenzij u op een ander ARM-apparaat compileert. Je hebt hier een paar opties. Je kunt er zelf een compileren als je weet hoe, door zoiets als Crosstool-NG te gebruiken. U kunt ook een vooraf samengestelde compiler downloaden, zoals die door Google wordt geleverd voor Arm 32-bit en Arm64.
Voordat u een vooraf samengestelde compiler downloadt, moet u de exacte architectuur van uw apparaat kennen, dus gebruik een app zoals CPU-Z om deze te bepalen.
Een andere populaire toolchain zou UberTC zijn - maar voor elke kernel die hoger is dan 4.9, moet je ze patchen en het samenstellen van de toolchain van Google eerst is de beste methode.
In ieder geval, als je eenmaal hebt besloten over de toolchain, moet je het klonen.
git clone
Wijs nu de Makefile naar uw compiler, vanuit de toolchain-map .
- exporteren CROSS_COMPILE = $ (pwd) / bin / -
Voorbeeld:
- exporteer CROSS_COMPILE = $ (pwd) / bin / aarch64-linux-android-
Vertel de Makefile nu uw apparaatarchitectuur.
- exporteer ARCH = && export SUBARCH =
Voorbeeld:
- export ARCH = arm64 && export SUBARCH = arm64
Lokaliseer uw juiste defconfig door naar de arch // configs-map in de kernelbron te gaan (bijv. Arch / arm64 / configs).
Zoek vervolgens het juiste configuratiebestand van de ontwikkelaar voor de kernel die je aan het bouwen bent. Het zou typisch in de vorm van _defconfig of _defconfig moeten zijn. De defconfig geeft de compiler opdracht welke opties in de kernel moeten worden opgenomen.
Generieke Qualcomm-configs kunnen ook worden gevonden, deze zullen meestal iets zijn als (msm-perf_defconfig, msmcortex-perf_defconfig).
De kernel bouwen
Code:
maak schoon
maken mrproper
maken
make -j $ (nproc -all)
Wanneer deze opdrachten succesvol zijn, moet u aan het einde beschikken over: een Image-, Image-dtb-, Image.gz- of Image.gz-dtb-bestand.
PRO TIP: Als het probleem zich voordoet met uw computer of een laptop / notebook, kunt u proberen de Reimage Plus-software te gebruiken die de opslagplaatsen kan scannen en corrupte en ontbrekende bestanden kan vervangen. Dit werkt in de meeste gevallen, waar het probleem is ontstaan door een systeembeschadiging. U kunt Reimage Plus downloaden door hier te klikkenAls die opdrachten zijn mislukt, moet je misschien de uitvoerdirectory opgeven bij het maken van een nieuwe op CAF gebaseerde kernel, zoals deze:
mkdir -p uit
maak O = schoon
maak O = out mrproper
maak O = uit
maak O = uit -j $ (nproc -all)
Als het nog steeds niet wil werken, is er iets kapot - controleer je headers of breng het met de kernel-ontwikkelaars ter sprake.
Als de kernel met succes is gecompileerd, moet u deze nu flashen. Er zijn twee verschillende manieren om dit te doen - je kunt het bootimage uitpakken en opnieuw inpakken met behulp van Android Image Kitchen of AnyKernel2.
Er kunnen ook enkele nuances zijn op basis van specifieke apparaten - u moet uw apparaatontwikkelaars om hulp vragen als dit het geval is.
Knippert de kernel in Android Image Kitchen
Android Image Kitchen downloaden
Pak de opstartinstallatiekopie van uw Android-apparaat uit met de meest recente beschikbare afbeelding (voorraad of aangepaste ROM).
Pak nu de afbeelding uit met behulp van deze code:
unpackimg.sh .img
Zoek vervolgens het zImage-bestand en vervang het door je gecompileerde kernel-image - wijzig de naam in de image van de boot.
Voer nu deze code uit om de afbeelding opnieuw in te pakken:
repackimg.sh
Nu kun je het nieuwe opstartscherm flashen met fastboot, TWRP, etc.
De kernel in AnyKernel2 flashen
Download de nieuwste AnyKernel2
Pas deze patch toe om alle demobestanden te verwijderen.
wget https://github.com/nathanchance/AnyKernel2/commit/addb6ea860aab14f0ef684f6956d17418f95f29a.diff
patch -p1 <addb6ea860aab14f0ef684f6956d17418f95f29a.diff
rm addb6ea860aab14f0ef684f6956d17418f95f29a.diff
Plaats nu je kernel afbeelding in de root van het bestand en open anykernel.sh om deze waarden te wijzigen:
- string : uw kernelnaam
- naam # : lijst met alle codenamen van uw apparaat (van /system/build.prop: ro.product.device, ro.build.product)
- block : het pad van je boot image in je fstab. De fstab kan worden geopend vanuit de hoofdmap van uw apparaat en het ziet er ongeveer zo uit: https://android.googlesource.com/devr/fstab.angler
De eerste kolom is de waarde waarvoor u het blok wilt instellen.
Pak nu de kernel opnieuw en knipper het in AnyKernel2:
zip -r9 kernel.zip * -x README.md kernel.zip
Wees gewaarschuwd dat veel kernels van CAF een Python-script bevatten dat -Werror activeert, wat er feitelijk toe leidt dat je build fouten bij de kleinste dingen veroorzaakt. Dus voor hogere GCC-versies (die meer waarschuwingen bevatten), moet u meestal wijzigingen aanbrengen in de Makefile:
diff --git a/Makefile b/Makefile
index 1aaa760f255f..bfccd5594630 100644
--- a/Makefile
+++ b/Makefile
@@ -326, 7 +326, 7 @@ include $(srctree)/scripts/Kbuild.include
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
-REAL_CC = $(CROSS_COMPILE)gcc
+CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar
NM = $(CROSS_COMPILE)nm
@@ -340, 10 +340, 6 @@ DEPMOD = /sbin/depmod
PERL = perl
CHECK = sparse
-# Use the wrapper for the compiler. This wrapper scans for new
-# warnings and causes the build to stop upon encountering them.
-CC = $(srctree)/scripts/gcc-wrapper.py $(REAL_CC)
-
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
-Wbitwise -Wno-return-void $(CF)
CFLAGS_MODULE =
Als u een hogere GCC-toolchain (5.x, 6.x, 7.x of zelfs 8.x) gebruikt, moet u het GCC-wrapperscript als hierboven instellen en een uniform GCC-headerbestand gebruiken (kies het volgende als u een include hebt /linux/compiler-gcc#.h bestand):
3.4 / 3.10: https://git.kernel.org/pub/scm/linux9bb8868d562a8a
3.18: https://git.kernel.org/pub/scm/linux9f67d656b1ec2f
Zelfs als je veel waarschuwingen krijgt, hoeven ze niet (meestal) te worden verholpen.
Je kernel is gebouwd en klaar voor gebruik!
PRO TIP: Als het probleem zich voordoet met uw computer of een laptop / notebook, kunt u proberen de Reimage Plus-software te gebruiken die de opslagplaatsen kan scannen en corrupte en ontbrekende bestanden kan vervangen. Dit werkt in de meeste gevallen, waar het probleem is ontstaan door een systeembeschadiging. U kunt Reimage Plus downloaden door hier te klikken