Pixel कर्नेल बनाएं

इस गाइड में, डेवलपमेंट के लिए कस्टम Pixel कर्नेल को डाउनलोड करने, कॉम्पाइल करने, और फ़्लैश करने का तरीका बताया गया है. GKI की मदद से, अब Android प्लैटफ़ॉर्म के बिल्ड के अलावा, अलग से भी कर्नेल को अपडेट किया जा सकता है. यह तरीका सिर्फ़ Pixel 6 और उसके बाद के वर्शन वाले डिवाइसों पर लागू होता है. ऐसा इसलिए है, क्योंकि Pixel 5 और इससे पहले के डिवाइसों के लिए, vendor पार्टीशन पर मौजूद कर्नेल मॉड्यूल को अपडेट करना ज़रूरी है. यह उन डिवाइसों के लिए Android प्लैटफ़ॉर्म के बिल्ड पर निर्भर करता है. GKI के साथ काम करने वाले Pixel के kernel की शाखाएं टेबल में, GKI के साथ काम करने वाले हर Pixel डिवाइस के लिए, kernel के मेनिफ़ेस्ट की शाखा शामिल होती है. Pixel 5 और इससे पहले के वर्शन के लिए, लेगसी Pixel केनरल सेक्शन देखें.

GKI के साथ काम करने वाले Pixel के कर्नेल की शाखाएं
डिवाइस 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 (oriole)
Pixel 6 Pro (raven)
device/google/raviole-kernels/5.10 android-gs-raviole-5.10-android15-qpr1 android15-5.10

फ़ैक्ट्री में पहले से मौजूद कर्नेल के अलावा, Pixel 6 और 6 Pro डिवाइसों पर GKI को डेवलप करने के लिए, सिर्फ़ उन Android कॉमन कर्नेल ब्रैंच का इस्तेमाल किया जा सकता है जो Pixel 6/6 Pro पर काम करने वाले Android प्लैटफ़ॉर्म और कर्नेल के कॉम्बिनेशन टेबल में शामिल हैं. Android प्लैटफ़ॉर्म के HAL और Pixel के kernel ड्राइवर के बीच, वेंडर के UAPI में अंतर होने की वजह से, टेबल में काम करने वाले बिल्ड कॉम्बिनेशन दिए गए हैं.

Pixel 6/6 Pro पर काम करने वाले Android प्लैटफ़ॉर्म और कर्नेल के कॉम्बिनेशन
Pixel Kernel मेनिफ़ेस्ट की शाखा GKI Branch Android प्लैटफ़ॉर्म बिल्ड aosp-main की सहायता टीम से संपर्क करें?
gs-android-gs-raviole-mainline android-mainline (v6.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) नहीं

अपना Pixel डिवाइस सेट अप करें

नीचे दिए गए फ़्लो चार्ट में, Pixel 6 और उसके बाद के वर्शन वाले डिवाइसों पर, कर्नेल को अपडेट करने की प्रोसेस के बारे में बताया गया है:

**पहला चित्र.** Kernel Update Flow Chart

flash.android.com का इस्तेमाल करके, डिवाइस को फ़्लैश करना

  1. flash.android.com पर जाएं
  2. काम करने वाले Android प्लैटफ़ॉर्म और कर्नेल के कॉम्बिनेशन के आधार पर, Android बिल्ड चुनें.
  3. ये विकल्प चुनें:
    • डिवाइस वाइप करें
    • सभी पार्टीशन को ज़बरदस्ती फ़्लैश करना
    • पुष्टि करने की सुविधा बंद करना
  4. डिवाइस को फ़्लैश करने के लिए, बिल्ड इंस्टॉल करें बटन दबाएं.

**दूसरा चित्र.** फ़्लैश स्टेशन का उदाहरण

कर्नेल डाउनलोड और कंपाइल करना

कर्नेल रिपॉज़िटरी को सिंक करना

कर्नेल का सोर्स कोड डाउनलोड करने के लिए, ये कमांड चलाएं. PixelKERNEL_MANIFEST_BRANCH के लिए, Pixel 6/6 Pro पर काम करने वाले Android प्लैटफ़ॉर्म और कर्नेल के कॉम्बिनेशन टेबल देखें.

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

वेंडर का रैमडिस्क अपडेट करना

डिवाइस पर फ़्लैश किए गए Android प्लैटफ़ॉर्म बिल्ड से मैच करने के लिए, कोर रिपॉज़िटरी में मौजूद फ़ाइल vendor_ramdisk-DEVICE.img को अपडेट करें. vendor_ramdisk-DEVICE.img फ़ाइल को अपडेट करने के लिए, कुछ विकल्प हैं. अगर आपके डिवाइस पर Android 15 QPR2 (BP11.241025.006) या इसके बाद का वर्शन है, तो विकल्प (1) का इस्तेमाल करें. अगर ऐसा नहीं है, तो विकल्प (2) का इस्तेमाल करें.

  • पहला विकल्प) vendor_boot पार्टीशन के सिर्फ़ DTB और DLKM ramdisk बिट अपडेट करें

    fastboot के 35.0.2-12583183 वर्शन से, vendor_boot पार्टीशन पर DTB और DLKM ramdisk को सीधे फ़्लैश किया जा सकता है. इस्तेमाल करने के लिए, v35.0.2-12583183 आर्टफ़ैक्ट से sdk-repo-HOST_OS-platform-tools-12583183.zip को डाउनलोड और निकालकर, अपनी होस्ट मशीन के एनवायरमेंट में डालें.

    कर्नल इमेज फ़्लैश करें में जाकर, DTB और vendor_boot:dlkm को फ़्लैश करने के लिए दिए गए निर्देशों का पालन करें.

  • दूसरा विकल्प) 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 को अनपैक करें.

        KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \
            --out vendor_boot_out
      
    4. निकाली गई vendor-ramdisk-by-name/ramdisk_ फ़ाइल को Pixel के kernel repository में कॉपी करें.

      डिवाइस 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 का इस्तेमाल करके कर्नेल बनाया जाना चाहिए.

