Làm thế nào để xây dựng một hạt nhân Android tùy chỉnh
Nếu bạn đã từng tự hỏi làm thế nào để xây dựng một hạt nhân Android, hướng dẫn này là dành cho bạn. Xây dựng hạt nhân của riêng bạn có thể là một kinh nghiệm bổ ích vì nó sẽ cung cấp cho bạn một mức độ kiểm soát lớn hơn trên thiết bị Android của bạn, từ CPU, RAM, GPU đến ngay cả pin.
Đây là một quá trình thực sự liên quan đến rất nhiều lệnh biên dịch và giao diện điều khiển, nhưng nếu bạn quen với Linux (hoặc theo các hướng dẫn sau đây) thì nó sẽ không có vấn đề gì.
Xin lưu ý hướng dẫn này dành cho các thiết bị không phải Mediatek. Appual có một hướng dẫn biên dịch hạt nhân cụ thể cho các thiết bị Android dựa trên Mediatek ở đây: Làm thế nào để xây dựng hạt nhân Android Mediatek từ nguồn
Các bài viết quan tâm khác của Appual bao gồm:
- Làm thế nào để xây dựng ROM tùy chỉnh từ dự án mã nguồn mở Android | Pt. 2
- Cách sử dụng giao diện người dùng hệ thống Android theo cách thủ công
Nếu bạn đang xây dựng một hạt nhân tùy chỉnh, bạn sẽ chỉ cần nhân bản hạt nhân từ Git với các lệnh được cung cấp dưới đây. Nhưng nếu bạn đang biên dịch kernel stock, bạn cần biết nơi lấy kernel ban đầu từ nguồn (vì tất cả các loại lý do).
Nguồn hạt nhân gốc cho các thương hiệu khác nhau:
- LG
- Samsung
- HTC
- OnePlus
- Motorola
- Sony
Để tải xuống hạt nhân, hãy sử dụng git clone hoặc tải xuống tệp tarball và giải nén nó.
Đây là lệnh git:
git clone -b
-HOẶC LÀ-
tar -xvf
Ví dụ, đây sẽ là lệnh để lấy hạt nhân Nexus 6P Nougat 3.10 mới nhất từ Google:
git clone -b android-msm-angler-3.10-nougat-mr2 https://android.googlesource.com/kernel/msm/ angler
Điều này sẽ sao chép kernel / msm repo vào thư mục angler và tự động kiểm tra android-msm-angler-3.10-nougat-mr2.
Vì hầu hết các thiết bị Android đều dựa trên ARM, chúng ta cần sử dụng một trình biên dịch sẽ nhắm vào các thiết bị ARM - điều này có nghĩa là một trình biên dịch chủ / không hoạt động, trừ khi bạn đang biên dịch trên một thiết bị ARM khác. Bạn có một vài tùy chọn ở đây. Bạn có thể tự biên dịch nếu bạn biết cách sử dụng thứ gì đó như Crosstool-NG. Ngoài ra, bạn có thể tải xuống trình biên dịch dựng sẵn - chẳng hạn như trình biên dịch Google cung cấp cho Arm 32 bit và Arm64.
Trước khi tải xuống trình biên dịch dựng sẵn, bạn cần biết kiến trúc chính xác của thiết bị của mình, vì vậy hãy sử dụng một ứng dụng như CPU-Z để xác định nó.
Một toolchain phổ biến khác sẽ là UberTC - nhưng đối với bất kỳ kernel nào cao hơn 4.9, bạn sẽ cần phải vá chúng, và biên dịch với toolchain của Google trước tiên là thực hành tốt nhất.
Trong mọi trường hợp, một khi bạn đã quyết định trên toolchain, bạn cần phải sao chép nó.
git clone
Bây giờ trỏ Makefile vào trình biên dịch của bạn, chạy nó từ bên trong thư mục toolchain .
- xuất CROSS_COMPILE = $ (pwd) / bin / -
Thí dụ:
- xuất CROSS_COMPILE = $ (pwd) / bin / aarch64-linux-android-
Bây giờ hãy nói cho Makefile kiến trúc thiết bị của bạn.
- xuất khẩu ARCH = && xuất khẩu SUBARCH =
Thí dụ:
- xuất khẩu ARCH = arm64 && xuất khẩu SUBARCH = arm64
Xác định vị trí defconfig thích hợp của bạn bằng cách điều hướng đến thư mục arch // configs trong nguồn kernel (ví dụ: arch / arm64 / configs).
Tiếp theo xác định vị trí tập tin cấu hình thích hợp của nhà phát triển cho hạt nhân bạn đang xây dựng. Nó thường phải ở dạng _defconfig hoặc _defconfig. Các defconfig sẽ hướng dẫn trình biên dịch những tùy chọn để bao gồm trong hạt nhân.
Các cấu hình Qualcomm chung cũng có thể được tìm thấy, các cấu hình này thường sẽ giống như (msm-perf_defconfig, msmcortex-perf_defconfig).
Xây dựng hạt nhân
Mã số:
Làm sạch
làm mrproper
chế tạo
make -j $ (nproc –all)
Khi các lệnh này thành công, bạn nên có: tệp Hình ảnh, Hình ảnh-dtb, Image.gz hoặc Image.gz-dtb ở cuối.
Mẹo CHUYÊN NGHIỆP: Nếu vấn đề xảy ra với máy tính của bạn hoặc máy tính xách tay / máy tính xách tay, bạn nên thử sử dụng phần mềm Reimage Plus có thể quét các kho lưu trữ và thay thế các tệp bị hỏng và bị thiếu. Điều này làm việc trong hầu hết các trường hợp, nơi vấn đề được bắt nguồn do một tham nhũng hệ thống. Bạn có thể tải xuống Reimage Plus bằng cách nhấp vào đâyNếu các lệnh đó thất bại, bạn có thể cần phải chỉ định thư mục đầu ra khi tạo một hạt nhân dựa trên CAF mới, như sau:
mkdir -p
làm cho O = sạch sẽ
làm cho O = ra mrproper
làm cho O = ra
làm cho O = out -j $ (nproc –all)
Nếu nó vẫn không muốn làm việc, một cái gì đó bị hỏng - kiểm tra các tiêu đề của bạn hoặc đưa nó lên với các nhà phát triển hạt nhân.
Nếu hạt nhân đã được biên dịch thành công, bây giờ bạn cần phải flash nó. Có hai cách khác nhau để thực hiện việc này - bạn có thể giải nén và đóng gói lại bootimage bằng cách sử dụng Android Image Kitchen hoặc AnyKernel2.
Cũng có thể có một số sắc thái dựa trên các thiết bị cụ thể - bạn sẽ cần yêu cầu nhà phát triển thiết bị của bạn hỗ trợ nếu trường hợp này xảy ra.
Nhấp nháy hạt nhân trong nhà bếp hình ảnh Android
Tải xuống Android Image Kitchen
Trích xuất hình ảnh khởi động của thiết bị Android của bạn từ hình ảnh có sẵn mới nhất (cho dù là ROM cổ phiếu hoặc tùy chỉnh).
Bây giờ giải nén hình ảnh bằng cách sử dụng mã này:
unpackimg.sh .img
Tiếp theo xác định vị trí tệp zImage và thay thế nó bằng hình ảnh hạt nhân đã biên dịch của bạn - đổi tên nó thành hình ảnh khởi động.
Bây giờ hãy chạy mã này để đóng gói lại hình ảnh:
repackimg.sh
Bây giờ bạn có thể flash hình ảnh khởi động mới bằng fastboot, TWRP, v.v.
Nhấp nháy hạt nhân trong AnyKernel2
Tải xuống AnyKernel2 mới nhất
Áp dụng bản vá này để loại bỏ tất cả các tệp demo.
wget https://github.com/nathanchance/AnyKernel2/commit/addb6ea860aab14f0ef684f6956d17418f95f29a.diff
patch -p1 <addb6ea860aab14f0ef684f6956d17418f95f29a.diff
rm addb6ea860aab14f0ef684f6956d17418f95f29a.diff
Bây giờ đặt hình ảnh hạt nhân của bạn trong thư mục gốc của tập tin, và mở anykernel.sh để sửa đổi các giá trị này:
- string : tên kernel của bạn
- name # : Liệt kê tất cả các tên mã của thiết bị của bạn (từ /system/build.prop: ro.product.device, ro.build.product)
- block : Đường dẫn của ảnh khởi động trong fstab của bạn. Các fstab có thể được mở từ gốc của thiết bị của bạn và nó sẽ trông giống như thế này: https://android.googlesource.com/devr/fstab.angler
Cột đầu tiên là giá trị bạn muốn đặt chặn.
Bây giờ hãy nén lại kernel và flash nó trong AnyKernel2:
zip -r9 kernel.zip * -x README.md kernel.zip
Được cảnh báo rằng nhiều hạt nhân từ CAF bao gồm một kịch bản Python sẽ kích hoạt –Werror, mà về cơ bản là nguyên nhân gây ra lỗi xây dựng của bạn để ném lỗi vào những thứ nhỏ nhất. Vì vậy, đối với các phiên bản GCC cao hơn (bao gồm nhiều cảnh báo hơn), thông thường bạn sẽ cần thực hiện các thay đổi trong 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 =
Sử dụng chuỗi công cụ GCC cao hơn (5.x, 6.x, 7.x hoặc thậm chí 8.x) sẽ yêu cầu bạn nuke tập lệnh trình bao bọc GCC như trên và sử dụng tệp tiêu đề GCC thống nhất (chọn phần sau nếu bạn có /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
Ngay cả khi bạn nhận được nhiều cảnh báo, chúng không cần phải sửa (thường).
Hạt nhân của bạn được xây dựng và sẵn sàng để đi!
Mẹo CHUYÊN NGHIỆP: Nếu vấn đề xảy ra với máy tính của bạn hoặc máy tính xách tay / máy tính xách tay, bạn nên thử sử dụng phần mềm Reimage Plus có thể quét các kho lưu trữ và thay thế các tệp bị hỏng và bị thiếu. Điều này làm việc trong hầu hết các trường hợp, nơi vấn đề được bắt nguồn do một tham nhũng hệ thống. Bạn có thể tải xuống Reimage Plus bằng cách nhấp vào đây