Tạo nhân Pixel

Hướng dẫn này cung cấp từng bước về cách tải, biên dịch và cài đặt ROM kernel Pixel tuỳ chỉnh cho quá trình phát triển. Nhờ GKI, giờ đây bạn có thể cập nhật kernel 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à vì thiết bị Pixel 5 trở xuống yêu cầu cập nhật các mô-đun kernel 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 kernel Pixel được GKI hỗ trợ bao gồm nhánh tệp kê khai kho lưu trữ kernel cho từng thiết bị Pixel được GKI hỗ trợ. Hãy xem Kernel Pixel cũ để biết các nhánh tệp kê khai kernel Pixel 5 trở xuống.

Pixel 6 và Pixel 6 Pro cũng được hỗ trợ trong kernel Linux ngược dòng và chỉ có thể khởi động đến dấu nhắc shell của thiết bị bằng trình điều khiển ngược dòng. Hãy tham khảo bài viết Tạo và cài đặt ROM kernel Pixel ngược dòng để biết thêm thông tin.

Tạo và cài đặt ROM kernel Pixel GKI

Phần này cung cấp các bước để đồng bộ hoá, tạo và cài đặt ROM các nhánh kernel được GKI hỗ trợ. Bảng sau đây cung cấp mối liên kết giữa các thiết bị Pixel được hỗ trợ và các nhánh kho lưu trữ kernel sản xuất tương ứng.

Các nhánh kernel Pixel được GKI hỗ trợ

Thiết bị Các nhánh kho lưu trữ Kernel GKI
Pixel 9a (tegu) android-gs-tegu-6.1-android16 android14-6.1
Pixel 9 Pro Fold (comet) android-gs-comet-6.1-android16 android14-6.1
Pixel 9 (tokay)
Pixel 9 Pro (caiman)
Pixel 9 Pro XL (komodo)
android-gs-caimito-6.1-android16 android14-6.1
Pixel 8a (akita) android-gs-akita-6.1-android16 android14-6.1
Pixel 8 (shiba)
Pixel 8 Pro (husky)
android-gs-shusky-6.1-android16 android14-6.1
Pixel Fold (felix) android-gs-felix-6.1-android16 android14-6.1
Pixel Tablet (tangorpro) android-gs-tangorpro-6.1-android16 android14-6.1
Pixel 7a (lynx) android-gs-lynx-6.1-android16 android14-6.1
Pixel 7 (panther)
Pixel 7 Pro (cheetah)
android-gs-pantah-6.1-android16 android14-6.1
Pixel 6a (bluejay) android-gs-bluejay-6.1-android16 android14-6.1
Pixel 6 (oriole)
Pixel 6 Pro (raven)
android-gs-raviole-6.1-android16 android14-6.1

Ngoài các kernel được nhà máy hỗ trợ, 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 kernel Android chung có trong bảng Các tổ hợp nền tảng Android và kernel được hỗ trợ cho Pixel 6 và Pixel 6 Pro. 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 kernel 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 hệ điều hành được hỗ trợ cho Pixel 6 và Pixel 6 Pro
Nhánh tệp kê khai kernel Pixel Nhánh GKI Bản dựng nền tảng Android
gs-android-gs-raviole-mainline android-mainline android-latest-release
gs-android16-6.12-gs101 android16-6.12 android-latest-release
gs-android13-gs-raviole-5.15 android13-5.15 TQ1A.230205.002 (9471150)

Chuẩn bị thiết bị Pixel

Lưu đồ sau đây mô tả quy trình cập nhật kernel trên thiết bị Pixel 6 trở lên:

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

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

  1. Chuyển đến flash.android.com.
  2. Chọn bản dựng Android dựa trên các tổ hợp Nền tảng và kernel Android được hỗ trợ.
    • Đối với android-latest-release, hãy chọn "Back to Public" (Quay lại phiên bản công khai), Canary hoặc Beta.
  3. Chọn các tuỳ chọn sau:
    • Xoá thiết bị
    • Buộc cài đặt ROM tất cả các phân vùng
    • Tắt tính năng xác minh
  4. Nhấn vào nút Install build (Cài đặt bản dựng) để cài đặt ROM thiết bị.

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

Đồng bộ hoá kho lưu trữ kernel

Chạy các lệnh sau để tải mã nguồn kernel xuống. Hãy tham khảo bảng Các tổ hợp nền tảng và kernel Android được hỗ trợ cho Pixel 6 và Pixel 6 Pro Combinations để biết 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ữ kernel để 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 vài lựa chọn để cập nhật tệp vendor_ramdisk-DEVICE.img. Hãy sử dụng lựa chọn (1) nếu bạn đang dùng Android 15 QPR2 (BP11.241025.006) trở lên. Nếu không, hãy sử dụng lựa chọn (2).

  • Lựa chọn 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 ramdisk DTB và DLKM trên phân vùng vendor_boot. Hãy nâng cấp công cụ nền tảng Android lên phiên bản 36.0.0 trở lên để sử dụng lựa chọn này. Chạy lệnh sau để thực hiện việc này:

    $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "platform-tools"
    

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

  • Lựa chọn 2) Trích xuất hình ảnh ramdisk 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 sử dụng 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 gốc 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ữ kernel 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 kernel

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

