บิลด์เคอร์เนล Pixel

คู่มือนี้จะแสดงวิธีการทีละขั้นตอนในการดาวน์โหลด คอมไพล์ และ แฟลชเคอร์เนล Pixel ที่กำหนดเองเพื่อการพัฒนา GKI ทำให้ตอนนี้คุณสามารถ อัปเดตเคอร์เนลโดยไม่ขึ้นอยู่กับการสร้างแพลตฟอร์ม Android ได้แล้ว ขั้นตอนเหล่านี้ใช้ได้กับอุปกรณ์ Pixel 6 ขึ้นไปเท่านั้น เนื่องจาก Pixel 5 และอุปกรณ์รุ่นก่อนหน้าต้องอัปเดตโมดูลเคอร์เนลในพาร์ติชัน vendor ซึ่งขึ้นอยู่กับบิลด์แพลตฟอร์ม Android สำหรับอุปกรณ์เหล่านั้น ตารางสาขาเคอร์เนล Pixel ที่รองรับ GKI มีสาขา Manifest ของที่เก็บเคอร์เนลสำหรับอุปกรณ์ Pixel แต่ละเครื่องที่รองรับ GKI ดูส่วนเคอร์เนล Pixel รุ่นเดิมสำหรับสาขาไฟล์ Manifest ของเคอร์เนลสำหรับ Pixel 5 และรุ่นก่อนหน้า

สาขาเคอร์เนลของ Pixel ที่รองรับ GKI
อุปกรณ์ สาขาของที่เก็บ เคอร์เนล 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

นอกจากเคอร์เนลที่รองรับจากโรงงานแล้ว อุปกรณ์ Pixel 6 และ 6 Pro ยังรองรับเพื่อวัตถุประสงค์ในการพัฒนา GKI เท่านั้นในสาขาเคอร์เนล Android Common ที่รวมอยู่ในตารางชุดค่าผสมของแพลตฟอร์มและเคอร์เนล Android ของ Pixel 6/6 Pro ที่รองรับ เนื่องจากความแตกต่างของ UAPI ของผู้ให้บริการ ระหว่าง HAL ของแพลตฟอร์ม Android กับไดรเวอร์เคอร์เนลของ Pixel ตารางนี้จึงแสดง ชุดการสร้างที่รองรับ

ชุดค่าผสมของแพลตฟอร์ม Android และเคอร์เนลสำหรับ Pixel 6/6 Pro ที่รองรับ
สาขาไฟล์ Manifest ของเคอร์เนล Pixel สาขา GKI บิลด์แพลตฟอร์ม Android
gs-android-gs-raviole-mainline android-mainline android-latest-release
android16-6.12-gs101 android16-6.12 android-latest-release
gs-android13-gs-raviole-5.15 android13-5.15 TQ1A.230205.002 (9471150)

เตรียมอุปกรณ์ Pixel ของคุณให้พร้อม

โฟลว์ชาร์ตต่อไปนี้อธิบายกระบวนการอัปเดตเคอร์เนลในอุปกรณ์ Pixel 6 ขึ้นไป

**รูปที่ 1** แผนภูมิขั้นตอนการอัปเดตเคอร์เนล

แฟลชอุปกรณ์โดยใช้ flash.android.com

  1. ไปที่ flash.android.com
  2. เลือกบิลด์ Android ตามชุดค่าผสมของแพลตฟอร์มและเคอร์เนล Android ที่รองรับ
  3. เลือกตัวเลือกต่อไปนี้
    • ล้างข้อมูลอุปกรณ์
    • บังคับแฟลชพาร์ติชันทั้งหมด
    • ปิดใช้การยืนยัน
  4. กดปุ่มติดตั้งบิลด์เพื่อแฟลชอุปกรณ์

**รูปที่ 2** ตัวอย่างสถานีแฟลช

ดาวน์โหลดและคอมไพล์เคอร์เนล

ซิงค์ที่เก็บเคอร์เนล

เรียกใช้คำสั่งต่อไปนี้เพื่อดาวน์โหลดซอร์สโค้ดของเคอร์เนล ดูตารางแพลตฟอร์มและเคอร์เนล Android ของ Pixel 6/6 Pro ที่รองรับสำหรับ Pixel KERNEL_MANIFEST_BRANCH

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

อัปเดต Vendor Ramdisk

