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

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

Pixel 6 और Pixel 6 Pro पर भी अपस्ट्रीम Linux कर्नल काम करता है. साथ ही, ये सिर्फ़ अपस्ट्रीम ड्राइवर की मदद से डिवाइस शेल प्रॉम्प्ट पर बूट हो सकते हैं. ज़्यादा जानकारी के लिए, अपस्ट्रीम Pixel कर्नल को बिल्ड और फ़्लैश करना लेख पढ़ें.

GKI Pixel कर्नल बनाना और उन्हें फ़्लैश करना

इस सेक्शन में, GKI के साथ काम करने वाली कर्नल ब्रांच को सिंक करने, बनाने, और फ़्लैश करने का तरीका बताया गया है. यहां दी गई टेबल में, Pixel के उन डिवाइसों की मैपिंग दी गई है जिन पर यह सुविधा काम करती है. साथ ही, उनके प्रोडक्शन कर्नल रिपॉज़िटरी ब्रांच के बारे में बताया गया है.

GKI के साथ काम करने वाली Pixel कर्नेल ब्रांच

डिवाइस रिपॉज़िटरी की शाखाएं 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 डिवाइसों पर जीकेआई को सिर्फ़ Android Common कर्नेल की उन ब्रांच के साथ डेवलप किया जा सकता है जो Pixel 6 और Pixel 6 Pro के Android प्लैटफ़ॉर्म और कर्नेल के साथ काम करने वाले कॉम्बिनेशन टेबल में शामिल हैं. Android प्लैटफ़ॉर्म के HAL और Pixel कर्नल ड्राइवर के बीच वेंडर यूएपीआई में अंतर होने की वजह से, टेबल में काम करने वाले बिल्ड कॉम्बिनेशन दिए गए हैं.

Pixel 6 और Pixel 6 Pro के लिए, Android प्लैटफ़ॉर्म और कर्नल के काम करने वाले कॉम्बिनेशन
Pixel Kernel Manifest Branch GKI ब्रांच 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)

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

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

**पहली इमेज.** कर्नेल अपडेट करने का फ़्लो चार्ट

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

  1. flash.android.com पर जाएं.
  2. Android के साथ काम करने वाले प्लैटफ़ॉर्म और कर्नल के कॉम्बिनेशन के आधार पर, Android बिल्ड चुनें.
    • android-latest-release के लिए, "Back to Public", Canary या Beta में से कोई एक चुनें.
  3. इन विकल्पों में से चुनें:
    • डिवाइस वाइप करें
    • सभी पार्टिशन के लिए Flash करें
    • पुष्टि करने की सुविधा बंद करना
  4. डिवाइस को फ़्लैश करने के लिए, बिल्ड इंस्टॉल करें बटन दबाएं.

**इमेज 2.** फ़्लैश स्टेशन का उदाहरण

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

कर्नल के सोर्स कोड को डाउनलोड करने के लिए, ये कमांड चलाएं. Pixel KERNEL_MANIFEST_BRANCH के लिए, Pixel 6 और Pixel 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) या इसके बाद के वर्शन का इस्तेमाल किया जा रहा है, तो पहले विकल्प का इस्तेमाल करें. अगर ऐसा नहीं है, तो विकल्प (2) का इस्तेमाल करें.

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

    fastboot के 35.0.2-12583183 वर्शन से, vendor_boot पार्टिशन पर डीटीबी और डीएलकेएम रैमडिस्क को सीधे तौर पर फ़्लैश किया जा सकता है. इस विकल्प का इस्तेमाल करने के लिए, अपने Android प्लेटफ़ॉर्म-टूल को v36.0.0 या इसके बाद के वर्शन पर अपग्रेड करें. इसके लिए, यह कमांड चलाएं:

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

    डीटीबी को फ़्लैश करने और 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 कर्नल रिपॉज़िटरी में कॉपी करें.

      डिवाइस 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
      

