Xây dựng nhân Pixel

Hướng dẫn này cung cấp hướng dẫn từng bước về cách tải xuống, biên dịch và cài đặt ROM hạt nhân Pixel tuỳ chỉnh để phát triển. Nhờ GKI, giờ đây, bạn có thể cập nhật nhân hệ điều hành một cách độc lập với bản dựng nền tảng Android. Các bước này chỉ áp dụng cho thiết bị Pixel 6 trở lên. Lý do là Pixel 5 và các thiết bị cũ hơn yêu cầu cập nhật các mô-đun hạt nhân trên phân vùng vendor, tuỳ thuộc vào bản dựng nền tảng Android cho các thiết bị đó. Bảng Các nhánh hạt nhân Pixel được hỗ trợ bởi GKI bao gồm nhánh tệp kê khai kho lưu trữ hạt nhân cho từng thiết bị Pixel được hỗ trợ bởi GKI. Hãy tham khảo phần Hạt nhân Pixel cũ cho Pixel 5 và các nhánh tệp kê khai hạt nhân cũ hơn.

Các nhánh hạt nhân Pixel được GKI hỗ trợ
Thiết bị Đường dẫn tệp nhị phân trong cây AOSP Nhánh kho lưu trữ Hạt nhân GKI
Pixel 9 Pro Fold (comet) device/google/comet-kernels/6.1 android-gs-comet-6.1-android15-qpr1 android15-6.1
Pixel 9 (tokay)
Pixel 9 Pro (caiman)
Pixel 9 Pro XL (komodo)
device/google/caimito-kernels/6.1 android-gs-caimito-6.1-android15-qpr1 android15-6.1
Pixel 8a (akita) device/google/akita-kernels/5.15 android-gs-akita-5.15-android15-qpr1 android15-5.15
Pixel 8 (chó Shiba)
Pixel 8 Pro (chó Husky)
device/google/shusky-kernels/5.15 android-gs-shusky-5.15-android15-qpr1 android15-5.15
Pixel Fold (felix) device/google/felix-kernels/5.10 android-gs-felix-5.10-android15-qpr1 android15-5.10
Pixel Tablet (tangorpro) device/google/tangorpro-kernels/5.10 android-gs-tangorpro-5.10-android15-qpr1 android15-5.10
Pixel 7a (lynx) device/google/lynx-kernels/5.10 android-gs-lynx-5.10-android15-qpr1 android15-5.10
Pixel 7 (panther)
Pixel 7 Pro (cheetah)
device/google/pantah-kernels/5.10 android-gs-pantah-5.10-android15-qpr1 android15-5.10
Pixel 6a (bluejay) device/google/bluejay-kernels/5.10 android-gs-bluejay-5.10-android15-qpr1 android15-5.10
Pixel 6 (oriole)
Pixel 6 Pro (raven)
device/google/raviole-kernels/5.10 android-gs-raviole-5.10-android15-qpr1 android15-5.10

Ngoài các hạt nhân được hỗ trợ từ nhà sản xuất, các thiết bị Pixel 6 và 6 Pro chỉ được hỗ trợ cho mục đích phát triển GKI trên các nhánh hạt nhân Android Common có trong bảng Nền tảng Android và tổ hợp hạt nhân Pixel 6/6 Pro được hỗ trợ. Do sự khác biệt về UAPI của nhà cung cấp giữa HAL nền tảng Android và trình điều khiển hạt nhân Pixel, bảng này cung cấp các tổ hợp bản dựng được hỗ trợ.

Các tổ hợp nền tảng Android và nhân được hỗ trợ cho Pixel 6/6 Pro
Nhánh tệp kê khai hạt nhân Pixel Nhánh GKI Bản dựng nền tảng Android Hỗ trợ aosp-main?
gs-android-gs-raviole-mainline android-mainline (phiên bản 6.12) BP11.241025.006 (12620009)
android-gs-raviole-6.1-android15-qpr2-beta android14-6.1 BP11.241025.006 (12620009)
gs-android13-gs-raviole-5.15 android13-5.15 TQ1A.230205.002 (9471150) Không

Chuẩn bị thiết bị Pixel

Biểu đồ quy trình sau đây mô tả quy trình cập nhật hạt nhân trên các thiết bị Pixel 6 trở lên:

**Hình 1.** Biểu đồ quy trình cập nhật hạt nhân

Cài đặt ROM thiết bị bằng flash.android.com

  1. Truy cập vào flash.android.com
  2. Chọn bản dựng Android dựa trên các tổ hợp Nền tảng Android và nhân được hỗ trợ.
  3. Chọn các tuỳ chọn sau:
    • Xóa dữ liệu thiết bị
    • Buộc cài đặt ROM cho tất cả các phân vùng
    • Tắt tính năng Xác minh
  4. Nhấn nút Install build (Cài đặt bản dựng) để cài đặt ROM cho thiết bị.

**Hình 2.** Ví dụ về trạm Flash

Tải xuống và biên dịch nhân

Đồng bộ hoá kho lưu trữ nhân

