ডিবাগ র‍্যামডিস্ক সহ VTS টেস্টিং

Android 10 ও এর পরের যেকোনও ভার্সনে, রিলিজ সাইন করার জন্য CTS-on-GSI/VTS কমপ্লায়েন্স টেস্টিং চালানোর জন্য ব্যবহৃত জেনারেটিক সিস্টেম ইমেজ (GSI) পরিবর্তন করে ইউজার ডিবাগ থেকে ইউজার বিল্ড টাইপ করা হয়েছে। VTS টেস্টিংয়ের ক্ষেত্রে এটি একটি সমস্যা কারণ VTS চালানোর জন্য adb root প্রয়োজন, কিন্তু adb root ব্যবহারকারীর বিল্ড ডিভাইসে উপলভ্য নয়।

ব্যবহারকারীর তৈরি করা ডিভাইসে adb root চালু করার জন্য ডিবাগ র‍্যামডিস্ক (বা ডিবাগ বুট ইমেজ) চালু করা হয়েছে, যার বুটলোডার আনলক করা। এটি CTS-on-GSI এবং VTS-on-GSI-এর জন্য একই ব্যবহারকারীর তৈরি করা GSI system.img ব্যবহার করে টেস্টিং ফ্লোকে সহজ করে তোলে। STS সেট-আপের জন্য, অন্য userdebug OEM system.img এখনও প্রয়োজন।

নিচের সারণীতে Android 10-এ কমপ্লায়েন্স টেস্টিংয়ের জন্য ইমেজ ও বিল্ডের ধরনের পরিবর্তন দেখানো হয়েছে।

টেস্ট স্যুট এটি দিয়ে টেস্ট করুন বিল্ড Debug ramdisk adb root? Android 9 -> 10 বিল্ড ভ্যারিয়েন্ট পরিবর্তন
CTS OEM-এর সিস্টেম ব্যবহারকারী না না কোনও পরিবর্তন হয়নি
CTS-on-GSI GSI ব্যবহারকারী না না

userdebug -> user GSI

রিলিজ স্বাক্ষরিত হয়েছে

STS OEM-এর সিস্টেম userdebug না Y Q ভার্সনে নতুন
VTS GSI ব্যবহারকারী Y Y

userdebug -> user GSI

রিলিজ সাইন করা হয়েছে

এক নজরে

এইসব অতিরিক্ত ছবির ফাইল বিল্ড ফোল্ডারে তৈরি করা হয় (${ANDROID_PRODUCT_OUT}):

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

ডিভাইসের boot পার্টিশনে boot-debug.img ফ্ল্যাশ করা হলে, সিস্টেম sepolicy ফাইলের userdebug ভার্সন এবং একটি অতিরিক্ত প্রপার্টি ফাইল, adb_debug.prop, লোড করা হয়। এটি ব্যবহারকারীর বিল্ড system.img (GSI বা OEM) সহ adb root-কে অনুমতি দেয়।

vendor_boot পার্টিশন আছে এমন ডিভাইস ব্যবহার করে জেনেরিক কার্নেল ইমেজ (GKI)-এর জন্য boot-debug.img ফ্ল্যাশ করা যাবে না, কারণ boot পার্টিশনকে অবশ্যই সার্টিফায়েড GKI ইমেজ দিয়ে ফ্ল্যাশ করতে হবে। এর পরিবর্তে, vendor_boot-debug.img-কে vendor_boot পার্টিশনে ফ্ল্যাশ করতে হবে যাতে debug ramdisk-এর সুবিধা পাওয়া যায়।

ডিবাগ র‍্যামডিস্ক ব্যবহার করার জন্য পূর্বশর্ত

কমপ্লায়েন্স টেস্ট চালানো OEM-এর মাধ্যমে ডিবাগ রামডিস্ক প্রদান করা হয়। এটি রিলিজ সাইন করা হলে চলবে না এবং ডিভাইস আনলক করা থাকলেই শুধুমাত্র এটি ব্যবহার করা যাবে।

এইসব ডিভাইসের ক্ষেত্রে ডিবাগ র‍্যামডিস্ক তৈরি বা ব্যবহার করা হবে না:

  • BOARD_BUILD_SYSTEM_ROOT_IMAGEটি সত্য
  • skip_initramfs কার্নেল কমান্ড লাইনে

Android 12 GSI

Android 12 GSI-এর সাথে debug ramdisk ব্যবহার করার জন্য কোনও অতিরিক্ত নির্দেশাবলী প্রয়োজন নেই।

