วิธีสร้าง Custom Kernel ของ Android

หากคุณเคยสงสัยว่าจะสร้างเคอร์เนล Android ได้อย่างไรคู่มือนี้เหมาะสำหรับคุณ การสร้างเคอร์เนลของคุณเองอาจเป็นประสบการณ์ที่คุ้มค่าเนื่องจากจะทำให้คุณสามารถควบคุมอุปกรณ์แอนดรอยด์ได้มากขึ้นจาก CPU, RAM, GPU ถึงแม้แบตเตอรี่

นี่เป็นกระบวนการที่เกี่ยวข้องกับการคอมไพล์และคำสั่งคอนโซลมาก แต่ถ้าคุณคุ้นเคยกับลีนุกซ์ (หรือควรทำตามคำแนะนำ) ก็ควรจะเป็นปัญหา

โปรดทราบว่าคู่มือนี้มีไว้สำหรับอุปกรณ์ที่ไม่ใช่ Mediatek Appual มีคู่มือการรวบรวมเคอร์เนลเฉพาะสำหรับอุปกรณ์ Android ที่ใช้ Mediatek อยู่ที่นี่: วิธีการสร้างเคอร์เนล Android จาก Mediatek

บทความที่น่าสนใจอื่น ๆ ได้แก่ :

  • วิธีการสร้างรอมที่กำหนดเองจากโครงการโอเพนซอร์สของ Android | จุด 2
  • วิธีการใช้ UI Android System ด้วยตนเอง

หากคุณกำลังสร้างเคอร์เนล แบบกำหนดเอง คุณจะต้องโคลนเคอร์เนลจาก Git พร้อมกับคำสั่งที่ให้ไว้ด้านล่าง แต่ถ้าคุณกำลังรวบรวม สต็อก เคอร์เนลคุณจำเป็นต้องทราบว่าจะหาเคอร์เนลต้นฉบับจากแหล่งใด (สำหรับเหตุผลทุกประเภท)

แหล่งเคอร์เนลดั้งเดิมสำหรับแบรนด์ต่างๆ:

  • Google
  • 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 โดยคลิกที่นี่

Facebook Twitter Google Plus Pinterest