วิธีสร้าง Custom Kernel ของ Android
หากคุณเคยสงสัยว่าจะสร้างเคอร์เนล Android ได้อย่างไรคู่มือนี้เหมาะสำหรับคุณ การสร้างเคอร์เนลของคุณเองอาจเป็นประสบการณ์ที่คุ้มค่าเนื่องจากจะทำให้คุณสามารถควบคุมอุปกรณ์แอนดรอยด์ได้มากขึ้นจาก CPU, RAM, GPU ถึงแม้แบตเตอรี่
นี่เป็นกระบวนการที่เกี่ยวข้องกับการคอมไพล์และคำสั่งคอนโซลมาก แต่ถ้าคุณคุ้นเคยกับลีนุกซ์ (หรือควรทำตามคำแนะนำ) ก็ควรจะเป็นปัญหา
โปรดทราบว่าคู่มือนี้มีไว้สำหรับอุปกรณ์ที่ไม่ใช่ Mediatek Appual มีคู่มือการรวบรวมเคอร์เนลเฉพาะสำหรับอุปกรณ์ Android ที่ใช้ Mediatek อยู่ที่นี่: วิธีการสร้างเคอร์เนล Android จาก Mediatek
บทความที่น่าสนใจอื่น ๆ ได้แก่ :
- วิธีการสร้างรอมที่กำหนดเองจากโครงการโอเพนซอร์สของ Android | จุด 2
- วิธีการใช้ UI Android System ด้วยตนเอง
หากคุณกำลังสร้างเคอร์เนล แบบกำหนดเอง คุณจะต้องโคลนเคอร์เนลจาก Git พร้อมกับคำสั่งที่ให้ไว้ด้านล่าง แต่ถ้าคุณกำลังรวบรวม สต็อก เคอร์เนลคุณจำเป็นต้องทราบว่าจะหาเคอร์เนลต้นฉบับจากแหล่งใด (สำหรับเหตุผลทุกประเภท)
แหล่งเคอร์เนลดั้งเดิมสำหรับแบรนด์ต่างๆ:
- LG
- ซัมซุง
- เอชทีซี
- OnePlus
- โมโตโรล่า
- โซนี่
สำหรับการดาวน์โหลดเคอร์เนลให้ใช้ git clone หรือ ดาวน์โหลดไฟล์ tarball และดึงข้อมูล
นี่คือคำสั่ง git:
git clone -b
-หรือ-
tar - xvf
ตัวอย่างเช่นนี่เป็นคำสั่งให้จับเคอร์เนล Nexus 6P Nougat 3.10 ล่าสุดจาก Google:
git clone -b android-msm-angler-3.10-nougat-mr2 https://android.googlesource.com/kernel/msm/ angler
ควรทำสำเนา kernel / msm repo ลงในโฟลเดอร์ angler และจะเช็คเอาต์ android-msm-angler-3.10-nougat-mr2 โดยอัตโนมัติ
ตอนนี้เนื่องจากอุปกรณ์ Android ส่วนใหญ่ใช้ ARM เราจำเป็นต้องใช้คอมไพเลอร์ที่จะกำหนดเป้าหมายอุปกรณ์ ARM ซึ่งหมายความว่าโฮสต์ / เครื่องแปลภาษาพื้นเมืองจะไม่ทำงาน จนกว่า คุณจะรวบรวมข้อมูลบนอุปกรณ์ ARM อื่น คุณมีตัวเลือกน้อยที่นี่ คุณสามารถคอมไพล์ด้วยตัวคุณเอง ถ้าคุณทราบวิธีการ ใช้สิ่งที่ต้องการ Crosstool-NG หรือคุณสามารถดาวน์โหลดคอมไพเลอร์ที่สร้างไว้ล่วงหน้าได้เช่นเดียวกับที่ Google จัดเตรียม Arm 32 บิตและ Arm64
ก่อนที่จะดาวน์โหลดคอมไพเลอร์ที่สร้างไว้ล่วงหน้าคุณจำเป็นต้องทราบสถาปัตยกรรมที่แน่นอนของอุปกรณ์ของคุณดังนั้นใช้แอปพลิเคชันเช่น CPU-Z เพื่อตรวจสอบ
toolchain ที่เป็นที่นิยมอื่น ๆ จะเป็น UberTC แต่สำหรับเมล็ดใด ๆ ที่สูงกว่า 4.9 คุณจะต้องแก้ไขปัญหาเหล่านี้และการรวบรวมข้อมูลด้วย toolchain ของ Google เป็นแนวทางที่ดีที่สุด
ในกรณีใด ๆ เมื่อคุณได้ตัดสินใจเกี่ยวกับ toolchain แล้วคุณจำเป็นต้องทำโคลนนิ่ง
git clone
ตอนนี้ชี้ Makefile ไปยังคอมไพเลอร์ของคุณ เรียกใช้จากภายในโฟลเดอร์ toolchain
- ส่งออก CROSS_COMPILE = $ (pwd) / bin / -
ตัวอย่าง:
- export CROSS_COMPILE = $ (pwd) / bin / aarch64-linux-android-
ตอนนี้บอก Makefile เกี่ยวกับสถาปัตยกรรมอุปกรณ์ของคุณ
- ส่งออก ARCH = && การส่งออก SUBARCH =
ตัวอย่าง:
- ส่งออก ARCH = arm64 && การส่งออก SUBARCH = arm64
ค้นหา defconfig ที่เหมาะสมโดยไปที่โฟลเดอร์ arch // configs ภายในแหล่งเคอร์เนล (เช่น arch / arm64 / configs)
จากนั้นหาไฟล์ config ของนักพัฒนาซอฟต์แวร์ที่เหมาะสมสำหรับเคอร์เนลที่คุณกำลังสร้าง โดยทั่วไปแล้วควรอยู่ในรูป _defconfig หรือ _defconfig Defconfig จะสั่งให้คอมไพเลอร์ทราบถึงตัวเลือกใดที่จะรวมไว้ในเคอร์เนล
คุณอาจพบการกำหนดค่าทั่วไปของ Qualcomm โดยปกติจะเป็นสิ่งที่คล้ายกัน (msm-perf_defconfig, msmcortex-perf_defconfig)
การสร้างเคอร์เนล
รหัส:
ทำความสะอาด
ทำให้ mrproper
ทำ
make -j $ (nproc -all)
เมื่อคำสั่งเหล่านี้สำเร็จคุณควรจะมีไฟล์ Image, Image-dtb, Image.gz หรือ Image.gz-dtb ในตอนท้าย
PRO TIP: หากปัญหาเกิดขึ้นกับคอมพิวเตอร์หรือแล็ปท็อป / โน้ตบุ๊คคุณควรลองใช้ซอฟต์แวร์ Reimage Plus ซึ่งสามารถสแกนที่เก็บข้อมูลและแทนที่ไฟล์ที่เสียหายได้ วิธีนี้ใช้ได้ผลในกรณีส่วนใหญ่เนื่องจากปัญหาเกิดจากความเสียหายของระบบ คุณสามารถดาวน์โหลด Reimage Plus โดยคลิกที่นี่หากคำสั่งเหล่านี้ล้มเหลวคุณอาจต้องระบุไดเร็กทอรีเอาต์พุตเมื่อสร้างเคอร์เนล CAF ใหม่โดยทำดังนี้
mkdir -p ออก
ทำให้ O = ออกสะอาด
ทำให้ O = ออก mrproper
ทำให้ O = ออก
ทำให้ O = out -j $ (nproc -all)
หากยังไม่ต้องการทำงานสิ่งที่เสียหาย - ตรวจสอบส่วนหัวหรือนำมาใช้กับนักพัฒนาเคอร์เนล
ถ้าเคอร์เนลสำเร็จแล้วเรียบเรียงตอนนี้คุณต้องแฟลช มีสองวิธีในการทำเช่นนี้คือคุณสามารถแกะกล่องและถ่ายโอนภาพบูตได้โดยใช้ Android Image Kitchen หรือ AnyKernel2
นอกจากนี้ยังอาจมีความแตกต่างบางอย่างขึ้นอยู่กับอุปกรณ์เฉพาะด้วยเช่นกันคุณจำเป็นต้องขอให้นักพัฒนาซอฟต์แวร์ของคุณได้รับความช่วยเหลือหากเป็นกรณีนี้
กระพริบเคอร์เนลใน Android Image Kitchen
ดาวน์โหลด Android Image Kitchen
ดึงข้อมูลภาพบูตอุปกรณ์ Android ของคุณจากภาพที่มีอยู่ล่าสุด (ไม่ว่าจะเป็นสต็อกหรือรอมที่กำหนดเอง)
ตอนนี้แกะรูปโดยใช้รหัสนี้:
unpackimg.sh .img
จากนั้นหาไฟล์ zImage และแทนที่ด้วยภาพเคอร์เนลที่คอมไพล์แล้ว เปลี่ยนชื่อเป็นสิ่งที่อยู่ในรูปบูต
ตอนนี้เรียกใช้รหัสนี้เพื่อถ่ายภาพใหม่:
repackimg.sh
ตอนนี้คุณสามารถแฟลชภาพบูตใหม่โดยใช้ fastboot, TWRP ฯลฯ
กระพริบเคอร์เนลใน AnyKernel2
ดาวน์โหลด AnyKernel2 ล่าสุด
ใช้แพทช์นี้เพื่อล้างข้อมูลไฟล์สาธิตทั้งหมด
wget https://github.com/nathanchance/AnyKernel2/commit/addb6ea860aab14f0ef684f6956d17418f95f29a.diff
patch -p1 <addb6ea860aab14f0ef684f6956d17418f95f29a.diff
rm addb6ea860aab14f0ef684f6956d17418f95f29a.diff
ตอนนี้วางภาพเคอร์เนลของคุณในรากของไฟล์และเปิด anykernel.sh เพื่อปรับเปลี่ยนค่าเหล่านี้:
- สตริง : ชื่อเคอร์เนลของคุณ
- ชื่อ # : แสดงชื่อรหัสอุปกรณ์ทั้งหมดของคุณ (จาก /system/build.prop: ro.product.device, ro.build.product)
- block : เส้นทางการบูตของคุณใน fstab ของคุณ fstab สามารถเปิดได้จากรากของอุปกรณ์ของคุณและจะมีลักษณะดังนี้: https://android.googlesource.com/devr/fstab.angler
คอลัมน์แรกคือค่าที่คุณต้องการกำหนดให้บล็อก
ตอนนี้อีกซิปเคอร์เนลและแฟลชใน AnyKernel2:
zip -r9 kernel.zip * -x README.md kernel.zip
ถูกเตือนว่า kernel จำนวนมากจาก CAF รวมถึงสคริปต์ Python ที่จะเรียกใช้ - Werror ซึ่งโดยทั่วไปจะทำให้เกิดการสร้างของคุณเพื่อโยนข้อผิดพลาดที่เล็กที่สุดของสิ่งต่างๆ ดังนั้นสำหรับเวอร์ชัน GCC ที่สูงขึ้น (ซึ่งรวมถึงคำเตือนเพิ่มเติม) คุณจะต้องทำการเปลี่ยนแปลง 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 =
การใช้ GCC toolchain ที่สูงกว่า (5.x, 6.x, 7.x หรือ 8.x) จะทำให้คุณต้อง nuke สคริปต์ GCC wrapper ข้างต้นและใช้ไฟล์ส่วนหัวแบบ GCC (เลือกข้อมูลต่อไปนี้หากคุณมี /linux/compiler-gcc#.h file):
3.4 / 3.10: https://git.kernel.org/pub/scm/linux9bb8868d562a8a
3.18: https://git.kernel.org/pub/scm/linux9f67d656b1ec2f
แม้ว่าคุณจะได้รับการแจ้งเตือนเป็นจำนวนมาก แต่ก็ไม่จำเป็นต้องแก้ไข (ปกติ)
เคอร์เนลของคุณถูกสร้างขึ้นและพร้อมที่จะไปแล้ว!
PRO TIP: หากปัญหาเกิดขึ้นกับคอมพิวเตอร์หรือแล็ปท็อป / โน้ตบุ๊คคุณควรลองใช้ซอฟต์แวร์ Reimage Plus ซึ่งสามารถสแกนที่เก็บข้อมูลและแทนที่ไฟล์ที่เสียหายได้ วิธีนี้ใช้ได้ผลในกรณีส่วนใหญ่เนื่องจากปัญหาเกิดจากความเสียหายของระบบ คุณสามารถดาวน์โหลด Reimage Plus โดยคลิกที่นี่