डिबग रैमडिस्क के साथ वीटीएस परीक्षण

एंड्रॉइड 10 के बाद से, सीटीएस-ऑन-जीएसआई/वीटीएस अनुपालन परीक्षण चलाने के लिए उपयोग की जाने वाली जेनेरिक सिस्टम इमेज (जीएसआई) को रिलीज़ साइन किए जाने के लिए यूजरडिबग से यूजर बिल्ड प्रकार में बदल दिया गया है। यह वीटीएस परीक्षण के लिए एक समस्या है क्योंकि वीटीएस को चलाने के लिए adb root आवश्यकता होती है, लेकिन उपयोगकर्ता बिल्ड डिवाइस पर adb root उपलब्ध नहीं है।

डिबग रैमडिस्क (या डिबग बूट इमेज) को उपयोगकर्ता बिल्ड डिवाइस पर adb root सक्षम करने के लिए पेश किया गया है जिसका बूटलोडर अनलॉक है। यह सीटीएस-ऑन-जीएसआई और वीटीएस-ऑन-जीएसआई के लिए समान उपयोगकर्ता निर्मित जीएसआई system.img का उपयोग करके परीक्षण प्रवाह को सरल बनाता है। STS सेटअप के लिए, किसी अन्य userdebug OEM system.img उपयोग करना अभी भी आवश्यक है।

निम्न तालिका एंड्रॉइड 10 में अनुपालन परीक्षण के लिए छवि और बिल्ड प्रकार में परिवर्तन दिखाती है।

परीक्षण सूट के साथ परीक्षण करें निर्माण रैमडिस्क को डिबग करें एडीबी जड़? एंड्रॉइड 9 -> 10 बिल्ड वेरिएंट में बदलाव
सीटीएस OEM की प्रणाली उपयोगकर्ता एन एन कोई परिवर्तन नहीं होता है
सीटीएस-ऑन-जीएसआई जीएसआई उपयोगकर्ता एन एन

यूजरडीबग -> यूजर जीएसआई

रिहाई पर हस्ताक्षर किये गये

अनुसूचित जनजातियों OEM की प्रणाली userdebug एन वाई Q में नया
वीटीएस जीएसआई उपयोगकर्ता वाई वाई

यूजरडीबग -> यूजर जीएसआई

रिहाई पर हस्ताक्षर किये गये

अवलोकन

ये अतिरिक्त छवि फ़ाइलें बिल्ड फ़ोल्डर ( ${ANDROID_PRODUCT_OUT} ) के अंतर्गत उत्पन्न होती हैं:

  • boot-debug.img
  • vendor_boot-debug.img

जब boot-debug.img डिवाइस के boot पार्टीशन पर फ्लैश किया जाता है, तो सिस्टम सेपॉलिसी फ़ाइल का यूजरडीबग संस्करण और एक अतिरिक्त प्रॉपर्टी फ़ाइल, adb_debug.prop लोड हो जाती है। यह उपयोगकर्ता बिल्ड system.img (या तो GSI या OEM) के साथ adb root अनुमति देता है।

जेनेरिक कर्नेल इमेज (जीकेआई) के लिए vendor_boot विभाजन वाले उपकरणों का उपयोग करते हुए, boot-debug.img फ्लैश नहीं किया जाना चाहिए, क्योंकि boot विभाजन को प्रमाणित जीकेआई छवि के साथ फ्लैश किया जाना चाहिए। इसके बजाय रैमडिस्क को डीबग करने की सुविधा के लिए vendor_boot-debug.img vendor_boot विभाजन पर फ्लैश किया जाना चाहिए।

डिबग रैमडिस्क का उपयोग करने के लिए पूर्वावश्यकताएँ

डिबग रैमडिस्क अनुपालन परीक्षण चलाने वाले OEM द्वारा प्रदान किया जाता है। इसे रिलीज़ हस्ताक्षरित नहीं होना चाहिए, और इसका उपयोग केवल तभी किया जा सकता है जब डिवाइस अनलॉक हो।

डिबग रैमडिस्क उत्पन्न नहीं किया जाएगा या उपकरणों को अपग्रेड करने के लिए उपयोग नहीं किया जाएगा:

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE सत्य
  • कर्नेल कमांड लाइन में skip_initramfs

एंड्रॉइड 12 जीएसआई

