ডিবাগ রামডিস্ক সহ VTS পরীক্ষা

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

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

নিচের সারণিতে অ্যান্ড্রয়েড ১০-এ কমপ্লায়েন্স টেস্টিং-এর জন্য ইমেজ এবং বিল্ড টাইপের পরিবর্তনগুলো দেখানো হলো।

টেস্ট স্যুট পরীক্ষা করুন নির্মাণ করুন র‍্যামডিস্ক ডিবাগ করুন adb রুট? অ্যান্ড্রয়েড ৯ থেকে ১০ বিল্ড ভ্যারিয়েন্ট পরিবর্তন
সিটিএস OEM-এর সিস্টেম ব্যবহারকারী এন এন কোন পরিবর্তন নেই
CTS-on-GSI জিএসআই ব্যবহারকারী এন এন

ব্যবহারকারীর ডিবাগ -> ব্যবহারকারী GSI

মুক্তিপত্রে স্বাক্ষর করা হয়েছে

এসটিএস OEM-এর সিস্টেম ব্যবহারকারীর ডিবাগ এন ওয়াই Q-তে নতুন
ভিটিএস জিএসআই ব্যবহারকারী ওয়াই ওয়াই

ব্যবহারকারীর ডিবাগ -> ব্যবহারকারী GSI

মুক্তিপত্রে স্বাক্ষর করা হয়েছে

সংক্ষিপ্ত বিবরণ

এই অতিরিক্ত ইমেজ ফাইলগুলো বিল্ড ফোল্ডারের ( ${ANDROID_PRODUCT_OUT} ) অধীনে তৈরি হয়:

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

যখন ডিভাইসের boot পার্টিশনে boot-debug.img ফ্ল্যাশ করা হয়, তখন সিস্টেম sepolicy ফাইলের ইউজারডিবাগ সংস্করণ এবং adb_debug.prop নামক একটি অতিরিক্ত প্রপার্টি ফাইল লোড হয়। এর ফলে ইউজার বিল্ড system.img (হয় GSI-এর অথবা OEM-এর) সহ adb root পাওয়া যায়।

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

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

কমপ্লায়েন্স টেস্ট পরিচালনাকারী OEM ডিবাগ র‍্যামডিস্ক সরবরাহ করে থাকে। এটি অবশ্যই রিলিজ সাইনড হওয়া যাবে না এবং ডিভাইসটি আনলক করা থাকলেই কেবল এটি ব্যবহার করা যাবে।

নিম্নলিখিত ডিভাইসগুলি আপগ্রেড করার জন্য ডিবাগ র‍্যামডিস্ক তৈরি বা ব্যবহার করা হবে না:

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

অ্যান্ড্রয়েড ১২ জিএসআই

অ্যান্ড্রয়েড ১২ জিএসআই-এর সাথে ডিবাগ র‍্যামডিস্ক ব্যবহার করার জন্য কোনো অতিরিক্ত নির্দেশনার প্রয়োজন নেই।

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

অ্যান্ড্রয়েড ১১ জিএসআই

যখন boot-debug.img বা vendor_boot-debug.img ব্যবহার করা হয়, তখন boot-debug.img বা vendor_boot-debug.img-এর ডিবাগ র‍্যামডিস্কে থাকা userdebug_plat_sepolicy.cil ফাইল থেকে সিস্টেম sepolicy লোড হয়। GSI ইমেজ বুট করার জন্য, অনুগ্রহ করে আপনার boot-debug.img boot-debug.img vendor_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 পরিবর্তনগুলি অন্তর্ভুক্ত করার পরিবর্তে, অংশীদাররা repack_bootimg ব্যবহার করে GSI sepolicy ফাইলটিকে boot-debug.img এ (অথবা ডিভাইসটি GKI ব্যবহার করলে vendor_boot-debug.img ) আপডেট করতে পারেন।

ধাপগুলো নিম্নরূপ:

  1. https://ci.android.com থেকে otatools.zip ডাউনলোড করুন। আমরা 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 --src_bootimg এর র‍্যামডিস্ক থেকে userdebug_plat_sepolicy.cil ফাইলটিকে --dst_bootimg এর র‍্যামডিস্কে কপি করে। তবে, বিভিন্ন অ্যান্ড্রয়েড সংস্করণে একটি ডিবাগ র‍্যামডিস্কের ভেতরের পাথ ভিন্ন হতে পারে। অ্যান্ড্রয়েড ১০ এবং ১১-তে, কার্নেল কমান্ড লাইনে 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

অ্যান্ড্রয়েড ১২ এবং এর পরবর্তী সংস্করণগুলিতে, কার্নেল কমান্ড লাইনে androidboot.force_normal_boot=1 এর উপস্থিতি নির্বিশেষে, একটি ডিবাগ র‍্যামডিস্কের ভেতরের পাথ সর্বদা userdebug_plat_sepolicy.cil হয়। নিচের সারণিতে বিভিন্ন অ্যান্ড্রয়েড সংস্করণে একটি ডিবাগ র‍্যামডিস্কের ভেতরের পাথগুলো দেখানো হলো।

ডিবাগ ইমেজ অ্যান্ড্রয়েড ১০ অ্যান্ড্রয়েড ১১ অ্যান্ড্রয়েড ১২
GKI boot-with-debug-ramdisk-${KERNEL_VERSION}.img প্রযোজ্য নয় first_stage_ramdisk/userdebug_plat_sepolicy.cil userdebug_plat_sepolicy.cil
ডিভাইস-নির্দিষ্ট বুট-ডিবাগ.img force_normal_boot এর উপর নির্ভর করে force_normal_boot এর উপর নির্ভর করে userdebug_plat_sepolicy.cil
ডিভাইস-নির্দিষ্ট vendor_boot-debug.img প্রযোজ্য নয় force_normal_boot এর উপর নির্ভর করে userdebug_plat_sepolicy.cil

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