android13-5.15 कर्नेल वाले Pixel 6 और 6 Pro के लिए, Kleaf का बाइल्ड कमांड चलाएं:

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

Pixel के अन्य सभी कर्नेल के लिए, KERNEL_REPO_ROOT पर मौजूद build_DEVICE.sh स्क्रिप्ट चलाएं. ज़्यादातर मामलों में, DEVICE कोड का वह नाम होना चाहिए जो GKI के साथ काम करने वाले Pixel के kernel की शाखाओं वाली टेबल के AOSP ट्री में बाइनरी पाथ कॉलम में इस्तेमाल किए गए कोड के नाम से मेल खाता हो. यह किसी एक डिवाइस का कोड नेम हो सकता है, जैसे कि "akita" (Pixel 8a) या एक ही कोर के साथ काम करने वाले डिवाइसों के ग्रुप का कोड नेम, जैसे कि "caimito". इसका मतलब है कि Pixel 9 (tokay), Pixel 9 Pro (caiman), और Pixel 9 Pro XL (komodo). android14 और उससे पहले के रिलीज़ के लिए, Pixel 6 और Pixel 6 Pro के लिए build_slider.sh और Pixel 7 और Pixel 7 Pro के लिए build_cloudripper.sh का इस्तेमाल करें.

उदाहरण के लिए, android-gs-raviole-5.10-android14 शाखा पर Pixel 6 के लिए कर्नेल बनाने के लिए, यह कमांड चलाएं:

build_slider.sh

प्रोडक्शन कर्नेल की शाखाओं पर डिफ़ॉल्ट रूप से, build_DEVICE.sh स्क्रिप्ट, पहले से बने GKI कर्नेल का इस्तेमाल करती हैं, ताकि बिल्ड प्रोसेस को तेज़ किया जा सके. अगर आपको कोर कर्नेल में बदलाव करना है, तो स्थानीय सोर्स से कर्नेल बनाने के लिए, एनवायरमेंट वैरिएबल BUILD_AOSP_KERNEL=1 सेट करें. डेवलपमेंट कर्नेल की शाखाएं, डिफ़ॉल्ट रूप से सीधे कर्नेल सोर्स बनाती हैं.

कर्नेल बिल्ड सिस्टम और बिल्ड को पसंद के मुताबिक बनाने के तरीके के बारे में ज़्यादा जानने के लिए, Kleaf - Bazel की मदद से Android कर्नेल बनाना लेख पढ़ें.

कर्नेल इमेज फ़्लैश करना

ध्यान दें: अगर आपने पुष्टि करने की सुविधा बंद नहीं की है, तो कस्टम कर्नेल को फ़्लैश करने से पहले, आपको इसे बंद करना होगा. ऐसा करने के लिए, यह कमांड इस्तेमाल करें:
fastboot oem disable-verification
चेतावनी: अगर किसी प्लैटफ़ॉर्म के बिल्ड के ऊपर कस्टम कर्नेल फ़्लैश किया जा रहा है, तो हो सकता है कि आपको अपने डिवाइस को मिटाना पड़े. ऐसा तब होगा, जब नए कर्नेल के साथ सुरक्षा पैच लेवल (एसपीएल) का डाउनग्रेड हो. इस प्रोसेस से आपका सारा निजी डेटा मिट जाता है. डेटा मिटाने से पहले, उसका बैक अप ज़रूर लें.
fastboot -w

कर्नेल इमेज फ़्लैश करने के लिए, अपने डिवाइस के लिए दिए गए हर कर्नेल partition के लिए fastboot flash कमांड चलाएं. डाइनैमिक पार्टीशन के लिए, आपको फ़्लैश करने से पहले, fastbootd मोड में रीबूट करना होगा.

डिवाइस कर्नेल के सेगमेंट
Pixel 6 (oriole)
Pixel 6 Pro (raven)
Pixel 6a (bluejay)
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 (डाइनैमिक पार्टीशन)
system_dlkm (डाइनैमिक पार्टीशन)

Pixel 6/6 Pro/6a के लिए, अगर आपने वेंडर का रैमडиск अपडेट करें सेक्शन में vendor_ramdisk डाउनलोड नहीं किया है, तो vendor_boot.img इमेज को फ़्लैश करने के बजाय, DTB और DLKM रैमडиск को अपडेट करने के लिए, नीचे दिए गए कमांड का इस्तेमाल करें:

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

android-mainline पर Pixel 6 के लिए, फ़्लैश करने के निर्देश यहां दिए गए हैं:

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
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 के kernel की शाखाएं टेबल में, Pixel 5 और उससे पहले के वर्शन वाले डिवाइसों के लिए, kernel की रिपॉज़िटरी की शाखाएं दी गई हैं. ये ऐसे डिवाइस हैं जिन पर 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 (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