Android 12 GSI के साथ डिबग रैमडिस्क का उपयोग करने के लिए किसी अतिरिक्त निर्देश की आवश्यकता नहीं है।

09/29/2021 से शुरू होकर, डिबग रैमडिस्क को अब repack_bootimg टूल के साथ अपडेट करने की आवश्यकता नहीं है। SGR1.210929.001 (7777720) के बाद Android 12 GSI बिल्ड अपने system.img में अप-टू-डेट userdebug_plat_sepolicy.cil फ़ाइल को शामिल करता है और डिबग रैमडिस्क से userdebug_plat_sepolicy.cil अनदेखा करता है। विवरण के लिए सीएल देखें।

एंड्रॉइड 11 जीएसआई

जब boot-debug.img या vendor_boot-debug.img उपयोग किया जाता है, तो सिस्टम सेपॉलिसी को boot-debug.img या vendor_boot-debug.img के डीबग रैमडिस्क में userdebug_plat_sepolicy.cil फ़ाइल से लोड किया जाता है। जीएसआई छवियों को बूट करने के लिए, कृपया अपने boot-debug.img या vendor_boot-debug.img फिर से बनाने के लिए हमेशा android11-gsi शाखा से अद्यतित सेपॉलिसी परिवर्तनों को शामिल करें।

वैकल्पिक रूप से, अद्यतन जीएसआई सेपॉलिसी के साथ boot-debug.img या vendor_boot-debug.img फिर से बनाने के लिए repack_bootimg टूल का उपयोग किया जा सकता है।

डिबग रैमडिस्क को दोबारा पैक करें

boot-debug.img को फिर से बनाने के लिए sepolicy परिवर्तनों को शामिल करने के बजाय, भागीदार GSI sepolicy फ़ाइल को boot-debug.img (या यदि डिवाइस GKI का उपयोग करता है तो vendor_boot-debug.img ) में अपडेट करने के लिए repack_bootimg का उपयोग कर सकते हैं।

चरण इस प्रकार हैं:

  1. https://ci.android.com से otatools.zip डाउनलोड करें। हम aosp-main पर aosp_arm64-userdebug के बिल्ड आर्टिफैक्ट से डाउनलोड करने की सलाह देते हैं।

  2. repack_bootimg के लिए निष्पादन वातावरण सेटअप करें:

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
    
  3. आप जिस GSI बिल्ड का उपयोग कर रहे हैं, उससे userdebug_plat_sepolicy.cil या boot-with-debug-ramdisk-${KERNEL_VERSION}.img डाउनलोड करें। उदाहरण के लिए, यदि आप RJR1.211020.001 (7840830) से Arm64 GSI का उपयोग कर रहे हैं, तो https://ci.android.com/builds/submitted/ 7840830 /aosp_arm64-user/latest से डाउनलोड करें।

  4. userdebug_plat_sepolicy.cil के साथ डिवाइस को boot-debug.img या vendor_boot-debug.img अपडेट करें:

    repack_bootimg --local --dst_bootimg boot-debug.img \
        --ramdisk_add userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \
        --ramdisk_add userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
    # If using GKI
    repack_bootimg --local --dst_bootimg vendor_boot-debug.img \
        --ramdisk_add userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \
        --ramdisk_add userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
    

    boot-with-debug-ramdisk-${KERNEL_VERSION}.img के साथ:

    repack_bootimg --src_bootimg boot-with-debug-ramdisk-5.4.img \
        --dst_bootimg boot-debug.img \
        --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \
        --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
    # If using GKI
    repack_bootimg --src_bootimg boot-with-debug-ramdisk-5.4.img \
        --dst_bootimg vendor_boot-debug.img \
        --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \
        --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
    

    --ramdisk_add के तर्कों को डिवाइस कॉन्फ़िगरेशन के अनुसार समायोजित किया जा सकता है। विस्तृत विवरण के लिए अगला भाग देखें।

यूजरडिबग सेपॉलिसी का पथ

उपरोक्त repack_bootimg फ़ाइल userdebug_plat_sepolicy.cil को --src_bootimg के रैमडिस्क से --dst_bootimg के रैमडिस्क में कॉपी करता है। हालाँकि, डिबग रैमडिस्क के भीतर का पथ विभिन्न एंड्रॉइड संस्करणों में भिन्न हो सकता है। एंड्रॉइड 10 और 11 में, कर्नेल कमांड लाइन में androidboot.force_normal_boot=1 वाले डिवाइस के लिए पथ first_stage_ramdisk/userdebug_plat_sepolicy.cil है। अन्यथा, पथ userdebug_plat_sepolicy.cil है।