อัปเดตไฟล์ vendor_ramdisk-DEVICE.img ในที่เก็บเคอร์เนลให้ตรงกับบิลด์แพลตฟอร์ม Android ที่แฟลชในอุปกรณ์ คุณมี 2 ตัวเลือกในการอัปเดตไฟล์ vendor_ramdisk-DEVICE.img ใช้ตัวเลือก (1) หากคุณใช้ Android 15 QPR2 (BP11.241025.006) ขึ้นไป หรือใช้ตัวเลือก (2)

  • ตัวเลือกที่ 1) อัปเดตเฉพาะบิต DTB และ DLKM ramdisk ของพาร์ติชัน vendor_boot

    ตั้งแต่ fastboot เวอร์ชัน 35.0.2-12583183 เป็นต้นไป คุณจะ แฟลช DTB และ DLKM ramdisk โดยตรงในพาร์ติชัน vendor_boot ได้ ดาวน์โหลดและแตกไฟล์ sdk-repo-HOST_OS-platform-tools-12583183.zip จาก อาร์ติแฟกต์ v35.0.2-12583183 ไปยังสภาพแวดล้อมของเครื่องโฮสต์เพื่อใช้งาน

    ทำตามวิธีการเพื่อแฟลช DTB และ vendor_boot:dlkm ในส่วนแฟลชอิมเมจเคอร์เนล

  • ตัวเลือกที่ 2) แยกอิมเมจ ramdisk ของผู้ให้บริการออกจากอิมเมจจากโรงงานของ Pixel

    1. ดาวน์โหลดอิมเมจจากโรงงานที่รองรับสำหรับอุปกรณ์จาก https://developers.google.com/android/images

    2. แตกไฟล์ vendor_boot.img

      คำสั่งต่อไปนี้ใช้ Pixel 6 Pro AP1A.240505.004 เป็นตัวอย่าง แทนที่ ชื่อไฟล์ zip ด้วยชื่อไฟล์ของอิมเมจจากโรงงานที่คุณดาวน์โหลด

        unzip raven-ap1a.240505.004-factory-9d783215.zip
      
        cd raven-ap1a.240505.004
      
        unzip image-raven-ap1a.240505.004.zip vendor_boot.img
      
    3. แตกไฟล์ vendor_boot.img เพื่อรับ ramdisk ของผู้ให้บริการ

        KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \
            --out vendor_boot_out
      
    4. คัดลอกไฟล์ vendor-ramdisk-by-name/ramdisk_ ที่แยกออกมาไปยังที่เก็บเคอร์เนลของ Pixel

      อุปกรณ์ 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
      

คอมไพล์เคอร์เนล (Kleaf)

ใน Android 13 เราได้แทนที่สคริปต์ build.sh ด้วยระบบบิลด์เคอร์เนลใหม่ ที่ชื่อว่า Kleaf สำหรับอุปกรณ์ที่ใช้ android13-5.15 ขึ้นไป ควรสร้างเคอร์เนลโดยใช้ Kleaf

คุณสามารถเรียกใช้สคริปต์ build_DEVICE.sh ที่อยู่ใน KERNEL_REPO_ROOT เพื่อความสะดวก ในกรณีส่วนใหญ่ DEVICE ต้องเป็นชื่อรหัส ซึ่งอาจเป็นชื่อรหัสของอุปกรณ์เครื่องเดียว เช่น "akita" (Pixel 8a) หรือชื่อรหัสที่แสดงถึงกลุ่มอุปกรณ์ที่เกี่ยวข้องซึ่งใช้เคอร์เนลร่วมกัน เช่น "caimito" ซึ่งหมายถึง Pixel 9 (tokay), Pixel 9 Pro (caiman) และ Pixel 9 Pro XL (komodo) สำหรับรุ่น android14 และรุ่นก่อนหน้า ให้ใช้ build_slider.sh สำหรับ Pixel 6 และ Pixel 6 Pro และ build_cloudripper.sh สำหรับ Pixel 7 และ Pixel 7 Pro

เช่น หากต้องการสร้างเคอร์เนลสำหรับ Pixel 6 ในสาขา android-gs-raviole-5.10-android14 คุณจะต้องเรียกใช้คำสั่งต่อไปนี้

build_slider.sh