Để thuận tiện, bạn có thể chạy build_DEVICE.sh tập lệnh có tại KERNEL_REPO_ROOT. Trong hầu hết các trường hợp, DEVICE phải là tên mã, 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 kernel, 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òn build_cloudripper.sh cho Pixel 7 và Pixel 7 Pro.

Ví dụ: để tạo kernel 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 kernel sản xuất, các build_DEVICE.sh tập lệnh sử dụng kernel GKI được tạo sẵn để tăng tốc quy trình xây dựng. Nếu bạn muốn sửa đổi kernel cốt lõi, hãy đặt biến môi trường BUILD_AOSP_KERNEL=1 để tạo kernel từ các nguồn cục bộ. Các nhánh kernel phát triển sẽ trực tiếp tạo nguồn kernel theo mặc định.

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

Cài đặt ROM hình ảnh kernel

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 kernel 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 bạn đang cài đặt ROM kernel tuỳ chỉnh trên bản dựng nền tảng, thì bạn có thể cần xoá thiết bị nếu có bản hạ cấp cấp bản vá bảo mật (SPL) liên kết với kernel mới. Quá trình này sẽ xoá tất cả dữ liệu cá nhân của bạn. Hãy nhớ sao lưu dữ liệu trước khi xoá.
fastboot -w

Để cài đặt ROM hình ảnh kernel, hãy chạy lệnh fastboot flash cho từng phân vùng kernel đượ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 kernel
Pixel 6 (oriole)
Pixel 6 Pro (raven)
Pixel 6a (bluejay)
boot
dtbo
vendor_boot hoặc vendor_boot:dlkm
vendor_dlkm (phân vùng động)
Pixel 9 (tegu)
Pixel 9 Pro Fold (comet)
Pixel 9 (tokay)
Pixel 9 Pro (caiman)
Pixel 9 Pro XL (komodo)
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 (phân vùng động)
system_dlkm (phân vùng động)

Sau đâ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  --dtb out/slider/dist/dtb.img vendor_boot:dlkm out/slider/dist/initramfs.img
fastboot reboot fastboot
fastboot flash vendor_dlkm out/slider/dist/vendor_dlkm.img

Đối với Pixel 6, Pixel 6 Pro và Pixel 6a, nếu bạn đã cập nhật vendor_ramdisk trong Cập nhật ramdisk của nhà cung cấp, thì hãy sử dụng lệnh sau để cập nhật phân vùng vendor_boot:

fastboot flash vendor_boot out/slider/dist/vendor_boot.img

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

Nhánh kernel DIST_DIR
v5.10 out/mixed/dist
v5.15 trở lên out/DEVICE/dist
Lưu ý: Nếu bạn có một dongle nối tiếp và muốn bật nhật ký nối tiếp, thì lệnh là:
fastboot oem uart enable
fastboot oem uart config 3000000
Lệnh mẫu để 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.

Tạo và cài đặt ROM kernel Pixel ngược dòng

Vì Pixel 6 và Pixel 6 Pro được hỗ trợ trong kernel Linux ngược dòng, nên bạn chỉ có thể sử dụng android-mainline với trình điều khiển ngược dòng để khởi động đến dấu nhắc shell của thiết bị cho quá trình phát triển kernel. Phần này cung cấp các bước để đồng bộ hoá, tạo và cài đặt ROM kernel Pixel 6 và Pixel 6 Pro từ android-mainline.

Hãy làm theo các bước tiếp theo để bắt đầu.

  1. Chuẩn bị thiết bị bằng cách làm theo các bước trong phần Chuẩn bị thiết bị Pixel
  2. Đồng bộ hoá nhánh tệp kê khai kernel common-android-mainline bằng cách làm theo các bước trong phần Đồng bộ hoá kho lưu trữ kernel.
  3. Cấu hình mục tiêu tạo Kleaf được xác định theo đường dẫn KERNEL_REPO_ROOT/devices/google/raviole. Để biên dịch mục tiêu bản dựng raviole_upstream, hãy chạy lệnh Kleaf:

    tools/bazel run //devices/google/raviole:raviole_upstream_dist
    
  4. Tương tự như các kernel sản xuất, hãy tắt tính năng xác minh và xoá thiết bị khi cài đặt ROM kernel tuỳ chỉnh trên hình ảnh gốc của Android. Hãy tham khảo các lưu ý trong Cài đặt ROM hình ảnh kernel để biết thêm thông tin.

  5. Ở chế độ fastboot, hãy chạy các lệnh sau để cài đặt ROM hình ảnh kernel:

    fastboot flash boot        out/raviole_upstream/dist/boot.img
    fastboot flash dtbo        out/raviole_upstream/dist/dtbo.img
    fastboot flash  --dtb out/raviole_upstream/dist/dtb.img \
        vendor_boot:dlkm out/raviole_upstream/dist/initramfs.img
    
  6. Để truy cập vào dấu nhắc shell của thiết bị, bạn có thể khởi động lại vào chế độ khôi phục bằng cách chạy lệnh:

    fastboot reboot recovery
    

    Mở shell của thiết bị bằng cách chạy lệnh adb shell. Bạn cũng có thể sử dụng quyền truy cập gốc bằng cách chạy lệnh adb root.

Kernel Pixel cũ

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

Các nhánh kernel Pixel cũ
Thiết bị Đường dẫn nhị phân trong cây AOSP Các 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 (flame)
Pixel 4 XL (coral)
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 (blueline)
Pixel 3 XL (crosshatch)
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