Google cam kết thúc đẩy công bằng chủng tộc cho các cộng đồng Đen. Xem thế nào.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Hạt nhân xây dựng

Trang này chi tiết quá trình xây dựng các hạt nhân tùy chỉnh cho các thiết bị Android. Các hướng dẫn sau đây hướng dẫn bạn trong quá trình chọn đúng nguồn, xây dựng kernel và nhúng kết quả vào hình ảnh hệ thống được xây dựng từ Dự án nguồn mở Android (AOSP).

Nhiều nguồn nhân gần đây có thể được lấy bằng Repo và được xây dựng mà không cần cấu hình thêm bằng cách chạy build/build.sh từ thư mục gốc của kiểm tra nguồn của bạn.

Đối với hạt nhân cũ hoặc hạt nhân không được liệt kê dưới đây, hãy tham khảo hướng dẫn về cách xây dựng hạt nhân cũ .

Tải về nguồn và công cụ xây dựng

Đối với các nhân gần đây, hãy sử dụng repo để tải xuống các nguồn, chuỗi công cụ và xây dựng các tập lệnh. Một số hạt nhân (ví dụ, hạt nhân Pixel 3) yêu cầu nguồn từ nhiều kho git, trong khi các hạt nhân khác (ví dụ, hạt nhân thông thường) chỉ yêu cầu một nguồn duy nhất. Sử dụng phương pháp repo đảm bảo thiết lập thư mục nguồn chính xác.

Tải về các nguồn cho chi nhánh thích hợp:

mkdir android-kernel && cd android-kernel
repo init -u https://android.googlesource.com/kernel/manifest -b BRANCH 
repo sync

Bảng sau liệt kê các tên BRANCH cho các hạt nhân có sẵn thông qua phương pháp này.

Thiết bị Đường dẫn nhị phân trong cây AOSP Chi nhánh repo
Pixel 4 (ngọn lửa)
Pixel 4 XL (san hô)
thiết bị / google / san hô-kernel android-msm-san hô-4.14-android10-qpr3
Pixel 3a (sargo)
Pixel 3a XL (bonito)
thiết bị / google / bonito-kernel android-msm-bonito-4.9-android10-qpr3
Pixel 3 (blueline)
Pixel 3 XL (chữ thập)
thiết bị / google / crosshatch-kernel android-msm-crosshatch-4.9-android10-qpr3
Pixel 2 (walleye)
Pixel 2 XL (mẫu)
thiết bị / google / wahoo-kernel android-msm-wahoo-4.4-android10-qpr3
Pixel (cá cờ)
Pixel XL (marlin)
thiết bị / google / marlin-kernel android-msm-marlin-3.18-pie-qpr2
Hikey960 thiết bị / linaro / hikey-kernel hikey-linaro-android-4.14
hikey-linaro-android-4.19
chung-android12-5.4
Beagle x15 thiết bị / ti / beagle_x15-kernel omap-beagle-x15-android-4.14
omap-beagle-x15-android-4.19
Hạt nhân thông thường của Android Không có chung-android-4.4
chung-android-4.9
chung-android-4.14
chung-android-4.19
ổn định chung android-4.19
chung-android11-5.4
chung-android12-5.4
dòng chính-android

Xây dựng nhân

Sau đó, xây dựng kernel với:

build/build.sh

Nhị phân hạt nhân, mô-đun và hình ảnh tương ứng được đặt trong thư mục out/ BRANCH /dist .

Chạy kernel

Có nhiều cách để chạy kernel được xây dựng tùy chỉnh. Sau đây là những cách được biết phù hợp cho các kịch bản phát triển khác nhau.

Nhúng vào bản dựng hình ảnh Android

Sao chép Image.lz4-dtb vào vị trí nhị phân kernel tương ứng trong cây AOSP và xây dựng lại hình ảnh khởi động.

Hoặc, xác định biến TARGET_PREBUILT_KERNEL trong khi sử dụng make bootimage (hoặc bất kỳ dòng lệnh make nào khác xây dựng hình ảnh khởi động). Biến này được hỗ trợ bởi tất cả các thiết bị khi nó được thiết lập thông qua device/common/populate-new-device.sh . Ví dụ:

export TARGET_PREBUILT_KERNEL= DIST_DIR /Image.lz4-dtb

Nhấp nháy và khởi động hạt nhân với fastboot

Hầu hết các thiết bị gần đây đều có tiện ích mở rộng bộ nạp khởi động để hợp lý hóa quá trình tạo và khởi động hình ảnh khởi động.

Để khởi động kernel mà không cần flash:

adb reboot bootloader
fastboot boot Image.lz4-dtb

Sử dụng phương pháp này, kernel không thực sự được flash và sẽ không tồn tại trong quá trình khởi động lại.

Tùy chỉnh xây dựng kernel