Chạy các lệnh sau để tải mã nguồn hạt nhân xuống. Tham khảo bảng Các tổ hợp hạt nhân và nền tảng Android Pixel 6/6 Pro được hỗ trợ cho Pixel KERNEL_MANIFEST_BRANCH.

repo init -u https://android.googlesource.com/kernel/manifest -b KERNEL_MANIFEST_BRANCH
repo sync -c --no-tags

Cập nhật ramdisk của nhà cung cấp

Cập nhật tệp vendor_ramdisk-DEVICE.img trong kho lưu trữ nhân cho khớp với bản dựng nền tảng Android được cài đặt ROM trên thiết bị. Có một số cách để cập nhật tệp vendor_ramdisk-DEVICE.img. Sử dụng tuỳ chọn (1) nếu bạn đang sử dụng Android 15 QPR2 (BP11.241025.006) trở lên. Nếu không, hãy sử dụng tuỳ chọn (2).

  • Cách 1) Chỉ cập nhật các bit ramdisk DTB và DLKM của phân vùng vendor_boot

    Kể từ phiên bản fastboot 35.0.2-12583183, bạn có thể trực tiếp cài đặt ROM DTB và DLKM trên phân vùng vendor_boot. Tải xuống và trích xuất sdk-repo-HOST_OS-platform-tools-12583183.zip từ các cấu phần phần mềm v35.0.2-12583183 vào môi trường của máy chủ lưu trữ để sử dụng.

    Làm theo hướng dẫn để cài đặt ROM DTB và vendor_boot:dlkm trong phần Cài đặt ROM hình ảnh hạt nhân.

  • Cách 2) Trích xuất hình ảnh ổ đĩa ngẫu nhiên của nhà cung cấp từ hình ảnh gốc của Pixel.

    1. Tải hình ảnh gốc được hỗ trợ cho thiết bị của bạn xuống từ https://developers.google.com/android/images.

    2. Trích xuất vendor_boot.img:

      Các lệnh sau đây lấy Pixel 6 Pro AP1A.240505.004 làm ví dụ. Thay thế tên tệp zip bằng tên tệp của hình ảnh ban đầu mà bạn đã tải xuống.

        unzip raven-ap1a.240505.004-factory-9d783215.zip
      
        cd raven-ap1a.240505.004
      
        unzip image-raven-ap1a.240505.004.zip vendor_boot.img
      
    3. Giải nén vendor_boot.img để lấy ramdisk của nhà cung cấp.

        KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \
            --out vendor_boot_out
      
    4. Sao chép tệp vendor-ramdisk-by-name/ramdisk_ đã trích xuất vào kho lưu trữ hạt nhân Pixel.

      Thiết bị DEVICE_RAMDISK_PATH
      Pixel 6 (oriole)
      Pixel 6 Pro (raven)
      prebuilts/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img
      Pixel 6a (bluejay) private/devices/google/bluejay/vendor_ramdisk-bluejay.img
        cp vendor_boot_out/vendor-ramdisk-by-name/ramdisk_ \
            KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH
      

Biên dịch nhân (Kleaf)

Trong Android 13, tập lệnh build.sh đã được thay thế bằng một hệ thống xây dựng nhân mới có tên là Kleaf. Đối với các thiết bị sử dụng android13-5.15 trở lên, hạt nhân phải được tạo bằng Kleaf.

Đối với Pixel 6 và 6 Pro có nhân android13-5.15, hãy chạy lệnh bản dựng Kleaf:

tools/bazel run --lto=thin //gs/google-modules/soc-modules:slider_dist

Đối với tất cả các hạt nhân Pixel khác, hãy chạy tập lệnh build_DEVICE.sh tại KERNEL_REPO_ROOT. Trong hầu hết trường hợp, DEVICE cần phải là tên mã khớp với tên mã được sử dụng trong cột Binary path in AOSP tree (Đường dẫn tệp nhị phân trong cây AOSP) của bảng GKI supported Pixel kernel branches (Các nhánh hạt nhân Pixel được hỗ trợ bởi GKI). Đây có thể là tên mã của một thiết bị, chẳng hạn như "akita" (Pixel 8a) hoặc tên mã đại diện cho một nhóm thiết bị có liên quan dùng chung một hạt nhân, chẳng hạn như "caimito" có nghĩa là Pixel 9 (tokay), Pixel 9 Pro (caiman) và Pixel 9 Pro XL (komodo). Đối với các bản phát hành android14 trở xuống, hãy sử dụng build_slider.sh cho Pixel 6 và Pixel 6 Pro, cũng như build_cloudripper.sh cho Pixel 7 và Pixel 7 Pro.

Ví dụ: để tạo hạt nhân cho Pixel 6 trên nhánh android-gs-raviole-5.10-android14, bạn sẽ chạy lệnh:

build_slider.sh

Theo mặc định trên các nhánh nhân phát hành chính thức, tập lệnh build_DEVICE.sh sử dụng nhân GKI tạo sẵn để tăng tốc quá trình xây dựng. Nếu bạn muốn sửa đổi hạt nhân lõi, hãy đặt biến môi trường BUILD_AOSP_KERNEL=1 để tạo hạt nhân từ các nguồn cục bộ. Theo mặc định, các nhánh hạt nhân phát triển sẽ trực tiếp tạo nguồn hạt nhân.

