Hur man bygger en anpassad Android-kärna
Om du någonsin undrat hur du bygger en Android-kärna, är den här guiden till dig. Att bygga din egen kärna kan vara en givande upplevelse, eftersom det ger dig större kontroll över din Android-enhet, från CPU, RAM, GPU till även batteriet.
Det här är en väldigt praktisk process som innebär en hel del kompilering och konsolkommandon, men om du är bekant med Linux (eller bra i följande riktningar), borde det inte vara något problem.
Observera att den här guiden är för icke-Mediatek-enheter. Appual's har en kärnkompilerande guidespecifik allierad för Mediatek-baserade Android-enheter här: Hur man bygger Mediatek Android-kärnan från källan
Andra Appuals artiklar av intresse är:
- Hur man bygger anpassad ROM från Android Open Source Project | Pt. 2
- Hur man manuellt tema Android System UI
Om du bygger en anpassad kärna behöver du bara klona kärnan från Git med kommandon som anges nedan. Men om du sammanställer en lagerkärna måste du veta var du ska få den ursprungliga kärnan från källan (för alla möjliga orsaker).
Originalkärnkällor för olika märken:
- LG
- Samsung
- HTC
- OnePlus
- Motorola
- Sony
För att ladda ner kärnan, använd antingen en git klon eller ladda ner tarball filen och extrahera den.
Här är kommandot git:
git klon -b
-ELLER-
tjära -xvf
Så som ett exempel skulle det här vara kommandot att fånga den senaste Nexus 6P Nougat 3.10-kärnan från Google:
git klon -b android-msm-angler-3.10-nougat-mr2 https://android.googlesource.com/kernel/msm/ angler
Detta borde klona kärnan / msm repo i en ängelkatalog och automatiskt checka android-msm-angler-3.10-nougat-mr2.
Nu eftersom de flesta Android-enheter är ARM-baserade måste vi använda en kompilator som riktar sig mot ARM-enheter - det betyder att en värd / inbyggd kompilator inte fungerar, om du inte samlar på en annan ARM-enhet. Du har några alternativ här. Du kan antingen sammanställa en själv om du vet hur du använder något som Crosstool-NG. Alternativt kan du ladda ner en förbyggd kompilator - som den som Google tillhandahåller för Arm 32-bit och Arm64.
Innan du laddar ned en förbyggd kompilator måste du veta din exakta arkitektur, så använd en app som CPU-Z för att bestämma den.
En annan populär verktygskedja skulle vara UberTC - men för alla kärnor som är högre än 4, 9 måste du klistra in dem, och kompilering med Googles verktygslåda är först bästa praxis.
När du än har bestämt dig för verktygslåda måste du klona det.
git klon
Peka nu Makefile på din kompilator och kör den från verktygsmappen .
- exportera CROSS_COMPILE = $ (pwd) / bin / -
Exempel:
- exportera CROSS_COMPILE = $ (pwd) / bin / aarch64-linux-android-
Nu berätta Makefile din enhet arkitektur.
- export ARCH = && export SUBARCH =
Exempel:
- export ARCH = arm64 && export SUBARCH = arm64
Leta reda på rätt defconfig genom att navigera till arch // configs-mappen i kärnkällan (t.ex. arch / arm64 / configs).
Därefter hitta utvecklarens lämpliga konfigurationsfil för kärnan du bygger. Det bör normalt vara i form av _defconfig eller _defconfig. Defconfig kommer att instruera kompilatorn vilka alternativ som ska inkluderas i kärnan.
Generic Qualcomm configs kan också hittas, dessa brukar vara något liknande (msm-perf_defconfig, msmcortex-perf_defconfig).
Bygga kärnan
Koda:
rena
gör mrproper
göra
gör -j $ (nproc -all)
När dessa kommandon är framgångsrika bör du ha: en Image, Image-dtb, Image.gz eller Image.gz-dtb-fil i slutet.
PRO TIPS: Om problemet är med din dator eller en bärbar dator, bör du försöka använda Reimage Plus-programvaran som kan skanna förvaret och ersätta korrupta och saknade filer. Detta fungerar i de flesta fall där problemet uppstått på grund av systemkorruption. Du kan ladda ner Reimage Plus genom att klicka härOm de här kommandona misslyckades kan du behöva ange utdatakatalog när du skapar en ny CAF-baserad kärna, så här:
mkdir -p ut
gör O = ut ren
gör O = ut mrproper
gör O = ut
gör O = ut -j $ (nproc -all)
Om det fortfarande inte vill fungera är något trasigt - kolla dina rubriker eller ta upp det med kärnans utvecklare.
Om kärnan lyckades kompileras behöver du nu blinka den. Det finns två olika sätt att göra detta - du kan packa upp och ompaketera startbilden med antingen Android Image Kitchen eller AnyKernel2.
Det kan också finnas nyanser beroende på specifika enheter - du måste fråga din enhetsutvecklare om hjälp, om så är fallet.
Blinkar kärnan i Android Image Kitchen
Hämta Android Image Kitchen
Extrahera din Android-enhetens startbild från den senaste tillgängliga bilden (oavsett lager eller anpassad ROM).
Packa nu upp bilden med den här koden:
unpackimg.sh .img
Nästa hitta zImage-filen och ersätt den med din kompilerade kärnbild - byt namn på det som fanns i startbilden.
Kör nu den här koden för att ompaketera bilden:
repackimg.sh
Nu kan du blinka den nya startbilden med snabbbåt, TWRP, etc.
Blinkar kärnan i AnyKernel2
Hämta den senaste AnyKernel2
Applicera den här patchen för att tömma alla demofilerna.
wget https://github.com/nathanchance/AnyKernel2/commit/addb6ea860aab14f0ef684f6956d17418f95f29a.diff
patch -p1 <addb6ea860aab14f0ef684f6956d17418f95f29a.diff
rm addb6ea860aab14f0ef684f6956d17418f95f29a.diff
Placera nu din kärnbild i filens rot och öppna anykernel.sh för att ändra dessa värden:
- sträng : ditt kärnnamn
- namn # : Lista alla enhetens kodnamn (från /system/build.prop: ro.product.device, ro.build.product)
- block : Din startbilds sökväg i din fstab. Fstab kan öppnas från roten på din enhet och det kommer att se ut så här: https://android.googlesource.com/devr/fstab.angler
Den första kolumnen är det värde du vill ställa in blocket till.
Zip igen kärnan och blinka den i AnyKernel2:
zip-r9 kernel.zip * -x README.md kernel.zip
Varna för att många kärnor från CAF inkluderar ett Python-skript som kommer att utlösa -Werror, vilket i grunden gör att din byggnad kasta fel på det minsta av sakerna. Så för högre GCC-versioner (som innehåller fler varningar) behöver du vanligtvis göra ändringar i 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 =
Om du använder en högre GCC-verktygskedja (5.x, 6.x, 7.x eller 8.x) krävs det att du koda GCC wrapper-skriptet som ovan och använda en gemensam GCC-headerfil (välj följande om du har en inkludera /linux/compiler-gcc#.h-filen):
3, 4 / 3, 10: https://git.kernel.org/pub/scm/linux9bb8868d562a8a
3.18: https://git.kernel.org/pub/scm/linux9f67d656b1ec2f
Även om du får många varningar, är de inte nödvändiga för att fixa (vanligtvis).
Din kärna är byggd och redo att gå!
PRO TIPS: Om problemet är med din dator eller en bärbar dator, bör du försöka använda Reimage Plus-programvaran som kan skanna förvaret och ersätta korrupta och saknade filer. Detta fungerar i de flesta fall där problemet uppstått på grund av systemkorruption. Du kan ladda ner Reimage Plus genom att klicka här