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

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

สาขาเคอร์เนลของ Pixel ที่รองรับ GKI
อุปกรณ์ เส้นทางไบนารีในแผนผัง AOSP สาขาของที่เก็บ เคอร์เนล GKI
Pixel 8a (อะกิตะ) อุปกรณ์/google/akita-kernel Android-gs-akita-5.15-android14-Qpr3 Android 14-5.15
Pixel 8 (ชิบะ)
Pixel 8 Pro (ฮัสกี)
อุปกรณ์/google/shusky-kernel Android-gs-Shusky-5.15-android14-Qpr3 Android 14-5.15
Pixel Fold (Felix) อุปกรณ์/google/felix-kernel Android-gs-felix-5.10-Android14-Qpr3 Android 13-5.10
Pixel Tablet (Tangorpro) อุปกรณ์/google/tangorpro-kernel Android-gs-tangorpro-5.10-Android14-Qpr3 Android 13-5.10
Pixel 7a (Lynx) อุปกรณ์/google/lynx-kernel Android-gs-lynx-5.10-android14-Qpr3 Android 13-5.10
Pixel 7 (เสือดำ)
Pixel 7 Pro (เสือชีตาห์)
อุปกรณ์/google/pantah-kernel Android-gs-pantah-5.10-Android14-Qpr3 Android 13-5.10
Pixel 6a (บลูเจย์) อุปกรณ์/google/bluejay-kernel Android-gs-bluejay-5.10-android14-Qpr3 Android 13-5.10
Pixel 6 (ออริโอล)
Pixel 6 Pro (นกกาเหว่า)
อุปกรณ์/google/raviole-kernel Android-gs-raviole-5.10-android14-Qpr3 Android 13-5.10

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

การรองรับแพลตฟอร์ม Pixel 6/6 Pro สำหรับ Android และการผสมผสานเคอร์เนล
สาขาไฟล์ Manifest ของเคอร์เนล Pixel สาขา GKI บิลด์แพลตฟอร์ม Android รองรับ aosp-main ไหม
gs-android-gs-raviole-mainline Android-mainline (v6.8) AP1A.240505.004 (11583682) ได้
android14-gs-pixel-6.1 Android 14-6.1 AP1A.240505.004 (11583682) ได้
gs-android13-gs-raviole-5.15 Android 13-5.15 TQ1A.230205.002 (9471150) ไม่ได้

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

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

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

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

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

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

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

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

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

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

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

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

ตัวเลือกที่ 1) ดึงอิมเมจ RAM ของผู้ให้บริการจากอิมเมจเริ่มต้นของ 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 ของผู้ให้บริการ

      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 (นกกาเหว่า)
    สิ่งที่สร้างไว้ล่วงหน้า/บูต-สิ่งประดิษฐ์/ramdisks/vendor_ramdisk-oriole.img
    Pixel 6a (บลูเจย์) ส่วนตัว/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 (นกกาเหว่า)
สิ่งที่สร้างไว้ล่วงหน้า/บูต-สิ่งประดิษฐ์/ramdisks/vendor_ramdisk-oriole.img
Pixel 6a (บลูเจย์) ส่วนตัว/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 เช่น หากต้องการสร้างเคอร์เนลสำหรับ Pixel 6 บน Branch 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 (ออรีโอล)
Pixel 6 Pro (นกเรเวน)
Pixel 6a (น้ำเงินบลูเจย์)
Boot
dtbo
vendor_boot
vendor_dlkm (พาร์ติชันแบบไดนามิก)
Pixel 8 (ชิบะ)
Pixel 8 Pro (ฮัสกี)
Pixel Fold (felix)
Pixel แท็บเล็ต (tangorpro)
Pixel 7a (lynx)
Pixel 7 (เสือดำ)
Pixel 7 Pro (เสือชีตาห์)
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 vendor_boot out/slider/dist/vendor_boot.img
fastboot reboot fastboot
fastboot flash vendor_dlkm out/slider/dist/vendor_dlkm.img

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

สาขาเคอร์เนล DIST_DIR
เวอร์ชัน 5.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)
อุปกรณ์/google/redbull-kernel Android-MSm-redbull-4.19-Android14-Qpr3
Pixel 4a (ปลาซันฟิช) อุปกรณ์/google/sunfish-kernel Android-MSm-sunfish-4.14-android13-Qpr3
Pixel 4 (เปลวไฟ)
Pixel 4 XL (ส้มแดงคอรัล)
อุปกรณ์/google/coral-kernel Android-MSm-coral-4.14-Android13
Pixel 3a (ซาร์โก)
Pixel 3a XL (bonito)
อุปกรณ์/google/bonito-kernel Android-MSm-bonito-4.9-Android12L
Pixel 3 (สีน้ำเงิน)
Pixel 3 XL (สายครอส)
อุปกรณ์/google/crosshatch-kernel Android-MSm-crosshatch-4.9-Android12
Pixel 2 (วอลเลย์)
Pixel 2 XL (ไทเมน)
อุปกรณ์/google/wahoo-kernel Android-MSm-wahoo-4.4-Android10-Qpr3
Pixel (ปลากระโทงร่ม)
Pixel XL (มาร์ลิน)
อุปกรณ์/google/marlin-kernel Android-MSm-Marlin-3.18-Pie-Qpr2