Quá trình xây dựng và kết quả có thể bị ảnh hưởng bởi các biến môi trường. Hầu hết trong số chúng là tùy chọn và mỗi nhánh kernel phải đi kèm với cấu hình mặc định phù hợp. Những người thường xuyên sử dụng nhất được liệt kê ở đây. Để biết danh sách đầy đủ (và cập nhật), hãy tham khảo build/build.sh .

Biến môi trường Sự miêu tả Thí dụ
BUILD_CONFIG Xây dựng tập tin cấu hình để khởi tạo môi trường xây dựng từ. Vị trí sẽ được xác định liên quan đến thư mục gốc Repo. Mặc định cho build.config .
Bắt buộc cho hạt nhân thông thường.
BUILD_CONFIG=common/build.config.gki.aarch64
OUT_DIR Thư mục đầu ra cơ sở cho việc xây dựng kernel. OUT_DIR=/path/to/my/out
DIST_DIR Thư mục đầu ra cơ sở cho phân phối kernel. OUT_DIR=/path/to/my/dist
CC Trình biên dịch ghi đè sẽ được sử dụng. Quay trở lại trình biên dịch mặc định được xác định bởi build.config . CC=clang
SKIP_MRPROPER Bỏ qua make mrproper SKIP_MRPROPER=1
SKIP_DEFCONFIG Bỏ qua make defconfig SKIP_DEFCONFIG=1

Cấu hình kernel tùy chỉnh cho các bản dựng cục bộ

Nếu bạn cần chuyển đổi tùy chọn cấu hình kernel thường xuyên, ví dụ như khi làm việc trên một tính năng hoặc nếu bạn cần đặt tùy chọn cho mục đích phát triển, bạn có thể đạt được tính linh hoạt đó bằng cách duy trì sửa đổi cục bộ hoặc sao chép cấu hình bản dựng.

Đặt biến POST_DEFCONFIG_CMDS thành một câu lệnh được đánh giá ngay sau khi make defconfig bước make defconfig thông thường. Vì các tệp build.config có nguồn gốc trong môi trường xây dựng, các hàm được định nghĩa trong build.config có thể được gọi là một phần của các lệnh post-defconfig.

Một ví dụ phổ biến là vô hiệu hóa tối ưu hóa thời gian liên kết (LTO) cho các nhân crosshatch trong quá trình phát triển. Trong khi LTO có lợi cho các hạt nhân được phát hành, thì chi phí xây dựng có thể là đáng kể. Đoạn mã sau được thêm vào build.config cục bộ build.config vô hiệu hóa LTO liên tục khi sử dụng build/build.sh .

POST_DEFCONFIG_CMDS="check_defconfig && update_debug_config"
function update_debug_config() {
    ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
         -d LTO \
         -d LTO_CLANG \
         -d CFI \
         -d CFI_PERMISSIVE \
         -d CFI_CLANG
    (cd ${OUT_DIR} && \
     make O=${OUT_DIR} $archsubarch CC=${CC} CROSS_COMPILE=${CROSS_COMPILE} olddefconfig)
}

Xác định phiên bản kernel

Có hai cách để xác định phiên bản chính xác để xây dựng.

Phiên bản kernel từ cây AOSP

Cây AOSP chứa các phiên bản kernel dựng sẵn. Hầu hết thời gian nhật ký git tiết lộ phiên bản chính xác như là một phần của thông điệp cam kết:

cd $AOSP/device/ VENDOR / NAME
git log --max-count=1

Phiên bản kernel từ hình ảnh hệ thống

Để xác định phiên bản kernel được sử dụng trong ảnh hệ thống, hãy chạy lệnh sau đối với tệp kernel:

file kernel

Đối với các Image.lz4-dtb , hãy chạy:

grep -a 'Linux version' Image.lz4-dtb

Xây dựng hình ảnh khởi động

Có thể xây dựng một hình ảnh khởi động bằng môi trường xây dựng kernel. Để làm điều này, bạn cần một nhị phân ramdisk, bạn có thể có được bằng cách tải xuống hình ảnh khởi động GKI và giải nén nó. Bất kỳ hình ảnh khởi động GKI từ bản phát hành Android được liên kết sẽ hoạt động.

tools/mkbootimg/unpack_bootimg.py --boot_img=boot-5.4-gz.img
mv out/ramdisk gki-ramdisk.lz4

Nếu bạn đang phát triển với AOSP master, thay vào đó, bạn có thể tải xuống tạo phẩm xây dựng ramdisk-recovery.img từ bản dựng aosp_arm64 trên ci.android.com và sử dụng nó làm nhị phân ramdisk của bạn.

Khi bạn có tệp nhị phân ramdisk và đã sao chép nó vào gki-ramdisk.lz4 trong thư mục gốc của bản dựng kernel, bạn có thể tạo ảnh khởi động bằng cách thực hiện:

BUILD_BOOT_IMG=1 SKIP_VENDOR_BOOT=1 KERNEL_BINARY=Image.gz GKI_RAMDISK_PREBUILT_BINARY=gki-ramdisk.lz4 BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh

Hình ảnh khởi động được đặt tại out/<kernel branch>/dist/boot.img .