यह जाँचने के लिए कि कर्नेल कमांड लाइन में androidboot.force_normal_boot है या नहीं, निम्न कमांड चलाएँ:

adb root
adb shell cat /proc/cmdline | grep force_normal_boot

एंड्रॉइड 12 से शुरू करके, डिबग रैमडिस्क के भीतर पथ हमेशा userdebug_plat_sepolicy.cil है, भले ही कर्नेल कमांड लाइन में androidboot.force_normal_boot=1 का अस्तित्व कुछ भी हो। निम्न तालिका विभिन्न एंड्रॉइड संस्करणों में डिबग रैमडिस्क के भीतर पथ दिखाती है।

डीबग छवि एंड्रॉइड 10 एंड्रॉइड 11 एंड्रॉइड 12
GKI बूट-विथ-डीबग-रैमडिस्क-${KERNEL_VERSION}.img एन/ए first_stage_ramdisk/userdebug_plat_sepolicy.cil userdebug_plat_sepolicy.cil
डिवाइस-विशिष्ट बूट-डीबग.img Force_सामान्य_बूट पर निर्भर करता है Force_सामान्य_बूट पर निर्भर करता है userdebug_plat_sepolicy.cil
डिवाइस-विशिष्ट विक्रेता_बूट-डीबग.img एन/ए Force_सामान्य_बूट पर निर्भर करता है userdebug_plat_sepolicy.cil

आप src_path:dst_path जोड़े की सूची के साथ फ़ाइलों को विभिन्न पथों से कॉपी करने के लिए --ramdisk_add निर्दिष्ट कर सकते हैं। उदाहरण के लिए, निम्न कमांड एंड्रॉइड 11 boot-with-debug-ramdisk-5.4.img से first_stage_ramdisk/userdebug_plat_sepolicy.cil first_stage_ramdisk/userdebug_plat_sepolicy.cil फाइल को एंड्रॉइड 11 vendor_boot-debug.img के भीतर फर्स्ट_स्टेज_रामडिस्क/यूजरडेबग_प्लेट_सेपॉलिसी.सिल में कॉपी करता है।

repack_bootimg \
    --src_bootimg boot-with-debug-ramdisk-5.4.img \
    --dst_bootimg vendor_boot-debug.img \
    --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil

यदि कर्नेल कमांड लाइन में कोई androidboot.force_normal_boot=1 नहीं है, तो गंतव्य पथ को userdebug_plat_sepolicy.cil में बदलने के लिए कमांड को नीचे दिए अनुसार समायोजित किया जाना चाहिए।

repack_bootimg \
    --src_bootimg boot-with-debug-ramdisk-5.4.img \
    --dst_bootimg vendor_boot-debug.img \
    --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil

यदि --dst_bootimg को पास की गई छवि को AVB-श्रृंखला विभाजन के रूप में कॉन्फ़िगर किया गया है, तो repack_bootimg कमांड चलाने के बाद एक AVB पाद लेख जोड़ने की आवश्यकता है।

उदाहरण के लिए, repack_bootimg चलाने से पहले , यह जांचने के लिए निम्न कमांड चलाएँ कि क्या एक vendor_boot-debug.img में एक जंजीर AVB पादलेख है।

avbtool info_image --image vendor_boot-debug.img

यदि इसमें मूल रूप से एक जंजीर AVB पाद लेख है, तो repack_bootimg कमांड चलाने के बाद एक AVB पाद लेख जोड़ने की आवश्यकता है। vendor_boot-debug.img हस्ताक्षर करने के लिए किसी भी परीक्षण कुंजी का उपयोग करना काम करता है क्योंकि डिबग रैमडिस्क का उपयोग केवल तभी किया जा सकता है जब कोई डिवाइस अनलॉक हो, जो boot या vendor_boot विभाजन पर गैर-रिलीज़ कुंजी हस्ताक्षरित छवियों की अनुमति देता है।

avbtool add_hash_footer --partition_name vendor_boot \
    --partition_size 100663296 \
    --algorithm SHA256_RSA4096 \
    --key otatools/external/avb/test/data/testkey_rsa4096.pem \
    --image vendor_boot-debug.img