ট্রিবল-সক্রিয় ডিভাইসগুলিকে অবশ্যই প্রথম ধাপে মাউন্ট সক্রিয় করতে হবে যাতে init
সিকিউরিটি-এনহ্যান্সড লিনাক্স (SELinux) পলিসি ফ্র্যাগমেন্টগুলি লোড করতে পারে যা system
এবং vendor
পার্টিশন জুড়ে ছড়িয়ে আছে। এই অ্যাক্সেস কার্নেল বুট করার পরে যত তাড়াতাড়ি সম্ভব কার্নেল মডিউল লোড করতে সক্ষম করে।
প্রথম দিকে মাউন্ট করার জন্য, মডিউলগুলি থাকা ফাইল সিস্টেমগুলিতে অ্যান্ড্রয়েডের অ্যাক্সেস থাকতে হবে। Android 8.0 এবং উচ্চতর গুলি init
এর প্রথম পর্যায়ে (অর্থাৎ, SElinux শুরু হওয়ার আগে) /system
, /vendor
, বা /odm
মাউন্ট করা সমর্থন করে।
Fstab এন্ট্রি
অ্যান্ড্রয়েড 9 এবং তার নিচের সংস্করণে, ডিভাইস ট্রি ওভারলে (DTOs) ব্যবহার করে প্রাথমিক মাউন্ট করা পার্টিশনের জন্য fstab
এন্ট্রি নির্দিষ্ট করতে পারে। অ্যান্ড্রয়েড 10 এবং উচ্চতর, ডিভাইসগুলিকে অবশ্যই প্রথম পর্যায়ের রামডিস্কে একটি fstab
ফাইল ব্যবহার করে প্রাথমিক মাউন্ট করা পার্টিশনের জন্য fstab
এন্ট্রি নির্দিষ্ট করতে হবে। Android 10 fstab
ফাইলে ব্যবহারের জন্য নিম্নলিখিত fs_mgr
ফ্ল্যাগগুলি প্রবর্তন করে:
-
first_stage_mount
নির্দেশ করে যে একটি পার্টিশন প্রথম পর্যায়ের init দ্বারা মাউন্ট করা হয়েছে। -
logical
নির্দেশ করে যে এটি একটি গতিশীল পার্টিশন । -
avb= vbmeta-partition-name
vbmeta
পার্টিশন নির্দিষ্ট করে। প্রথম পর্যায়ের init অন্যান্য পার্টিশন মাউন্ট করার আগে এই পার্টিশনটি শুরু করে। এই পতাকার যুক্তিটি বাদ দেওয়া যেতে পারে যদি পূর্ববর্তী লাইনে অন্য একটিfstab
এন্ট্রি দ্বারা এন্ট্রির জন্যvbmeta
পার্টিশন ইতিমধ্যেই নির্দিষ্ট করা থাকে।
নিম্নলিখিত উদাহরণে system
, vendor
এবং product
পার্টিশনগুলিকে লজিক্যাল (গতিশীল) পার্টিশন হিসাবে সেট করার জন্য fstab
এন্ট্রি দেখানো হয়েছে।
#<dev> <mnt_point> <type> <mnt_flags options> <fs_mgr_flags> system /system ext4 ro,barrier=1 wait,slotselect,avb=vbmeta_system,logical,first_stage_mount vendor /vendor ext4 ro,barrier=1 wait,slotselect,avb=vbmeta,logical,first_stage_mount product /product ext4 ro,barrier=1 wait,slotselect,avb,logical,first_stage_mount
এই উদাহরণে, বিক্রেতা fs_mgr
ফ্ল্যাগ avb=vbmeta
ব্যবহার করে vbmeta
পার্টিশনটি নির্দিষ্ট করে, কিন্তু product
vbmeta
আর্গুমেন্ট বাদ দেয় কারণ বিক্রেতা ইতিমধ্যেই পার্টিশনের তালিকায় vbmeta
যুক্ত করেছে।
অ্যান্ড্রয়েড 10 এবং উচ্চতর সংস্করণে চলমান ডিভাইসগুলিকে অবশ্যই fstab
ফাইলটি ramdisk এবং vendor
পার্টিশনে রাখতে হবে।
রামডিস্ক
ramdisk-এ fstab
ফাইলের অবস্থান নির্ভর করে কিভাবে একটি ডিভাইস ramdisk ব্যবহার করে।
বুট র্যামডিস্ক সহ ডিভাইসগুলিকে অবশ্যই fstab
ফাইলটি বুট ramdisk রুটে রাখতে হবে। ডিভাইসটিতে বুট র্যামডিস্ক এবং একটি রিকভারি র্যামডিস্ক উভয়ই থাকলে, রিকভারি র্যামডিস্কে কোনো পরিবর্তনের প্রয়োজন নেই। উদাহরণ:
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_RAMDISK)/fstab.$(PRODUCT_PLATFORM)
যে ডিভাইসগুলি র্যামডিস্ক হিসাবে পুনরুদ্ধার ব্যবহার করে সেগুলিকে অ্যান্ড্রয়েডে বুট করা বা পুনরুদ্ধারে বুট করা চালিয়ে যাওয়ার সিদ্ধান্ত নিতে কার্নেল কমান্ড লাইন প্যারামিটার androidboot.force_normal_boot=1
ব্যবহার করতে হবে। কার্নেল সংস্করণ 5.10 বা তার পরবর্তী সংস্করণের সাথে Android 12 বা তার বেশির সাথে চালু হওয়া ডিভাইসগুলিকে অবশ্যই androidboot.force_normal_boot=1
প্যারামিটার পাস করতে bootconfig ব্যবহার করতে হবে। এই ডিভাইসগুলিতে, প্রাথমিক মাউন্ট পার্টিশনগুলি মাউন্ট করার আগে প্রথম পর্যায়ে init রুট ক্রিয়াকে /first_stage_ramdisk
এ পরিবর্তন করে, তাই ডিভাইসগুলিকে অবশ্যই fstab
ফাইলটি $(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk
এ রাখতে হবে। উদাহরণ:
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk/fstab.$(PRODUCT_PLATFORM)
বিক্রেতা
সমস্ত ডিভাইসে fstab
ফাইলের একটি অনুলিপি /vendor/etc
এ রাখতে হবে। এর কারণ হল প্রথম পর্যায়ের init পার্টিশনের প্রাথমিক মাউন্টিং সম্পূর্ণ করার পরে ramdisk মুক্ত করে এবং /system
এ মাউন্টকে /
এ সরানোর জন্য একটি সুইচ রুট অপারেশন সম্পাদন করে। fstab
ফাইলগুলি অ্যাক্সেস করার জন্য পরবর্তী যে কোনো অপারেশনের জন্য অবশ্যই /vendor/etc
এ অনুলিপি ব্যবহার করতে হবে। উদাহরণ:
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.$(PRODUCT_PLATFORM)
পার্টিশন তাড়াতাড়ি মাউন্ট করুন, VBoot 1.0
VBoot 1.0 এর সাথে প্রারম্ভিক মাউন্ট পার্টিশনের প্রয়োজনীয়তার মধ্যে রয়েছে:
- ডিভাইস নোড পাথ
fstab
এবং devicetree এন্ট্রিতে তাদেরby-name
সিমলিঙ্ক ব্যবহার করতে হবে। উদাহরণস্বরূপ,/dev/block/mmcblk0pX
ব্যবহার করে পার্টিশনগুলি নির্দিষ্ট করার পরিবর্তে, নিশ্চিত করুন যে পার্টিশনগুলির নাম দেওয়া হয়েছে এবং ডিভাইস নোডটি/dev/block/…./by-name/{system,vendor,odm}
। - পণ্যটির জন্য ডিভাইস কনফিগারেশনে
PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION
এবংCUSTOM_IMAGE_VERITY_BLOCK_DEVICE
device/ oem / project /device.mk
প্রদত্ত পাথগুলি অবশ্যইfstab
এ /device-by-name
নির্দিষ্ট করা সংশ্লিষ্ট ব্লক ডিভাইস নোডের সাথে মিলবে। এন্ট্রি উদাহরণ:PRODUCT_SYSTEM_VERITY_PARTITION := /dev/block/…./by-name/system PRODUCT_VENDOR_VERITY_PARTITION := /dev/block/…./by-name/vendor CUSTOM_IMAGE_VERITY_BLOCK_DEVICE := /dev/block/…./by-name/odm
- ডিভাইস ট্রি ওভারলেগুলির মাধ্যমে প্রদত্ত এন্ট্রিগুলি
fstab
ফাইলের টুকরোগুলিতে পুনরাবৃত্তি করা উচিত নয়। উদাহরণ স্বরূপ, devicetree-এ mount/vendor
জন্য একটি এন্ট্রি উল্লেখ করার সময়,fstab
ফাইলটি সেই এন্ট্রি পুনরাবৃত্তি করা উচিত নয়। -
verifyatboot
জন্য প্রয়োজনীয় পার্টিশনগুলিকে আগেভাগে মাউন্ট করা উচিত নয় (এটি করা অসমর্থিত)। - যাচাইকৃত পার্টিশনের জন্য ভেরিটি মোড/স্টেট অবশ্যই
androidboot.veritymode
বিকল্প ব্যবহার করেkernel_cmdline
এ নির্দিষ্ট করতে হবে (বিদ্যমান প্রয়োজনীয়তা)।
মাউন্ট ডিভাইসট্রি তাড়াতাড়ি, VBoot 1.0
Android 8.x এবং উচ্চতর সংস্করণে, init
ডিভাইসট্রি পার্স করে এবং প্রথম পর্যায়ে পার্টিশন মাউন্ট করার জন্য fstab
এন্ট্রি তৈরি করে। একটি fstab
এন্ট্রি ফর্ম নেয়:
src mnt_point type mnt_flags fs_mgr_flags
ডিভাইসট্রি বৈশিষ্ট্যগুলি সেই বিন্যাসটিকে অনুকরণ করার জন্য সংজ্ঞায়িত করা হয়েছে:
-
fstab
এন্ট্রিগুলি অবশ্যই devicetree-এ/firmware/android/fstab
এর অধীনে থাকতে হবে এবং অবশ্যইandroid,fstab
এ একটি সামঞ্জস্যপূর্ণ স্ট্রিং সেট থাকতে হবে। -
/firmware/android/fstab
এর অধীনে প্রতিটি নোডকে একটি একক প্রাথমিক মাউন্টfstab
এন্ট্রি হিসাবে বিবেচনা করা হয়। একটি নোডের অবশ্যই নিম্নলিখিত বৈশিষ্ট্যগুলি সংজ্ঞায়িত করা উচিত:-
dev
অবশ্যই ডিভাইস নোডের দিকে নির্দেশ করতে হবে যাby-name
পার্টিশনের প্রতিনিধিত্ব করে -
type
অবশ্যই ফাইল সিস্টেমের প্রকার হতে হবে (যেমনfstab
ফাইলগুলিতে) -
mnt_flags
মাউন্ট পতাকাগুলির কমা দ্বারা পৃথক করা তালিকা হতে হবে (যেমনfstab
ফাইলগুলিতে) -
fsmgr_flags
অবশ্যই Androidfs_mgr flags
তালিকা হতে হবে (যেমনfstab
ফাইলগুলিতে)
-
- A/B পার্টিশনে অবশ্যই একটি
slotselect fs_mgr
বিকল্প থাকতে হবে। - dm-verity সক্রিয় পার্টিশনে অবশ্যই একটি
verify fs_mgr
বিকল্প থাকতে হবে।
উদাহরণ: N6P-এ /সিস্টেম এবং /বিক্রেতা
নিম্নলিখিত উদাহরণটি Nexus 6P-এ system
এবং vendor
পার্টিশনের জন্য ডিভাইসট্রি প্রাথমিক মাউন্ট দেখায়:
/ { firmware { android { compatible = "android,firmware"; fstab { compatible = "android,fstab"; system { compatible = "android,system"; dev = "/dev/block/platform/soc.0/f9824900.sdhci/by-name/system"; type = "ext4"; mnt_flags = "ro,barrier=1,inode_readahead_blks=8"; fsmgr_flags = "wait,verify"; }; vendor { compatible = "android,vendor"; dev = "/dev/block/platform/soc.0/f9824900.sdhci/by-name/vendor"; type = "ext4"; mnt_flags = "ro,barrier=1,inode_readahead_blks=8"; fsmgr_flags = "wait"; }; }; }; }; };
উদাহরণ: Pixel-এ /বিক্রেতা
নিম্নলিখিত উদাহরণটি পিক্সেল-এ /vendor
জন্য ডিভাইসট্রি প্রারম্ভিক মাউন্ট দেখায় (এ/বি সাপেক্ষে পার্টিশনগুলির জন্য slotselect
যোগ করতে মনে রাখবেন):
/ { firmware { android { compatible = "android,firmware"; fstab { compatible = "android,fstab"; vendor { compatible = "android,vendor"; dev = "/dev/block/platform/soc/624000.ufshc/by-name/vendor"; type = "ext4"; mnt_flags = "ro,barrier=1,discard"; fsmgr_flags = "wait,slotselect,verify"; }; }; }; }; };
প্রথম দিকে পার্টিশন মাউন্ট করুন, VBoot 2.0
VBoot 2.0 হল Android Verified Boot (AVB) । VBoot 2.0 এর সাথে প্রারম্ভিক মাউন্ট পার্টিশনের প্রয়োজনীয়তা হল:
- ডিভাইস নোড পাথ অবশ্যই
fstab
এবং devicetree এন্ট্রিতে তাদেরby-name
সিমলিংক ব্যবহার করবে। উদাহরণস্বরূপ,/dev/block/mmcblk0pX
ব্যবহার করে পার্টিশনগুলি নির্দিষ্ট করার পরিবর্তে, নিশ্চিত করুন যে পার্টিশনগুলির নাম দেওয়া হয়েছে এবং ডিভাইস নোডটি/dev/block/…./by-name/{system,vendor,odm}
। - VBoot 1.0-এর জন্য ব্যবহৃত সিস্টেম ভেরিয়েবল (যেমন
PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION
এবংCUSTOM_IMAGE_VERITY_BLOCK_DEVICE
) তৈরি করা VBoot 2.0-এর জন্য প্রয়োজনীয় নয়৷ পরিবর্তে, VBoot 2.0 (BOARD_AVB_ENABLE := true
সহ) প্রবর্তিত বিল্ড ভেরিয়েবলগুলিকে সংজ্ঞায়িত করা উচিত; সম্পূর্ণ কনফিগারেশনের জন্য, AVB এর জন্য বিল্ড সিস্টেম ইন্টিগ্রেশন দেখুন। - ডিভাইস ট্রি ওভারলেগুলির মাধ্যমে প্রদত্ত এন্ট্রিগুলি
fstab
ফাইলের টুকরোগুলিতে পুনরাবৃত্তি করা উচিত নয়। উদাহরণ স্বরূপ, আপনি যদি devicetree-এ mount/vendor
জন্য একটি এন্ট্রি উল্লেখ করেন,fstab
ফাইলটি অবশ্যই সেই এন্ট্রি পুনরাবৃত্তি করবে না। - VBoot 2.0
verifyatboot
সমর্থন করে না, প্রারম্ভিক মাউন্ট সক্ষম হোক বা না হোক। - যাচাইকৃত পার্টিশনের জন্য ভেরিটি মোড/স্টেট অবশ্যই
androidboot.veritymode
বিকল্প ব্যবহার করেkernel_cmdline
এ নির্দিষ্ট করতে হবে (বিদ্যমান প্রয়োজনীয়তা)। AVB-এর জন্য নিম্নলিখিত সংশোধনগুলি অন্তর্ভুক্ত করা নিশ্চিত করুন:
মাউন্ট ডিভাইসট্রি তাড়াতাড়ি, VBoot 2.0
VBoot 2.0-এর জন্য devicetree-এর কনফিগারেশন VBoot 1.0 -এর মতই, নিম্নলিখিত ব্যতিক্রমগুলি সহ:
-
fsmgr_flag
verify
থেকেavb
এ স্যুইচ করা হয়েছে। - AVB মেটাডেটা সহ সমস্ত পার্টিশন অবশ্যই ডিভাইসট্রির VBMeta এন্ট্রিতে থাকতে হবে, এমনকি পার্টিশনটি প্রথম দিকে মাউন্ট না হলেও (উদাহরণস্বরূপ,
/boot
)।
উদাহরণ: N5X এ /সিস্টেম এবং /বিক্রেতা
নিম্নলিখিত উদাহরণটি Nexus 5X-এ system
এবং vendor
পার্টিশনের জন্য একটি ডিভাইস ট্রি প্রারম্ভিক মাউন্ট দেখায়। উল্লেখ্য যে:
-
/system
AVB এর সাথে মাউন্ট করা হয়েছে এবং/vendor
অখণ্ডতা যাচাই ছাড়াই মাউন্ট করা হয়েছে। - যেহেতু Nexus 5X-এর কোনো
/vbmeta
পার্টিশন নেই, তাই শীর্ষ-স্তরের vbmeta/boot
পার্টিশনের শেষে থাকে (বিস্তারিত জানার জন্য, AOSP চেঞ্জলিস্ট দেখুন)।/ { firmware { android { compatible = "android,firmware"; vbmeta { compatible = "android,vbmeta"; parts = "boot,system,vendor"; }; fstab { compatible = "android,fstab"; system { compatible = "android,system"; dev = "/dev/block/platform/soc.0/f9824900.sdhci/by-name/system"; type = "ext4"; mnt_flags = "ro,barrier=1,inode_readahead_blks=8"; fsmgr_flags = "wait,avb"; }; vendor { compatible = "android,vendor"; dev = "/dev/block/platform/soc.0/f9824900.sdhci/by-name/vendor"; type = "ext4"; mnt_flags = "ro,barrier=1,inode_readahead_blks=8"; fsmgr_flags = "wait"; }; }; }; }; };
উদাহরণ: Pixel-এ /বিক্রেতা
নিম্নলিখিত উদাহরণটি পিক্সেলের প্রথম দিকে মাউন্টিং /vendor
দেখায়। উল্লেখ্য যে:
- vbmeta এন্ট্রিতে আরও পার্টিশন নির্দিষ্ট করা হয়েছে কারণ এই পার্টিশনগুলি AVB দ্বারা সুরক্ষিত ।
- সমস্ত AVB পার্টিশন অবশ্যই অন্তর্ভুক্ত করতে হবে, এমনকি যদি শুধুমাত্র
/vendor
প্রথম দিকে মাউন্ট করা হয়। - A/B সাপেক্ষে পার্টিশনের জন্য
slotselect
যোগ করতে ভুলবেন না।/ { vbmeta { compatible = "android,vbmeta"; parts = "vbmeta,boot,system,vendor,dtbo"; }; firmware { android { compatible = "android,firmware"; fstab { compatible = "android,fstab"; vendor { compatible = "android,vendor"; dev = "/dev/block/platform/soc/624000.ufshc/by-name/vendor"; type = "ext4"; mnt_flags = "ro,barrier=1,discard"; fsmgr_flags = "wait,slotselect,avb"; }; }; }; }; };