Để biết thêm thông tin chi tiết về hệ thống xây dựng hạt nhân và cách tuỳ chỉnh bản dựng, hãy tham khảo bài viết Kleaf – Xây dựng hạt nhân Android bằng Bazel.

Truyền nhanh hình ảnh hạt nhân

Lưu ý: Nếu chưa tắt tính năng xác minh, bạn cần thực hiện việc này trước khi cài đặt ROM hạt nhân tuỳ chỉnh. Sau đây là lệnh để thực hiện việc này:
fastboot oem disable-verification
CẢNH BÁO: Nếu đang cài đặt ROM một hạt nhân tuỳ chỉnh trên bản dựng nền tảng, thì bạn có thể cần phải xoá sạch thiết bị nếu có mức bản vá bảo mật (SPL) hạ cấp liên kết với hạt nhân mới. Quá trình này sẽ xoá toàn bộ dữ liệu cá nhân của bạn. Hãy nhớ sao lưu dữ liệu trước khi xoá sạch.
fastboot -w

Để cài đặt ROM hình ảnh hạt nhân, hãy chạy lệnh fastboot flash cho từng phân vùng hạt nhân được liệt kê cho thiết bị của bạn. Đối với các phân vùng động, bạn cần khởi động lại vào chế độ fastbootd trước khi cài đặt ROM.

Thiết bị Phân vùng hạt nhân
Pixel 6 (oriole)
Pixel 6 Pro (raven)
Pixel 6a (bluejay)
boot
dtbo
vendor_boot
vendor_dlkm (phân vùng động)
Pixel 8 (shiba)
Pixel 8 Pro (husky)
Pixel Fold (felix)
Pixel Tablet (tangorpro)
Pixel 7a (lynx)
Pixel 7 (panther)
Pixel 7 Pro (cheetah)
boot
dtbo
vendor_kernel_boot
vendor_dlkm (dynamic partition)
system_dlkm (dynamic partition)

Đối với Pixel 6/6 Pro/6a, nếu bạn đã bỏ qua việc tải vendor_ramdisk xuống trong phần Cập nhật ramdisk của nhà cung cấp, hãy sử dụng lệnh sau để cập nhật ramdisk DTB và DLKM thay vì cài đặt ROM hình ảnh vendor_boot.img:

fastboot flash  --dtb out/DEVICE/dist/dtb.img vendor_boot:dlkm out/slider/dist/initramfs.img

Dưới đây là các lệnh cài đặt ROM cho Pixel 6 trên android-mainline:

fastboot flash boot        out/slider/dist/boot.img
fastboot flash dtbo        out/slider/dist/dtbo.img
fastboot flash vendor_boot out/slider/dist/vendor_boot.img
fastboot reboot fastboot
fastboot flash vendor_dlkm out/slider/dist/vendor_dlkm.img

Bạn có thể tìm thấy hình ảnh hạt nhân trong DIST_DIR.

Nhánh nhân DIST_DIR
v5.10 out/mixed/dist
Phiên bản 5.15 trở lên out/DEVICE/dist
Lưu ý: Nếu bạn có một thiết bị nối tiếp và muốn bật các nhật ký nối tiếp, lệnh sẽ là:
fastboot oem uart enable
fastboot oem uart config 3000000
Lệnh ví dụ để kết nối từ máy chủ:
screen -fn /dev/ttyUSB* 3000000

Khôi phục hình ảnh gốc

Để khôi phục thiết bị về hình ảnh gốc, bạn có thể sử dụng flash.android.com.

Hạt nhân Pixel cũ

Để tham khảo, bảng các nhánh hạt nhân Pixel cũ cung cấp các nhánh kho lưu trữ hạt nhân cho thiết bị Pixel 5 trở xuống. Đây là những thiết bị không được hỗ trợ GKI.

Các nhánh hạt nhân Pixel cũ
Thiết bị Đường dẫn tệp nhị phân trong cây AOSP Nhánh kho lưu trữ
Pixel 5a (barbet)
Pixel 4a (5G) (bramble)
Pixel 5 (redfin)
device/google/redbull-kernel android-msm-redbull-4.19-android14-qpr3
Pixel 4a (sunfish) device/google/sunfish-kernel android-msm-sunfish-4.14-android13-qpr3
Pixel 4 (lửa)
Pixel 4 XL (đỏ san hô)
device/google/coral-kernel android-msm-coral-4.14-android13
Pixel 3a (sargo)
Pixel 3a XL (bonito)
device/google/bonito-kernel android-msm-bonito-4.9-android12L
Pixel 3 (đường viền màu xanh dương)
Pixel 3 XL (đường viền chéo)
device/google/crosshatch-kernel android-msm-crosshatch-4.9-android12
Pixel 2 (walleye)
Pixel 2 XL (taimen)
device/google/wahoo-kernel android-msm-wahoo-4.4-android10-qpr3
Pixel (sailfish)
Pixel XL (marlin)
device/google/marlin-kernel android-msm-marlin-3.18-pie-qpr2