สร้างเคอร์เนล Pixel

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

สาขาเคอร์เนล Pixel ที่ GKI รองรับ
อุปกรณ์ เส้นทางไบนารีในลําดับชั้น AOSP สาขาที่เก็บ เคอร์เนล 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 (ชิบะ)
Pixel 8 Pro (ฮัสกี้)
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 (เสือพืด)
Pixel 7 Pro (เสือชีตาห์)
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 (นกกางเขน)
Pixel 6 Pro (นกกา)
device/google/raviole-kernels/5.10 android-gs-raviole-5.10-android15-qpr1 android15-5.10

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

แพลตฟอร์ม Android และเคอร์เนลของ Pixel 6/6 Pro ที่รองรับ
Pixel Kernel Manifest Branch GKI Branch บิลด์แพลตฟอร์ม Android aosp-main หรือไม่
gs-android-gs-raviole-mainline android-mainline (v6.8) AP1A.240505.004 (11583682) ใช่
android14-gs-pixel-6.1 android14-6.1 AP1A.240505.004 (11583682) ใช่
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 และชุดค่าผสมสำหรับ PixelKERNEL_MANIFEST_BRANCH

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

อัปเดต RAMdisk ของผู้ให้บริการ

อัปเดตไฟล์ vendor_ramdisk-DEVICE.img ในที่เก็บข้อมูลเคอร์เนลให้ตรงกับบิลด์แพลตฟอร์ม Android ที่แฟลชในอุปกรณ์ คุณเลือกดำเนินการได้ 2-3 วิธีดังนี้

ตัวเลือกที่ 1) แยกไฟล์อิมเมจ 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 เพื่อรับ RAM Disk ของผู้ให้บริการ

      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 (นกกางเขน)
    Pixel 6 Pro (นกกา)
    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
    
ตัวเลือกที่ 2) คัดลอก vendor_ramdisk จากที่เก็บแพลตฟอร์ม Android ที่คอมไพล์ในเครื่อง
อุปกรณ์ DEVICE_RAMDISK_PATH
Pixel 6 (นกกางเขน)
Pixel 6 Pro (นกกา)
prebuilts/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img
Pixel 6a (bluejay) private/devices/google/bluejay/vendor_ramdisk-bluejay.img
cp ANDROID_ROOT/out/target/product/DEVICE/vendor_ramdisk-debug.img \
   KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH/vendor_ramdisk-DEVICE.img

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

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

สำหรับ Pixel 6 และ 6 Pro ที่มีเคอร์เนล android14 ขึ้นไป ให้เรียกใช้คำสั่งต่อไปนี้สำหรับการสร้าง Kleaf

tools/bazel run --config=fast --config=stamp //private/google-modules/soc/gs:slider_dist

สำหรับ Pixel 6 และ 6 Pro ที่มีเคอร์เนล android13-5.15 ให้เรียกใช้คำสั่งต่อไปนี้สำหรับการสร้าง Kleaf

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

สำหรับเคอร์เนล Pixel อื่นๆ ทั้งหมด ให้เรียกใช้สคริปต์ build_DEVICE.sh ที่พบใน KERNEL_REPO_ROOT ในกรณีส่วนใหญ่ DEVICE ต้องเป็นชื่อโค้ดที่ตรงกับชื่อโค้ดที่ใช้ในคอลัมน์เส้นทางไบนารีในต้นไม้ AOSP ของตารางสาขาเคอร์เนล Pixel ที่ GKI รองรับ ซึ่งอาจเป็นชื่อรหัสของอุปกรณ์ 1 เครื่อง เช่น "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 - Building Android Kernels with Bazel

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

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

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

อุปกรณ์ พาร์ติชันเคอร์เนล
Pixel 6 (นกโจร)
Pixel 6 Pro (นกกา)
Pixel 6a (นกกระเรียน)
boot
dtbo
vendor_boot
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 (dynamic partition)
system_dlkm (dynamic partition)

คำสั่งการกะพริบสำหรับ Pixel 6 ใน 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

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

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 (เส้นสีน้ำเงิน)
Pixel 3 XL (เส้นขวาง)
device/google/crosshatch-kernel android-msm-crosshatch-4.9-android12
Pixel 2 (ปลาเทราต์ขาว)
Pixel 2 XL (ปลาเทราต์ไทเมน)
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