অ্যান্ড্রয়েড 12-এ, জেনেরিক boot
ইমেজ, জেনেরিক কার্নেল ইমেজ (GKI) হিসাবে উল্লেখ করা হয়, এতে জেনেরিক রামডিস্ক এবং GKI কার্নেল রয়েছে।
Android 13 এর সাথে চালু হওয়া ডিভাইসগুলির জন্য, জেনেরিক র্যামডিস্ক boot
ইমেজ থেকে সরিয়ে একটি আলাদা init_boot
ইমেজে রাখা হয়। এই পরিবর্তন শুধুমাত্র GKI কার্নেলের সাথে boot
ইমেজ ছেড়ে যায়।
অ্যান্ড্রয়েড 12 বা পুরানো কার্নেল সংস্করণগুলি ব্যবহার করা চালিয়ে যাওয়া ডিভাইসগুলি আপগ্রেড করার জন্য, জেনেরিক র্যামডিস্কটি সেখানেই রয়ে গেছে যেখানে এটি একটি নতুন init_boot
চিত্রের প্রয়োজন নেই।
একটি জেনেরিক রামডিস্ক তৈরি করতে, বিক্রেতা-নির্দিষ্ট সংস্থানগুলিকে র্যামডিস্কের বাইরে নিয়ে যান যাতে জেনেরিক র্যামডিস্কে শুধুমাত্র প্রথম পর্যায়ের init
এবং একটি প্রপার্টি ফাইল থাকে যাতে টাইমস্ট্যাম্প তথ্য থাকে।
ডিভাইসগুলিতে যা:
একটি ডেডিকেটেড
recovery
পার্টিশন ব্যবহার করবেন না, সমস্ত রিকভারি বিট জেনেরিক রামডিস্ক থেকেvendor_boot
ramdisk-এ চলে যায়।একটি ডেডিকেটেড
recovery
পার্টিশন ব্যবহার করুন,recovery
র্যামডিস্কে কোনো পরিবর্তনের প্রয়োজন নেই কারণrecovery
র্যামডিস্ক স্বয়ংসম্পূর্ণ।
স্থাপত্য
নিম্নলিখিত চিত্রগুলি Android 12 এবং তার উপরে চলমান ডিভাইসগুলির আর্কিটেকচার চিত্রিত করে৷ অ্যান্ড্রয়েড 13 এর সাথে লঞ্চ করা ডিভাইসে জেনেরিক রামডিস্ক ধারণকারী একটি নতুন init_boot
ইমেজ রয়েছে। অ্যান্ড্রয়েড 12 থেকে অ্যান্ড্রয়েড 13 তে আপগ্রেড করা ডিভাইসগুলি একই আর্কিটেকচার ব্যবহার করে যেমনটি তারা Android 12 এর সাথে করেছিল।
Android 13 দিয়ে লঞ্চ করুন, কোনো ডেডিকেটেড রিকভারি নেই
চিত্র 1. GKI সহ Android 13 চালু করা বা আপগ্রেড করা ডিভাইস, কোনো ডেডিকেটেড পুনরুদ্ধার নেই
অ্যান্ড্রয়েড 13, ডেডিকেটেড এবং এ/বি রিকভারি (ডেডিকেটেড রামডিস্ক) দিয়ে লঞ্চ করুন
চিত্র 2. GKI, ডেডিকেটেড এবং A/B পুনরুদ্ধার সহ Android 13 চালু করা বা আপগ্রেড করা ডিভাইসগুলি
ডিভাইসটিতে recovery_a
এবং recovery_b
পার্টিশন থাকলে এই চিত্রটি দেখুন।
অ্যান্ড্রয়েড 13 দিয়ে লঞ্চ করুন, ডেডিকেটেড এবং নন-এ/বি রিকভারি (ডেডিকেটেড রামডিস্ক)
চিত্র 3. GKI, ডেডিকেটেড এবং নন-A/B পুনরুদ্ধার সহ Android 13 চালু বা আপগ্রেড করা ডিভাইসগুলি
ডিভাইসটিতে স্লট প্রত্যয় ছাড়া recovery
নামে একটি পার্টিশন থাকলে এই চিত্রটি দেখুন।
Android 12 চালু করুন বা আপগ্রেড করুন, কোনো ডেডিকেটেড রিকভারি নেই
চিত্র 4. ডিভাইসগুলি GKI সহ Android 12 তে চালু বা আপগ্রেড হচ্ছে, কোনও ডেডিকেটেড পুনরুদ্ধার নেই
Android 12, ডেডিকেটেড এবং A/B রিকভারিতে লঞ্চ বা আপগ্রেড করুন (ডেডিকেটেড রামডিস্ক)
চিত্র 5. GKI, ডেডিকেটেড এবং A/B পুনরুদ্ধার সহ Android 12-তে চালু বা আপগ্রেড করা ডিভাইসগুলি
ডিভাইসটিতে recovery_a
এবং recovery_b
পার্টিশন থাকলে এই চিত্রটি দেখুন।
Android 12-এ লঞ্চ বা আপগ্রেড করুন, ডেডিকেটেড এবং নন-A/B রিকভারি (ডেডিকেটেড রামডিস্ক)
চিত্র 6. GKI, ডেডিকেটেড এবং নন-A/B পুনরুদ্ধার সহ Android 12-এ চালু বা আপগ্রেড করা ডিভাইসগুলি
ডিভাইসটিতে স্লট প্রত্যয় ছাড়া recovery
নামে একটি পার্টিশন থাকলে এই চিত্রটি দেখুন।
Android 12-এ আপগ্রেড করুন, রিকভারি-এ-বুট (পুনরুদ্ধার-এ-রামডিস্ক)
চিত্র 7. ডিভাইসগুলি অ্যান্ড্রয়েড 12-এ আপগ্রেড হচ্ছে, কোনো GKI নেই, রিকভারি-এ-বুট
Android 12-এ আপগ্রেড করুন, ডেডিকেটেড রিকভারি (ডেডিকেটেড রামডিস্ক)
চিত্র 8. Android 12-এ আপগ্রেড করা ডিভাইস, GKI নেই, ডেডিকেটেড রিকভারি
বুট ইমেজ বিষয়বস্তু
অ্যান্ড্রয়েড বুট ইমেজ নিম্নলিখিত আছে.
Android 13 এর সাথে লঞ্চ হওয়া ডিভাইসগুলির জন্য
init_boot
ইমেজ যোগ করা হয়েছে- হেডার সংস্করণ V4
- জেনেরিক রামডিস্ক ইমেজ
জেনেরিক
boot
ইমেজ- হেডার সংস্করণ V3 বা V4
-
boot_signature
boot.img সার্টিফিকেশনের জন্য একটি boot_signature (শুধুমাত্র v4)। প্রত্যয়িত GKIboot.img
যাচাইকৃত বুটের জন্য স্বাক্ষরিত নয়। OEM-কে এখনও একটি ডিভাইস-নির্দিষ্ট AVB কী দিয়ে প্রি-বিল্টboot.img
এ স্বাক্ষর করতে হবে। - জেনেরিক
cmdline
(GENERIC_KERNEL_CMDLINE
) - GKI কার্নেল
-
- জেনেরিক রামডিস্ক ইমেজ
- শুধুমাত্র Android 12 এবং তার আগের
boot
ইমেজে অন্তর্ভুক্ত
- শুধুমাত্র Android 12 এবং তার আগের
- হেডার সংস্করণ V3 বা V4
vendor_boot
ইমেজ (বিস্তারিত জানার জন্য, ভেন্ডর বুট পার্টিশন দেখুন)-
vendor_boot
হেডার- ডিভাইস-নির্দিষ্ট
cmdline
(BOARD_KERNEL_CMDLINE
)
- ডিভাইস-নির্দিষ্ট
-
vendor_boot
ramdisk ইমেজ-
lib/modules
- পুনরুদ্ধারের সংস্থান (যদি কোনও উত্সর্গীকৃত পুনরুদ্ধার না হয়)
-
-
dtb
ছবি
-
recovery
চিত্র- হেডার সংস্করণ V2
- প্রয়োজনে পুনরুদ্ধারের জন্য ডিভাইস-নির্দিষ্ট
cmdline
- নন-A/B রিকভারি পার্টিশনের জন্য, হেডারের বিষয়বস্তু স্বতন্ত্র হতে হবে; রিকভারি ইমেজ দেখুন। উদাহরণ স্বরূপ:
-
cmdline
boot
এবংvendor_boot
cmdline
এর সাথে সংযুক্ত নয়। - হেডার রিকভারি DTBO নির্দিষ্ট করে, যদি প্রয়োজন হয়।
- A/B রিকভারি পার্টিশনের জন্য, বিষয়বস্তু
boot
এবংvendor_boot
থেকে একত্রিত বা অনুমান করা যেতে পারে। উদাহরণ স্বরূপ: -
cmdline
boot
এবংvendor_boot
cmdline
এর সাথে সংযুক্ত। - DTBO অনুমান করা যেতে পারে
vendor_boot
হেডার থেকে।
- প্রয়োজনে পুনরুদ্ধারের জন্য ডিভাইস-নির্দিষ্ট
-
recovery
রামডিস্ক ইমেজ- পুনরুদ্ধার সম্পদ
- নন-A/B পুনরুদ্ধার পার্টিশনের জন্য, রামডিস্কের বিষয়বস্তু স্বতন্ত্র হতে হবে; রিকভারি ইমেজ দেখুন। উদাহরণ স্বরূপ:
-
lib/modules
রিকভারি মোড বুট করার জন্য প্রয়োজনীয় সমস্ত কার্নেল মডিউল থাকা আবশ্যক - পুনরুদ্ধার রামডিস্কে অবশ্যই
init
থাকতে হবে। - A/B রিকভারি পার্টিশনের জন্য, রিকভারি র্যামডিস্ককে জেনেরিক এবং
vendor_boot
সাথে যুক্ত করা হয়, তাই এটিকে স্বতন্ত্র হওয়ার প্রয়োজন নেই। উদাহরণ স্বরূপ: -
lib/modules
vendor_boot
ramdisk-এ কার্নেল মডিউল ছাড়াও রিকভারি মোড বুট করার জন্য প্রয়োজনীয় অতিরিক্ত কার্নেল মডিউল থাকতে পারে। -
/init
init-এ সিমলিংক থাকতে পারে, কিন্তু বুট ইমেজে প্রথম-পর্যায়ের/init
বাইনারি দ্বারা এটিকে ছাপানো হয়েছে।
- হেডার সংস্করণ V2
জেনেরিক রামডিস্ক ইমেজ বিষয়বস্তু
জেনেরিক রামডিস্কে নিম্নলিখিত উপাদান রয়েছে।
-
init
-
system/etc/ramdisk/build.prop
যোগ করা হয়েছে -
ro. PRODUCT .bootimg.* build
- মাউন্ট পয়েন্টের জন্য খালি ডিরেক্টরি:
debug_ramdisk/
,mnt/
,dev/
,sys/
,proc/
,metadata/
-
first_stage_ramdisk/
- মাউন্ট পয়েন্টের জন্য নকল করা খালি ডিরেক্টরি:
debug_ramdisk/
,mnt/
,dev/
,sys/
,proc/
,metadata/
- মাউন্ট পয়েন্টের জন্য নকল করা খালি ডিরেক্টরি:
বুট ইমেজ ইন্টিগ্রেশন
init_boot
, boot
, recovery
, এবং vendor_boot
ইমেজ কিভাবে তৈরি করা হয় তা বিল্ড পতাকা নিয়ন্ত্রণ করে। একটি বুলিয়ান বোর্ড ভেরিয়েবলের মান অবশ্যই স্ট্রিং true
বা খালি হতে হবে (যা ডিফল্ট)।
TARGET_NO_KERNEL
এই ভেরিয়েবলটি নির্দেশ করে যে বিল্ডটি একটি প্রি-বিল্ট বুট ইমেজ ব্যবহার করে কিনা। যদি এই ভেরিয়েবলটিtrue
সেট করা হয়, তাহলেBOARD_PREBUILT_BOOTIMAGE
বুট চিত্রের অবস্থানে সেট করুন (BOARD_PREBUILT_BOOTIMAGE:= device/${company}/${board}/boot.img
)BOARD_USES_RECOVERY_AS_BOOT
। এই ভেরিয়েবলটি নির্দেশ করে যে ডিভাইসটিboot
ইমেজ হিসেবেrecovery
ইমেজ ব্যবহার করে কিনা। GKI ব্যবহার করার সময়, এই ভেরিয়েবলটি খালি থাকে এবং পুনরুদ্ধারের সংস্থানvendor_boot
সরানো উচিত।BOARD_USES_GENERIC_KERNEL_IMAGE
এই পরিবর্তনশীলটি নির্দেশ করে যে বোর্ড GKI ব্যবহার করে। এই ভেরিয়েবলটি sysprops বাPRODUCT_PACKAGES
কে প্রভাবিত করে না।এটি বোর্ড-স্তরের GKI সুইচ; নীচে তালিকাভুক্ত সমস্ত ভেরিয়েবল এই ভেরিয়েবল দ্বারা সীমাবদ্ধ।
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT
। ramdisk রিকভারি রিসোর্সvendor_boot
এ তৈরি করা হয়েছে কিনা এই ভেরিয়েবল নিয়ন্ত্রণ করে।true
হিসাবে সেট করা হলে, পুনরুদ্ধারের সংস্থানগুলি শুধুমাত্রvendor-ramdisk/
এ তৈরি করা হয় এবংrecovery/root/
-তে তৈরি করা হয় না।খালি হলে, পুনরুদ্ধারের সংস্থানগুলি শুধুমাত্র
recovery/root/
-এ তৈরি করা হয় এবংvendor-ramdisk/
এ তৈরি করা হয় না।
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT
। এই ভেরিয়েবলটি নিয়ন্ত্রণ করে যে GSI AVB কীগুলিvendor_boot
এ তৈরি করা হয়েছে কিনা।true
সেট করা হলে, যদিBOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT
:সেট করা হয়েছে, GSI AVB কী
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/avb
করা হয়েছে।সেট করা নেই, GSI AVB কী
$ANDROID_PRODUCT_OUT/vendor-ramdisk/avb
করা হয়েছে।
খালি হলে, যদি
BOARD_RECOVERY_AS_ROOT
:সেট করা হয়েছে, GSI AVB কী
$ANDROID_PRODUCT_OUT/recovery/root/first_stage_ramdisk/avb
করা হয়েছে।সেট করা নেই, GSI AVB কী
$ANDROID_PRODUCT_OUT/ramdisk/avb
এ তৈরি করা হয়েছে।
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE
। এই ভেরিয়েবল নিয়ন্ত্রণ করে যেrecovery
চিত্রটিতে একটি কার্নেল আছে কি না। Android 12 এর সাথে চালু হওয়া এবং A/Brecovery
পার্টিশন ব্যবহার করে ডিভাইসগুলিকে অবশ্যই এই পরিবর্তনশীলটিকেtrue
হিসাবে সেট করতে হবে৷ Android 12 এর সাথে চালু হওয়া এবং নন-A/B ব্যবহার করা ডিভাইসগুলিকে পুনরুদ্ধারের চিত্রটি স্বয়ংসম্পূর্ণ রাখতে এই ভেরিয়েবলটিকেfalse
সেট করতে হবে।BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES
$OUT/boot*.img
টার্গেট ফাইলের অধীনেIMAGES/
এ কপি করা হয়েছে কিনা এই ভেরিয়েবল নিয়ন্ত্রণ করে।aosp_arm64
এই ভেরিয়েবলটিকেtrue
সেট করতে হবে।অন্যান্য ডিভাইসগুলিকে অবশ্যই এই পরিবর্তনশীলটি খালি রাখতে হবে।
BOARD_INIT_BOOT_IMAGE_PARTITION_SIZE
এই ভেরিয়েবলটি নিয়ন্ত্রণ করেinit_boot.img
তৈরি হয় কিনা এবং আকার নির্ধারণ করে। সেট করা হলে,boot.img
এর পরিবর্তেinit_boot.img
এ জেনেরিক রামডিস্ক যোগ করা হয় এবং চেইনড vbmeta-এর জন্য BOARD_AVB_INIT_BOOTBOARD_AVB_INIT_BOOT*
ভেরিয়েবল সেট করা প্রয়োজন।
অনুমোদিত সমন্বয়
উপাদান বা পরিবর্তনশীল | recovery পার্টিশন ছাড়াই ডিভাইস আপগ্রেড করা হচ্ছে | recovery পার্টিশন সহ ডিভাইস আপগ্রেড করা হচ্ছে | recovery পার্টিশন ছাড়াই ডিভাইস চালু করুন | A/B recovery পার্টিশন সহ ডিভাইস চালু করুন | নন-A/B recovery পার্টিশন সহ ডিভাইস চালু করুন | aosp_arm64 |
---|---|---|---|---|---|---|
boot ধারণ করে | হ্যাঁ | হ্যাঁ | হ্যাঁ | হ্যাঁ | হ্যাঁ | হ্যাঁ |
init_boot রয়েছে (Android 13) | না | না | না | হ্যাঁ | হ্যাঁ | হ্যাঁ |
vendor_boot | ঐচ্ছিক | ঐচ্ছিক | হ্যাঁ | হ্যাঁ | হ্যাঁ | না |
recovery ধারণ করে | না | হ্যাঁ | না | হ্যাঁ | হ্যাঁ | না |
BOARD_USES_RECOVERY_AS_BOOT | true | খালি | খালি | খালি | খালি | খালি |
BOARD_USES_GENERIC_KERNEL_IMAGE | খালি | খালি | true | true | true | true |
PRODUCT_BUILD_RECOVERY_IMAGE | খালি | true বা খালি | খালি | true বা খালি | true বা খালি | খালি |
BOARD_RECOVERYIMAGE_PARTITION_SIZE | খালি | > 0 | খালি | > 0 | > 0 | খালি |
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT | খালি | খালি | true | খালি | খালি | খালি |
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT | খালি | খালি | true | true | true | খালি |
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE | খালি | খালি | খালি | true | খালি | খালি |
BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES | খালি | খালি | খালি | খালি | খালি | true |
একটি ডেডিকেটেড recovery
পার্টিশন সহ ডিভাইসগুলি PRODUCT_BUILD_RECOVERY_IMAGE
কে true
বা খালিতে সেট করতে পারে৷ এই ডিভাইসগুলির জন্য, যদি BOARD_RECOVERYIMAGE_PARTITION_SIZE
সেট করা থাকে, একটি recovery
চিত্র তৈরি করা হয়৷
বুটের জন্য চেইনড vbmeta সক্ষম করুন
boot
এবং init_boot
ইমেজের জন্য চেইনড vbmeta অবশ্যই সক্রিয় করা আবশ্যক। নিম্নলিখিত উল্লেখ করুন:
BOARD_AVB_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
BOARD_AVB_BOOT_ALGORITHM := SHA256_RSA4096
BOARD_AVB_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION := 2
BOARD_AVB_INIT_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_INIT_BOOT_ALGORITHM := SHA256_RSA2048
BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX_LOCATION := 3
একটি উদাহরণের জন্য, এই পরিবর্তন পড়ুন.
সিস্টেম-হিসেবে-রুট
GKI ব্যবহার করে এমন ডিভাইসগুলির জন্য সিস্টেম-এ-রুট সমর্থিত নয়। এই ধরনের ডিভাইসে, BOARD_BUILD_SYSTEM_ROOT_IMAGE
খালি থাকতে হবে। সিস্টেম-অ্যাজ-রুট এমন ডিভাইসগুলির জন্যও সমর্থিত নয় যেগুলি গতিশীল পার্টিশন ব্যবহার করে।
পণ্য কনফিগারেশন
যে ডিভাইসগুলি জেনেরিক রামডিস্ক ব্যবহার করে তাদের অবশ্যই র্যামডিস্কে ইনস্টল করার অনুমতি দেওয়া ফাইলগুলির একটি তালিকা ইনস্টল করতে হবে। এটি করার জন্য, device.mk
এ নিম্নলিখিতটি উল্লেখ করুন:
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)
generic_ramdisk.mk
ফাইলটি অন্যান্য মেকফাইলগুলিকে ভুলবশত রামডিস্কে অন্যান্য ফাইল ইনস্টল করা থেকেও বাধা দেয় (এর পরিবর্তে এই ধরনের ফাইলগুলিকে vendor_ramdisk
এ সরান)।
ডিভাইস সেট আপ করা হচ্ছে
অ্যান্ড্রয়েড 13 এর সাথে লঞ্চ হওয়া, অ্যান্ড্রয়েড 12-তে আপগ্রেড করা এবং অ্যান্ড্রয়েড 12-এর সাথে লঞ্চ করা ডিভাইসগুলির মধ্যে সেটআপ নির্দেশাবলী আলাদা। অ্যান্ড্রয়েড 13, অ্যান্ড্রয়েড 12 এর সাথে যেমন ছিল সেরকমই সেটআপ।
ডিভাইসগুলি Android 12 এ আপগ্রেড হচ্ছে:
BOARD_USES_RECOVERY_AS_BOOT
এর মান সংরক্ষণ করতে পারে। যদি তারা তা করে তবে তারা লিগ্যাসি কনফিগারেশন ব্যবহার করছে এবং নতুন বিল্ড ভেরিয়েবল অবশ্যই খালি হতে হবে। যদি এই ধরনের ডিভাইস:BOARD_USES_RECOVERY_AS_BOOT
খালি সেট করতে পারেন৷ যদি তারা তা করে তবে তারা নতুন কনফিগারেশন ব্যবহার করছে। যদি এই ধরনের ডিভাইস:
Android 12 এর সাথে চালু হওয়া ডিভাইসগুলিকে অবশ্যই
BOARD_USES_RECOVERY_AS_BOOT
খালি করতে সেট করতে হবে এবং নতুন কনফিগারেশন ব্যবহার করতে হবে। যদি এই ধরনের ডিভাইস:
কারণ aosp_arm64
শুধুমাত্র GKI তৈরি করে (এবং vendor_boot
বা পুনরুদ্ধার নয়), এটি একটি সম্পূর্ণ লক্ষ্য নয়। aosp_arm64
বিল্ড কনফিগারেশনের জন্য, generic_arm64
পড়ুন।
বিকল্প 1: কোনো ডেডিকেটেড রিকভারি পার্টিশন নেই
recovery
পার্টিশন ছাড়া ডিভাইসে boot
পার্টিশনে জেনেরিক boot
ইমেজ থাকে। vendor_boot
ramdisk-এ lib/modules
(বিক্রেতা কার্নেল মডিউল সহ) সহ সমস্ত পুনরুদ্ধারের সংস্থান রয়েছে। এই ধরনের ডিভাইসে, পণ্য কনফিগারেশন generic_ramdisk.mk
থেকে উত্তরাধিকারসূত্রে পাওয়া যায়।
BOARD মান সেট করা হচ্ছে
নিম্নলিখিত মান সেট করুন:
BOARD_USES_RECOVERY_AS_BOOT :=
BOARD_USES_GENERIC_KERNEL_IMAGE := true
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT := true
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE :=
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true
Init বাইনারি এবং সিমলিংক
vendor_boot
ramdisk-এ /init
থেকে /system/bin/init
init_second_stage.recovery
, এবং /system/bin/init
init-এ init_second_stage.recovery থাকতে পারে। যাইহোক, যেহেতু জেনেরিক vendor_boot
ramdisk-এর পরে সংযুক্ত করা হয়, তাই /init
সিমলিংকটি ওভাররাইট করা হয়। ডিভাইস পুনরুদ্ধারে বুট হলে, দ্বিতীয় পর্যায়ের init সমর্থন করার জন্য /system/bin/init
বাইনারি প্রয়োজন। vendor_boot
+ জেনেরিক রামডিস্কের বিষয়বস্তু নিম্নরূপ:
-
/init
(জেনেরিক রামডিস্ক থেকে,init_first_stage
থেকে নির্মিত) -
/system/bin/init
(vendor_ramdisk
init_second_stage.recovery
নির্মিত)
fstab ফাইলগুলি সরানো হচ্ছে
জেনেরিক ramdisk-এ ইনস্টল করা fstab
ফাইল vendor_ramdisk
এ সরান। একটি উদাহরণের জন্য, এই পরিবর্তন পড়ুন.
মডিউল ইনস্টল করা হচ্ছে
যদি ইচ্ছা হয়, আপনি vendor_ramdisk
এ ডিভাইস-নির্দিষ্ট মডিউল ইনস্টল করতে পারেন (যদি আপনার ইনস্টল করার জন্য কোনো ডিভাইস-নির্দিষ্ট মডিউল না থাকে তবে এই ধাপটি এড়িয়ে যান)।
মডিউলটি
/first_stage_ramdisk
এ ইনস্টল করার সময় মডিউলটিরvendor_ramdisk
ভেরিয়েন্ট ব্যবহার করুন।init
/first_stage_ramdisk
করার পরে এই মডিউলটি পাওয়া উচিত কিন্তুinit
রুটকে //system
এ বদল করার আগে। উদাহরণের জন্য, মেটাডেটা চেকসাম এবং ভার্চুয়াল A/B কম্প্রেশন দেখুন।মডিউলটি
/
তে ইনস্টল করার সময় মডিউলটিরrecovery
ভেরিয়েন্ট ব্যবহার করুন।init
/first_stage_ramdisk
পরিবর্তন করার আগে এই মডিউলটি পাওয়া উচিত।/
-এ মডিউল ইনস্টল করার বিস্তারিত জানার জন্য, প্রথম পর্যায়ের কনসোল দেখুন।
প্রথম পর্যায়ে কনসোল
init
/first_stage_ramdisk
এ বদল করার আগে প্রথম পর্যায়ের কনসোল শুরু হওয়ার কারণে, আপনাকে মডিউলগুলির recovery
ভেরিয়েন্ট ইনস্টল করতে হবে। ডিফল্টরূপে, উভয় মডিউল ভেরিয়েন্ট build/make/target/product/base_vendor.mk
এর জন্য ইনস্টল করা হয়, তাই যদি ডিভাইস মেকফাইলটি সেই ফাইল থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় তবে আপনাকে স্পষ্টভাবে recovery
ভেরিয়েন্টটি ইনস্টল করতে হবে না।
পুনরুদ্ধার মডিউলগুলি স্পষ্টভাবে ইনস্টল করতে, নিম্নলিখিতটি ব্যবহার করুন।
PRODUCT_PACKAGES += \
linker.recovery \
shell_and_utilities_recovery \
এটি নিশ্চিত করে যে linker
, sh
, এবং toybox
$ANDROID_PRODUCT_OUT/recovery/root/system/bin
bin-এ ইনস্টল করা হয়েছে, যা তারপর vendor_ramdisk-এর অধীনে /system/bin
vendor_ramdisk
এ ইনস্টল করে।
প্রথম পর্যায়ের কনসোলের জন্য প্রয়োজনীয় মডিউল যোগ করতে (উদাহরণস্বরূপ, adbd), নিম্নলিখিতটি ব্যবহার করুন।
PRODUCT_PACKAGES += adbd.recovery
এটি নিশ্চিত করে যে নির্দিষ্ট মডিউলগুলি $ANDROID_PRODUCT_OUT/recovery/root/system/bin
bin-এ ইনস্টল করা হয়েছে, যা তারপর vendor_ramdisk-এর অধীনে /system/bin
vendor_ramdisk
এ ইনস্টল করে।
মেটাডেটা চেকসাম
প্রথম পর্যায়ে মাউন্ট করার সময় মেটাডেটা চেকসাম সমর্থন করার জন্য, যে ডিভাইসগুলি GKI সমর্থন করে না সেগুলি নিম্নলিখিত মডিউলগুলির রামডিস্ক ভেরিয়েন্ট ইনস্টল করে। GKI-এর জন্য সমর্থন যোগ করতে, মডিউলগুলিকে $ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin
:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
একটি উদাহরণের জন্য, এই পরিবর্তন তালিকা পড়ুন।
ভার্চুয়াল A/B কম্প্রেশন
ভার্চুয়াল A/B কম্প্রেশন সমর্থন করতে, snapuserd
অবশ্যই vendor_ramdisk
এ ইনস্টল করতে হবে। ডিভাইসটি virtual_ab_ota/compression.mk
থেকে ইনহেরিট করা উচিত, যা snapuserd
এর vendor_ramdisk
ভেরিয়েন্ট ইনস্টল করে।
বুট প্রক্রিয়া পরিবর্তন
পুনরুদ্ধার বা অ্যান্ড্রয়েডে বুট করার প্রক্রিয়া নিম্নলিখিত ব্যতিক্রমগুলি ছাড়া পরিবর্তিত হয় না:
- Ramdisk
build.prop
/second_stage_resources
এ চলে যায় যাতে দ্বিতীয় পর্যায়েরinit
বুটের বিল্ড টাইমস্ট্যাম্প পড়তে পারে।
যেহেতু সম্পদগুলি জেনেরিক র্যামডিস্ক থেকে vendor_boot
চলে যায়, জেনেরিক র্যামডিস্ককে vendor_boot
র্যামডিস্কে সংযুক্ত করার ফলাফল পরিবর্তন হয় না।
e2fsck উপলব্ধ করা হচ্ছে
ডিভাইস মেকফাইলগুলি এর থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে:
virtual_ab_ota/launch_with_vendor_ramdisk.mk
যদি ডিভাইসটি ভার্চুয়াল A/B সমর্থন করে কিন্তু কম্প্রেশন না করে।virtual_ab_ota/compression.mk
যদি ডিভাইসটি ভার্চুয়াল A/B কম্প্রেশন সমর্থন করে।
পণ্যের মেকফাইল $ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin/e2fsck
ইনস্টল করে। রানটাইমে, প্রথম পর্যায়ে init
/first_stage_ramdisk
এ পরিবর্তন করে তারপর /system/bin/e2fsck
চালায়।
বিকল্প 2a: ডেডিকেটেড এবং A/B রিকভারি পার্টিশন
A/B recovery
পার্টিশন সহ ডিভাইসগুলির জন্য এই বিকল্পটি ব্যবহার করুন; অর্থাৎ, ডিভাইসটিতে একটি recovery_a
এবং recovery_b partition
রয়েছে। এই ধরনের ডিভাইসগুলির মধ্যে A/B এবং ভার্চুয়াল A/B ডিভাইস রয়েছে যেগুলির পুনরুদ্ধার পার্টিশন নিম্নলিখিত কনফিগারেশন সহ আপডেটযোগ্য:
AB_OTA_PARTITIONS += recovery
vendor_boot
ramdisk-এ ramdisk এবং ভেন্ডর কার্নেল মডিউলগুলির ভেন্ডর বিট রয়েছে, যার মধ্যে নিম্নলিখিতগুলি রয়েছে:
ডিভাইস-নির্দিষ্ট
fstab
ফাইলlib/modules
(বিক্রেতা কার্নেল মডিউল অন্তর্ভুক্ত)
recovery
রামডিস্কে সমস্ত পুনরুদ্ধারের সংস্থান রয়েছে। এই ধরনের ডিভাইসে, পণ্য কনফিগারেশন generic_ramdisk.mk
থেকে উত্তরাধিকারসূত্রে পাওয়া যায়।
BOARD মান সেট করা হচ্ছে
A/B recovery
পার্টিশন সহ ডিভাইসগুলির জন্য নিম্নলিখিত মানগুলি সেট করুন:
BOARD_USES_RECOVERY_AS_BOOT :=
BOARD_USES_GENERIC_KERNEL_IMAGE := true
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT :=
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE := true
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true
Init বাইনারি এবং সিমলিংক
recovery
ramdisk-এ একটি /init -> /system/bin/init
init_second_stage.recovery
এবং /system/bin/init
init-এ init_second_stage.recovery থাকতে পারে। যাইহোক, যেহেতু বুট রামডিস্ক recovery
রামডিস্কের পরে সংযুক্ত করা হয়েছে, তাই /init
সিমলিংকটি ওভাররাইট করা হয়েছে। ডিভাইস রিকভারি মোডে বুট হলে, দ্বিতীয় পর্যায়ের init সমর্থন করার জন্য /system/bin/init
বাইনারি প্রয়োজন।
যখন ডিভাইসটি recovery
বুট হয়, তখন recovery
+ vendor_boot
+ জেনেরিক রামডিস্কের বিষয়বস্তু নিম্নরূপ:
-
/init
(রামডিস্ক থেকে,init_first_stage
থেকে নির্মিত) -
/system/bin/init
(recovery
ramdisk থেকে,init_second_stage.recovery
থেকে নির্মিত, এবং/init
থেকে কার্যকর করা হয়েছে)
যখন ডিভাইসটি অ্যান্ড্রয়েডে বুট হয়, তখন vendor_boot
+ জেনেরিক রামডিস্কের বিষয়বস্তু নিম্নরূপ:
-
/init
(জেনেরিক রামডিস্ক থেকে,init_first_stage
থেকে নির্মিত)
fstab ফাইলগুলি সরানো হচ্ছে
জেনেরিক ramdisk-এ ইনস্টল করা fstab
ফাইল vendor_ramdisk
এ সরান। একটি উদাহরণের জন্য, এই পরিবর্তন পড়ুন.
মডিউল ইনস্টল করা হচ্ছে
যদি ইচ্ছা হয়, আপনি vendor_ramdisk
এ ডিভাইস-নির্দিষ্ট মডিউল ইনস্টল করতে পারেন (যদি আপনার ইনস্টল করার জন্য কোনো ডিভাইস-নির্দিষ্ট মডিউল না থাকে তবে এই ধাপটি এড়িয়ে যান)। Init
রুট পরিবর্তন করে না। মডিউলের vendor_ramdisk
ভেরিয়েন্ট vendor_ramdisk
এর রুটে ইনস্টল করা হয়। vendor_ramdisk
এ মডিউল ইনস্টল করার উদাহরণের জন্য, প্রথম পর্যায়ের কনসোল , মেটাডেটা চেকসাম এবং ভার্চুয়াল A/B কম্প্রেশন দেখুন।
প্রথম পর্যায়ে কনসোল
মডিউলগুলির vendor_ramdisk
বৈকল্পিক ইনস্টল করতে, নিম্নলিখিতগুলি ব্যবহার করুন:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
shell_and_utilities_vendor_ramdisk \
এটি নিশ্চিত করে যে linker
, sh
, এবং toybox
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
bin-এ ইনস্টল করা হয়েছে, যা তারপর vendor_ramdisk-এর অধীনে /system/bin
vendor_ramdisk
এ ইনস্টল করে।
প্রথম পর্যায়ের কনসোলের জন্য প্রয়োজনীয় মডিউল যোগ করতে (উদাহরণস্বরূপ, adbd), AOSP-তে প্রাসঙ্গিক প্যাচ আপলোড করে এই মডিউলগুলির vendor_ramdisk
বৈকল্পিক সক্ষম করুন, তারপর নিম্নলিখিতগুলি ব্যবহার করুন,
PRODUCT_PACKAGES += adbd.vendor_ramdisk
এটি নিশ্চিত করে যে নির্দিষ্ট মডিউলগুলি $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
এ ইনস্টল হবে। যদি vendor_boot
ramdisk পুনরুদ্ধার মোডে লোড করা হয়, মডিউলটিও recovery
উপলব্ধ। যদি vendor_boot
ramdisk রিকভারি মোডে লোড না হয়, তাহলে ডিভাইসটি ঐচ্ছিকভাবে adbd.recovery
ও ইনস্টল করতে পারে।
মেটাডেটা চেকসাম
প্রথম পর্যায়ে মাউন্ট করার সময় মেটাডেটা চেকসাম সমর্থন করার জন্য, যে ডিভাইসগুলি GKI সমর্থন করে না সেগুলি নিম্নলিখিত মডিউলগুলির রামডিস্ক ভেরিয়েন্ট ইনস্টল করে। GKI-এর জন্য সমর্থন যোগ করতে, মডিউলগুলিকে $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
এ সরান:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
একটি উদাহরণের জন্য, এই পরিবর্তন তালিকা পড়ুন।
ভার্চুয়াল A/B কম্প্রেশন
ভার্চুয়াল A/B কম্প্রেশন সমর্থন করতে, snapuserd
অবশ্যই vendor_ramdisk
এ ইনস্টল করতে হবে। ডিভাইসটি virtual_ab_ota/compression.mk
থেকে ইনহেরিট করা উচিত, যা snapuserd
এর vendor_ramdisk
ভেরিয়েন্ট ইনস্টল করে।
বুট প্রক্রিয়া পরিবর্তন
অ্যান্ড্রয়েডে বুট করার সময়, বুট প্রক্রিয়া পরিবর্তন হয় না। vendor_boot
+ জেনেরিক ramdisk বিদ্যমান বুট প্রক্রিয়ার অনুরূপ, fstab
vendor_boot
থেকে লোড করা ছাড়া। যেহেতু system/bin/recovery
বিদ্যমান নেই, first_stage_init
এটি একটি সাধারণ বুট হিসাবে পরিচালনা করে।
পুনরুদ্ধার মোডে বুট করার সময়, বুট প্রক্রিয়া পরিবর্তন হয়। recovery + vendor_boot
+ generic ramdisk বিদ্যমান পুনরুদ্ধার প্রক্রিয়ার অনুরূপ, কিন্তু কার্নেলটি recovery
চিত্রের পরিবর্তে boot
ইমেজ থেকে লোড করা হয়। পুনরুদ্ধার মোডের বুট প্রক্রিয়াটি নিম্নরূপ।
বুটলোডার শুরু হয়, তারপর নিম্নলিখিতগুলি করে:
- পুনরুদ্ধার + বিক্রেতা_বুট + জেনেরিক
vendor_boot
/
এ ঠেলে দেয়। (যদি OEM BOARD_RECOVERY_KERNEL_MODULES এ যোগ করে পুনরুদ্ধারBOARD_RECOVERY_KERNEL_MODULES
কার্নেল মডিউলের নকল করে),vendor_boot
ঐচ্ছিক।) -
boot
পার্টিশন থেকে কার্নেল চালায়।
- পুনরুদ্ধার + বিক্রেতা_বুট + জেনেরিক
কার্নেল ramdisk-এ মাউন্ট করে
/
তারপর জেনেরিক ramdisk থেকে/init
চালায়।প্রথম পর্যায়ে init শুরু হয়, তারপর নিম্নলিখিতগুলি করে:
-
IsRecoveryMode() == true
এবংForceNormalBoot() == false
সেট করে। -
/lib/modules
modules থেকে ভেন্ডর কার্নেল মডিউল লোড করে। -
DoFirstStageMount()
কল করে কিন্তু মাউন্ট করা এড়িয়ে যায় কারণIsRecoveryMode() == true
। (ডিভাইসটি র্যামডিস্ককে মুক্ত করে না (কারণ/
এখনও একই) কিন্তুSetInitAvbVersionInRecovery()
কল করে।) -
recovery
রামডিস্ক থেকে/system/bin/init
থেকে দ্বিতীয় পর্যায়ের init শুরু করে।
-
e2fsck উপলব্ধ করা হচ্ছে
ডিভাইস মেকফাইলগুলি এর থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে:
virtual_ab_ota/launch_with_vendor_ramdisk.mk
যদি ডিভাইসটি ভার্চুয়াল A/B সমর্থন করে কিন্তু কম্প্রেশন না করে।virtual_ab_ota/compression.mk
যদি ডিভাইসটি ভার্চুয়াল A/B কম্প্রেশন সমর্থন করে।
পণ্যের মেকফাইল $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin/e2fsck
ইনস্টল করে। রানটাইমে, প্রথম পর্যায়ের init
/system/bin/e2fsck
চালায়।
বিকল্প 2b: ডেডিকেটেড এবং নন-A/B রিকভারি পার্টিশন
একটি নন-A/B recovery
পার্টিশন সহ ডিভাইসগুলির জন্য এই বিকল্পটি ব্যবহার করুন; অর্থাৎ, ডিভাইসটিতে একটি স্লট প্রত্যয় ছাড়াই recovery
নামে একটি পার্টিশন রয়েছে। এই ধরনের ডিভাইস অন্তর্ভুক্ত:
- নন-এ/বি ডিভাইস;
- A/B এবং ভার্চুয়াল A/B ডিভাইস, যার মধ্যে রিকভারি পার্টিশন আপডেট করা যায় না। (এটি অস্বাভাবিক।)
vendor_boot
ramdisk-এ ramdisk এবং ভেন্ডর কার্নেল মডিউলগুলির ভেন্ডর বিট রয়েছে, যার মধ্যে নিম্নলিখিতগুলি রয়েছে:
- ডিভাইস-নির্দিষ্ট
fstab
ফাইল -
lib/modules
(বিক্রেতা কার্নেল মডিউল অন্তর্ভুক্ত)
recovery
চিত্রটি অবশ্যই স্বয়ংসম্পূর্ণ হতে হবে। পুনরুদ্ধার মোড বুট করার জন্য এটিতে অবশ্যই সমস্ত প্রয়োজনীয় সংস্থান থাকতে হবে, সহ:
- কার্নেল ইমেজ
- DTBO চিত্র
-
lib/modules
- প্রথম পর্যায়ের init একটি symlink
/init -> /system/bin/init
হিসাবে - দ্বিতীয় পর্যায়ের ইনিট বাইনারি
/system/bin/init
- ডিভাইস-নির্দিষ্ট
fstab
ফাইল -
recovery
বাইনারি সহ অন্যান্য সমস্ত পুনরুদ্ধার সংস্থান, ইত্যাদি। - ইত্যাদি
এই ধরনের ডিভাইসে, পণ্য কনফিগারেশন generic_ramdisk.mk
থেকে উত্তরাধিকারসূত্রে পাওয়া যায়।
BOARD মান সেট করা হচ্ছে
নন-A/B ডিভাইসগুলির জন্য নিম্নলিখিত মানগুলি সেট করুন:
BOARD_USES_RECOVERY_AS_BOOT :=
BOARD_USES_GENERIC_KERNEL_IMAGE := true
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT :=
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE :=
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true
Init বাইনারি এবং সিমলিংক
recovery
রামডিস্কে অবশ্যই একটি /init -> /system/bin/init
init_second_stage.recovery
এবং /system/bin/init
init-এ init_second_stage.recovery থাকতে হবে। ডিভাইস পুনরুদ্ধার মোডে বুট হলে, প্রথম পর্যায় এবং দ্বিতীয় পর্যায়ের init উভয় সমর্থন করার জন্য /system/bin/init
বাইনারি প্রয়োজন।
যখন ডিভাইসটি recovery
বুট হয়, তখন recovery
র্যামডিস্কের বিষয়বস্তু নিম্নরূপ:
-
/init -> /system/bin/init
(recovery
রামডিস্ক থেকে) -
/system/bin/init
(recovery
ramdisk থেকে,init_second_stage.recovery
থেকে নির্মিত, এবং/init
থেকে কার্যকর করা হয়েছে)
যখন ডিভাইসটি অ্যান্ড্রয়েডে বুট হয়, তখন vendor_boot
+ জেনেরিক রামডিস্কের বিষয়বস্তু নিম্নরূপ:
-
/init
(রামডিস্ক থেকে,init_first_stage
থেকে নির্মিত)
fstab ফাইলগুলি সরানো হচ্ছে
জেনেরিক রামডিস্কে ইনস্টল করা যেকোন fstab
ফাইলকে vendor_ramdisk
এবং recovery
ramdisk-এ সরান। একটি উদাহরণের জন্য, এই পরিবর্তন পড়ুন.
মডিউল ইনস্টল করা হচ্ছে
যদি ইচ্ছা হয়, আপনি vendor_ramdisk
এবং recovery
ramdisk-এ ডিভাইস-নির্দিষ্ট মডিউল ইনস্টল করতে পারেন (যদি আপনার ইনস্টল করার জন্য কোনো ডিভাইস-নির্দিষ্ট মডিউল না থাকে তবে এই ধাপটি এড়িয়ে যান)। init
রুট পরিবর্তন করে না। মডিউলের vendor_ramdisk
ভেরিয়েন্ট vendor_ramdisk
এর রুটে ইনস্টল করা হয়। মডিউলগুলির recovery
রূপটি recovery
রামডিস্কের মূলে ইনস্টল করা হয়। vendor_ramdisk
এবং recovery
ramdisk-এ মডিউল ইনস্টল করার উদাহরণের জন্য, প্রথম পর্যায়ের কনসোল এবং মেটাডেটা চেকসাম দেখুন।
প্রথম পর্যায়ে কনসোল
মডিউলগুলির vendor_ramdisk
বৈকল্পিক ইনস্টল করতে, নিম্নলিখিতগুলি ব্যবহার করুন:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
shell_and_utilities_vendor_ramdisk \
এটি নিশ্চিত করে যে linker
, sh
, এবং toybox
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
bin-এ ইনস্টল করা হয়েছে, যা তারপর vendor_ramdisk-এর অধীনে /system/bin
vendor_ramdisk
এ ইনস্টল করে।
প্রথম পর্যায়ের কনসোলের জন্য প্রয়োজনীয় মডিউল যোগ করতে (উদাহরণস্বরূপ, adbd), AOSP-তে প্রাসঙ্গিক প্যাচ আপলোড করে এই মডিউলগুলির vendor_ramdisk
বৈকল্পিক সক্ষম করুন, তারপর নিম্নলিখিতগুলি ব্যবহার করুন,
PRODUCT_PACKAGES += adbd.vendor_ramdisk
এটি নিশ্চিত করে যে নির্দিষ্ট মডিউলগুলি $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
এ ইনস্টল হবে।
মডিউলগুলির recovery
ভেরিয়েন্ট ইনস্টল করতে, recovery
দিয়ে vendor_ramdisk
প্রতিস্থাপন করুন:
PRODUCT_PACKAGES += \
linker.recovery \
shell_and_utilities_recovery \
adbd.recovery \
মেটাডেটা চেকসাম
প্রথম পর্যায়ে মাউন্ট করার সময় মেটাডেটা চেকসাম সমর্থন করার জন্য, যে ডিভাইসগুলি GKI সমর্থন করে না সেগুলি নিম্নলিখিত মডিউলগুলির রামডিস্ক ভেরিয়েন্ট ইনস্টল করে। GKI-এর জন্য সমর্থন যোগ করতে, মডিউলগুলিকে $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
এ সরান:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
পুনরুদ্ধারের প্রথম পর্যায়ে মাউন্ট করার সময় মেটাডেটা চেকসাম সমর্থন করতে, এই মডিউলগুলির পুনরুদ্ধার বৈকল্পিক সক্রিয় করুন এবং সেগুলিও ইনস্টল করুন।
বুট প্রক্রিয়া পরিবর্তন
অ্যান্ড্রয়েডে বুট করার সময়, বুট প্রক্রিয়া পরিবর্তন হয় না। vendor_boot
+ জেনেরিক ramdisk বিদ্যমান বুট প্রক্রিয়ার অনুরূপ, fstab
vendor_boot
থেকে লোড করা ছাড়া। যেহেতু system/bin/recovery
বিদ্যমান নেই, first_stage_init
এটি একটি সাধারণ বুট হিসাবে পরিচালনা করে।
পুনরুদ্ধার মোডে বুট করার সময়, বুট প্রক্রিয়া পরিবর্তন হয় না। পুনরুদ্ধার রামডিস্ক বিদ্যমান পুনরুদ্ধার প্রক্রিয়ার মতো একইভাবে লোড করা হয়। recovery
চিত্র থেকে কার্নেল লোড করা হয়। পুনরুদ্ধার মোডের বুট প্রক্রিয়াটি নিম্নরূপ।
বুটলোডার শুরু হয়, তারপর নিম্নলিখিতগুলি করে:
- পুনরুদ্ধার রামডিস্ককে
/
এ ঠেলে দেয়। -
recovery
পার্টিশন থেকে কার্নেল চালায়।
- পুনরুদ্ধার রামডিস্ককে
কার্নেল ramdisk-এ মাউন্ট করে
/
তারপর/init
চালায়, যাrecovery
ramdisk থেকে/system/bin/init
init-এর একটি সিমলিঙ্ক।প্রথম পর্যায়ে init শুরু হয়, তারপর নিম্নলিখিতগুলি করে:
-
IsRecoveryMode() == true
এবংForceNormalBoot() == false
সেট করে। -
/lib/modules
modules থেকে ভেন্ডর কার্নেল মডিউল লোড করে। -
DoFirstStageMount()
কল করে কিন্তু মাউন্ট করা এড়িয়ে যায় কারণIsRecoveryMode() == true
। (ডিভাইসটি র্যামডিস্ককে মুক্ত করে না (কারণ/
এখনও একই) কিন্তুSetInitAvbVersionInRecovery()
কল করে।) -
recovery
রামডিস্ক থেকে/system/bin/init
থেকে দ্বিতীয় পর্যায়ের init শুরু করে।
-
বুট ইমেজ টাইমস্ট্যাম্প
নিম্নলিখিত কোড একটি উদাহরণ boot
ইমেজ টাইমস্ট্যাম্প ফাইল.
####################################
# from generate-common-build-props
# These properties identify this partition image.
####################################
ro.product.bootimage.brand=Android
ro.product.bootimage.device=generic_arm64
ro.product.bootimage.manufacturer=unknown
ro.product.bootimage.model=AOSP on ARM64
ro.product.bootimage.name=aosp_arm64
ro.bootimage.build.date=Mon Nov 16 22:46:27 UTC 2020
ro.bootimage.build.date.utc=1605566787
ro.bootimage.build.fingerprint=Android/aosp_arm64/generic_arm64:S/MASTER/6976199:userdebug/test-keys
ro.bootimage.build.id=MASTER
ro.bootimage.build.tags=test-keys
ro.bootimage.build.type=userdebug
ro.bootimage.build.version.incremental=6976199
ro.bootimage.build.version.release=11
ro.bootimage.build.version.release_or_codename=S
ro.bootimage.build.version.sdk=30
# Auto-added by post_process_props.py
persist.sys.usb.config=none
# end of file
নির্মাণের সময়, একটি
system/etc/ramdisk/build.prop
ফাইল জেনেরিক রামডিস্কে যোগ করা হয়। এই ফাইলটিতে বিল্ডের টাইমস্ট্যাম্প তথ্য রয়েছে।রানটাইমে, ramdisk মুক্ত করার আগে প্রথম পর্যায়ে
init
ফাইলগুলিকে ramdisk থেকেtmpfs
এ কপি করে যাতে দ্বিতীয় পর্যায়েরinit
boot
ইমেজ টাইমস্ট্যাম্প বৈশিষ্ট্য সেট করতে এই ফাইলটি পড়তে পারে।