โดยค่าเริ่มต้นในกิ่งเคอร์เนลเวอร์ชันที่ใช้งานจริง สคริปต์ build_DEVICE.sh จะใช้เคอร์เนล GKI ที่สร้างไว้ล่วงหน้า เพื่อเร่งกระบวนการบิลด์ หากต้องการแก้ไขเคอร์เนลหลัก ให้ตั้งค่าตัวแปรสภาพแวดล้อม BUILD_AOSP_KERNEL=1 เพื่อสร้างเคอร์เนลจากแหล่งที่มาในเครื่องแทน โดยค่าเริ่มต้น สาขาเคอร์เนลสำหรับการพัฒนาจะสร้างแหล่งที่มาของเคอร์เนลโดยตรง

ดูรายละเอียดเพิ่มเติมเกี่ยวกับระบบการสร้างเคอร์เนลและวิธีปรับแต่งการสร้างได้ที่ Kleaf - การสร้างเคอร์เนล Android ด้วย Bazel

แฟลชอิมเมจเคอร์เนล

หมายเหตุ: หากยังไม่ได้ปิดใช้การยืนยัน คุณจะต้องดำเนินการก่อน แฟลชเคอร์เนลที่กำหนดเอง โดยใช้คำสั่งต่อไปนี้
fastboot oem disable-verification
คำเตือน: หากคุณแฟลชเคอร์เนลที่กำหนดเองบน บิลด์แพลตฟอร์ม คุณอาจต้องล้างข้อมูลในอุปกรณ์หากมีการดาวน์เกรด ระดับแพตช์ความปลอดภัย (SPL) ที่เชื่อมโยงกับเคอร์เนลใหม่ กระบวนการนี้จะลบข้อมูลส่วนตัวทั้งหมด อย่าลืมสำรองข้อมูล ก่อนล้างข้อมูล
fastboot -w

หากต้องการแฟลชอิมเมจเคอร์เนล ให้เรียกใช้คำสั่ง fastboot flash สำหรับพาร์ติชันเคอร์เนลแต่ละรายการ ที่แสดงสำหรับอุปกรณ์ สำหรับพาร์ติชันแบบไดนามิก คุณต้องรีบูต เข้าสู่โหมด fastbootd ก่อนที่จะแฟลช

อุปกรณ์ พาร์ติชันเคอร์เนล
Pixel 6 (oriole)
Pixel 6 Pro (raven)
Pixel 6a (bluejay)
boot
dtbo
vendor_boot หรือ vendor_boot:dlkm
vendor_dlkm (พาร์ติชันแบบไดนามิก)
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 (พาร์ติชันแบบไดนามิก)
system_dlkm (พาร์ติชันแบบไดนามิก)

คำสั่งการแฟลชสำหรับ Pixel 6 ใน 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

สำหรับ Pixel 6/6 Pro/6a หากคุณอัปเดต vendor_ramdisk ในส่วนอัปเดต vendor ramdisk ให้ใช้คำสั่งต่อไปนี้แทนเพื่ออัปเดตพาร์ติชัน vendor_boot

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

คุณดูอิมเมจเคอร์เนลได้ใน DIST_DIR

Kernel branch DIST_DIR
v5.10 out/mixed/dist
v5.15 ขึ้นไป out/DEVICE/dist
หมายเหตุ: หากคุณมีดองเกิลแบบอนุกรมและต้องการเปิดใช้บันทึกแบบอนุกรม คำสั่งคือ
fastboot oem uart enable
fastboot oem uart config 3000000
ตัวอย่างคำสั่งในการเชื่อมต่อจากโฮสต์
screen -fn /dev/ttyUSB* 3000000

กู้คืนอิมเมจจากโรงงาน

หากต้องการคืนค่าอุปกรณ์กลับไปเป็นค่าเริ่มต้น คุณสามารถใช้ flash.android.com

เคอร์เนล Pixel รุ่นเดิม

ตารางสาขาเคอร์เนล Pixel รุ่นเดิม เป็นข้อมูลอ้างอิงที่แสดงสาขาที่เก็บเคอร์เนลสำหรับอุปกรณ์ Pixel 5 และรุ่นก่อนหน้า อุปกรณ์เหล่านี้เป็นอุปกรณ์ที่ไม่รองรับ GKI

สาขาเคอร์เนล Pixel รุ่นเดิม
อุปกรณ์ เส้นทางไบนารีในโครงสร้าง AOSP สาขาของที่เก็บ
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 (เปลวไฟ)
Pixel 4 XL (ส้มแดงคอรัล)
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