कर्नेल को कंपाइल करना

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 और इससे पहले के वर्शन के लिए, 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 - Building Android Kernels with Bazel लेख पढ़ें.

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

ध्यान दें: अगर आपने पुष्टि करने की सुविधा बंद नहीं की है, तो आपको कस्टम कर्नल फ़्लैश करने से पहले ऐसा करना होगा. इसके लिए, यह कमांड इस्तेमाल करें:
fastboot oem disable-verification
चेतावनी: अगर किसी प्लैटफ़ॉर्म बिल्ड पर कस्टम कर्नल फ़्लैश किया जा रहा है, तो आपको अपने डिवाइस का डेटा मिटाना पड़ सकता है. ऐसा तब करना पड़ सकता है, जब नए कर्नल से जुड़ा सुरक्षा पैच लेवल (एसपीएल) डाउनग्रेड हो गया हो. इस प्रोसेस से, आपका पूरा निजी डेटा मिट जाता है. डेटा मिटाने से पहले, उसका बैक अप ज़रूर लें.
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 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 (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  --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, Pixel 6 Pro, और Pixel 6a के लिए, vendor_ramdisk को Update the vendor ramdisk में अपडेट किया है, तो vendor_boot पार्टीशन को अपडेट करने के लिए, इस कमांड का इस्तेमाल करें:

fastboot flash vendor_boot out/slider/dist/vendor_boot.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 6 और Pixel 6 Pro, अपस्ट्रीम Linux कर्नल के साथ काम करते हैं. इसलिए, कर्नल डेवलपमेंट के लिए, डिवाइस शेल प्रॉम्प्ट को बूट करने के लिए, सिर्फ़ अपस्ट्रीम ड्राइवर के साथ android-mainline का इस्तेमाल किया जा सकता है. इस सेक्शन में, android-mainline से Pixel 6 और Pixel 6 Pro के कर्नल को सिंक करने, बनाने, और फ़्लैश करने का तरीका बताया गया है.

शुरू करने के लिए, यहां दिया गया तरीका अपनाएं.

  1. अपने Pixel डिवाइस को सेट अप करें में दिए गए निर्देशों का पालन करके, अपने डिवाइस को सेट अप करें
  2. कर्नल रिपॉज़िटरी सिंक करना में दिया गया तरीका अपनाकर, common-android-mainline कर्नल मेनिफ़ेस्ट ब्रांच को सिंक करें.
  3. Kleaf के बिल्ड टारगेट कॉन्फ़िगरेशन को KERNEL_REPO_ROOT/devices/google/raviole पाथ के तहत तय किया जाता है. raviole_upstream बिल्ड टारगेट को कंपाइल करने के लिए, Kleaf कमांड चलाएं:

    tools/bazel run //devices/google/raviole:raviole_upstream_dist
    
  4. प्रोडक्शन कर्नल की तरह ही, Android फ़ैक्ट्री इमेज के ऊपर कस्टम कर्नल फ़्लैश करते समय, पुष्टि करने की सुविधा बंद करें और अपने डिवाइस का डेटा मिटाएं. ज़्यादा जानकारी के लिए, कर्नेल इमेज फ़्लैश करना में दी गई ज़रूरी जानकारी देखें.

  5. फ़ास्टबूट मोड में, कर्नल इमेज फ़्लैश करने के लिए ये कमांड चलाएं:

    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. डिवाइस के शेल प्रॉम्प्ट को ऐक्सेस करने के लिए, डिवाइस को रिकवरी मोड में रीबूट किया जा सकता है. इसके लिए, यह कमांड चलाएं:

    fastboot reboot recovery
    

    adb shell कमांड चलाकर, डिवाइस शेल खोलें. रूट ऐक्सेस पाने के लिए, adb root कमांड का इस्तेमाल भी किया जा सकता है.

लेगसी 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 (सनफ़िश) 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