एंड्रॉइड 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
का उपयोग कर सकते हैं।
चरण इस प्रकार हैं:
https://ci.android.com से
otatools.zip
डाउनलोड करें। हमaosp-master
परaosp_arm64-userdebug
के बिल्ड आर्टिफैक्ट से डाउनलोड करने की सलाह देते हैं।repack_bootimg
के लिए निष्पादन वातावरण सेटअप करें:unzip otatools.zip -d otatools
export PATH="${PWD}/otatools/bin:${PATH}"
repack_bootimg --help
आप जिस 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 से डाउनलोड करें।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
एक AVB फ़ुटर जोड़ें
यदि --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