২৯/০৯/২০২১ থেকে, ডিবাগ র‍্যামডিস্ককে আর repack_bootimg টুল দিয়ে আপডেট করতে হবে না। Android 12 GSI SGR1.210929.001 (7777720)-এর পরে তৈরি করা ভার্সনে system.img-এ আপ-টু-ডেট userdebug_plat_sepolicy.cil ফাইল অন্তর্ভুক্ত করা হয় এবং debug ramdisk থেকে userdebug_plat_sepolicy.cil উপেক্ষা করা হয়। বিস্তারিত জানতে CL দেখুন।

Android 11 GSI

boot-debug.img বা vendor_boot-debug.img ব্যবহার করা হলে, সিস্টেম sepolicy boot-debug.img বা vendor_boot-debug.img-এর ডিবাগ র‍্যামডিস্কের userdebug_plat_sepolicy.cil ফাইল থেকে লোড হয়। GSI ইমেজ বুট করার জন্য, আপনার boot-debug.img বা vendor_boot-debug.img রিবিল্ড করতে, সবসময় android11-gsi ব্রাঞ্চ থেকে আপ-টু-ডেট sepolicy পরিবর্তন অন্তর্ভুক্ত করুন।

অথবা, আপডেট করা GSI sepolicy সহ boot-debug.img বা vendor_boot-debug.img রিবিল্ড করতে repack_bootimg টুল ব্যবহার করা যেতে পারে।

ডিবাগ রামডিস্ক আবার প্যাক করা

boot-debug.img রিবিল্ড করার জন্য sepolicy পরিবর্তন অন্তর্ভুক্ত করার পরিবর্তে, পার্টনাররা boot-debug.img-এ GSI sepolicy ফাইল আপডেট করতে repack_bootimg ব্যবহার করতে পারেন (অথবা ডিভাইস GKI ব্যবহার করলে vendor_boot-debug.img)।

ধাপগুলি নিচে উল্লেখ করা হল:

  1. otatools.zip থেকে https://ci.android.com ডাউনলোড করুন। আমরা aosp-android-latest-release ব্র্যাঞ্চে aosp_cf_arm64_only_phone-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-এর আর্গুমেন্ট অ্যাডজাস্ট করা যেতে পারে। বিস্তারিত ব্যাখ্যার জন্য পরবর্তী বিভাগ দেখুন।

userdebug sepolicy-এর পাথ

উপরের repack_bootimg কপি ফাইল userdebug_plat_sepolicy.cil, --src_bootimg-এর র‍্যামডিস্ক থেকে --dst_bootimg-এর র‍্যামডিস্কে কপি করে। তবে, বিভিন্ন Android ভার্সনে একটি ডিবাগ র‍্যামডিস্কের মধ্যে পাথ আলাদা হতে পারে। Android 10 ও 11-এ, পাথ হল first_stage_ramdisk/userdebug_plat_sepolicy.cil, যে ডিভাইসে androidboot.force_normal_boot=1 আছে সেটি কার্নেল কমান্ড লাইনে থাকে। অন্যথায়, পাথ হল userdebug_plat_sepolicy.cil।

কার্নেল কমান্ড লাইনে androidboot.force_normal_boot আছে কিনা তা চেক করতে নিম্নলিখিত কমান্ড রান করুন:

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

Android 12 ও এর পরের যেকোনও ভার্সনে, debug ramdisk-এর মধ্যে পাথ সবসময় userdebug_plat_sepolicy.cil হয়, কার্নেল কমান্ড লাইনে androidboot.force_normal_boot=1 থাকুক বা না থাকুক। নিচের টেবিলে বিভিন্ন Android ভার্সনে একটি ডিবাগ র‍্যামডিস্কের মধ্যে পাথ দেখানো হয়েছে।

ডিবাগ ছবি Android 10 Android 11 Android 12
GKI boot-with-debug-ramdisk-${KERNEL_VERSION}.img N/A first_stage_ramdisk/userdebug_plat_sepolicy.cil userdebug_plat_sepolicy.cil
ডিভাইস-নির্দিষ্ট boot-debug.img force_normal_boot-এর উপর নির্ভর করে force_normal_boot-এর উপর নির্ভর করে userdebug_plat_sepolicy.cil
ডিভাইস-নির্দিষ্ট vendor_boot-debug.img N/A force_normal_boot-এর উপর নির্ভর করে userdebug_plat_sepolicy.cil

আপনি --ramdisk_add নির্দিষ্ট করতে পারেন যাতে src_path:dst_path পেয়ারের তালিকা সহ বিভিন্ন পাথ থেকে এবং বিভিন্ন পাথে ফাইল কপি করা যায়। যেমন, নিম্নলিখিত কমান্ডটি Android 11 থেকে first_stage_ramdisk/userdebug_plat_sepolicy.cil ফাইলfirst_stage_ramdisk/userdebug_plat_sepolicy.cil কপি করে boot-with-debug-ramdisk-5.4.img Android 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