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

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

Pixel 6/6 Pro के लिए, Android प्लैटफ़ॉर्म और कर्नल के साथ काम करने वाले कॉम्बिनेशन
Pixel Kernel Manifest Branch 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 और इसके बाद के डिवाइसों पर कर्नल अपडेट करने की प्रोसेस के बारे में बताया गया है:

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

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

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

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

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

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

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

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

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

    Flash the kernel images में, डीटीबी और 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
      

कर्नेल को कंपाइल करना (Kleaf)

Android 13 में, build.sh स्क्रिप्ट की जगह Kleaf नाम का नया कर्नल बिल्ड सिस्टम इस्तेमाल किया गया है. android13-5.15 और इसके बाद के वर्शन का इस्तेमाल करने वाले डिवाइसों के लिए, कर्नल को Kleaf का इस्तेमाल करके बनाया जाना चाहिए.

आसानी के लिए, KERNEL_REPO_ROOT पर मौजूद build_DEVICE.sh स्क्रिप्ट को चलाया जा सकता है. ज़्यादातर मामलों में, 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 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/6 Pro/6a के लिए, अगर आपने Update the vendor ramdisk सेक्शन में 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 के पुराने कर्नल ब्रांच टेबल में, 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