यह पक्का करने के लिए कि ट्रेबल की सुविधा वाले डिवाइसों को पहले स्टेज माउंट को चालू करना चाहिए
init
, सुरक्षा के लिए बेहतर Linux को लोड कर सकता है
(SELinux) नीति के ऐसे फ़्रैगमेंट जो system
और
vendor
विभाजन. इस ऐक्सेस से कर्नेल के लोड होने की प्रोसेस भी चालू होती है
कर्नेल चालू होने के बाद, मॉड्यूल को जल्द से जल्द चालू करेंगे.
रिलीज़ से पहले माउंट करने के लिए, Android के पास फ़ाइल सिस्टम का ऐक्सेस होना चाहिए
जो मॉड्यूल मौजूद हैं. Android 8.0 और उसके बाद के वर्शन पर, फ़ोन को माउंट करने की सुविधा मिलती है
/system
, /vendor
या /odm
जल्दी से
init
का पहला चरण (यानी, SELinux के शुरू होने से पहले).
Fstab एंट्री
Android 9 और उससे पहले के वर्शन में, डिवाइस इनके लिए fstab
एंट्री तय कर सकते हैं
डिवाइस ट्री का इस्तेमाल करके, शुरुआती माउंट किए गए पार्टिशन
ओवरले (डीटीओ). Android 10 और उसके बाद के वर्शन में,
शुरुआती माउंट किए गए पार्टिशन के लिए, डिवाइसों में fstab
एंट्री तय करनी होंगी
पहले चरण में fstab
फ़ाइल का इस्तेमाल करके
ramdisk है. Android पर
10 में ये fs_mgr
फ़्लैग मिलते हैं
fstab
फ़ाइल में इस्तेमाल करने के लिए:
first_stage_mount
से पता चलता है कि पार्टिशन माउंट किया गया है पहले चरण में हुई थी.logical
बताता है कि यह डाइनैमिक विभाजन.avb=vbmeta-partition-name
तय करता है किvbmeta
विभाजन. पहला स्टेज इस बंटवारे को शुरू करता है इंस्टॉल करने से पहले. इस फ़्लैग के लिए तर्क को छोड़ा जा सकता है अगर प्रविष्टि के लिएvbmeta
विभाजन पहले ही इसके ज़रिए तय किया जा चुका है पिछली लाइन में एक औरfstab
एंट्री.
नीचे दिए गए उदाहरण में, कन्वर्ज़न वैल्यू को सेट करने के लिए fstab
एंट्री दी गई हैं
system
, vendor
, और product
पार्टिशन
का इस्तेमाल लॉजिकल (डाइनैमिक) पार्टीशन के तौर पर करता है.
#<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
इस उदाहरण में, वेंडर इसका इस्तेमाल करके vbmeta
पार्टीशन को तय करता है
fs_mgr
का फ़्लैग avb=vbmeta
, लेकिन product
vbmeta
आर्ग्युमेंट को हटा देता है, क्योंकि वेंडर को पहले ही जोड़ा जा चुका है
सेगमेंट की सूची में vbmeta
.
Android 10 और उसके बाद के वर्शन वाले डिवाइसों पर,
रैम डिस्क और vendor
में fstab
फ़ाइल है
विभाजन.
रैमडिस्क
रैमडिस्क में fstab
फ़ाइल की जगह, इस बात पर निर्भर करती है कि डिवाइस
ramdisk का इस्तेमाल करता है.
बूट रैमडिस्क वाले डिवाइसों पर fstab
लगाना ज़रूरी है
फ़ाइल को चालू करें. अगर डिवाइस में बूट रैम डिस्क और
रिकवरी रैमडिस्क, रिकवरी रैम डिस्क में कोई बदलाव करने की ज़रूरत नहीं है. उदाहरण:
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_RAMDISK)/fstab.$(PRODUCT_PLATFORM)
जो डिवाइस रिकवरी की सुविधा को रैम डिस्क के तौर पर इस्तेमाल करते हैं उन्हें
कर्नेल कमांड लाइन पैरामीटर androidboot.force_normal_boot=1
से
तय करें कि Android में बूट करना है या रिकवरी में चालू करना है. डिवाइसों की सूची
Android 12 या उसके बाद के वर्शन में
कर्नेल वर्शन 5.10 या इसके बाद के वर्शन को
androidboot.force_normal_boot=1
पैरामीटर. तय सीमा में
इन डिवाइस के पहले चरण में, रूट सेट करने की प्रक्रिया
माउंट के शुरुआती पार्टिशन को माउंट करने से पहले, /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
. यह इसलिए है क्योंकि पहला चरण
पार्टिशन की शुरुआती माउंटिंग पूरा करने के बाद रैम डिस्क
माउंट को /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 वर्शन के साथ, पार्टिशन को पहले से माउंट करने की ज़रूरी शर्तों में ये शामिल हैं:
- डिवाइस नोड पाथ को अपने
by-name
सिमलिंक का इस्तेमालfstab
और devicetree एंट्री. उदाहरण के लिए,/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
) संबंधित ब्लॉक डिवाइस नोड, जिन्हेंby-name
में बताया गया हैfstab
/devicetree एंट्री. उदाहरणः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
फ़ाइल के फ़्रैगमेंट. उदाहरण के लिए, डिवाइसट्री में/vendor
माउंट करें,fstab
फ़ाइल उसे दोहराया नहीं जाना चाहिए. - जिन पार्टीशन के लिए
verifyatboot
की ज़रूरत है उन्हें ऐसा नहीं होना चाहिए पहले से माउंट किया जाना चाहिए (ऐसा करना असमर्थित है). - पुष्टि किए गए सेगमेंट के लिए वैरिटी मोड/स्टेटस में यह बताया जाना चाहिए
androidboot.veritymode
विकल्प का इस्तेमाल करने परkernel_cmdline
(मौजूदा शर्त).
डिवाइसट्री को माउंट करना, VBoot 1.0
Android 8.x और उसके बाद के वर्शन में, init
, devicetree को पार्स करता है और
इसकी अवधि के दौरान विभाजन को जल्दी माउंट करने के लिए fstab
प्रविष्टियां बनाता है
पहला चरण है. fstab
एंट्री इस तरह से होती है:
src mnt_point type mnt_flags fs_mgr_flags
Devicetree की प्रॉपर्टी को इस फ़ॉर्मैट की नकल करने के लिए तय किया जाता है:
fstab
एंट्री इससे कम होनी चाहिए डिवाइसट्री में/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 पर /system और /vendor
यहां दिए गए उदाहरण में, system
के लिए deviceट्री शुरुआती माउंट को दिखाया गया है
और Nexus 6P पर 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
यहां दिए गए उदाहरण में, /vendor
के लिए deviceट्री शुरुआती माउंट को दिखाया गया है
Pixel पर (जिन सेगमेंट पर लागू होता है उनके लिए slotselect
जोड़ना न भूलें)
A/B):
/ { 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 बूट (AVB) है. जल्दी मिलने वाली ज़रूरी शर्तें VBoot 2.0 वाले माउंट पार्टीशन ये हैं:
- डिवाइस नोड पाथ को अपने
by-name
सिमलिंक का इस्तेमालfstab
और devicetree एंट्री. उदाहरण के लिए, सेगमेंट में/dev/block/mmcblk0pX
का इस्तेमाल करें, ताकि वे को नाम दिया गया है और डिवाइस नोड/dev/block/…./by-name/{system,vendor,odm}
. - सिस्टम वैरिएबल (जैसे कि
PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION
औरCUSTOM_IMAGE_VERITY_BLOCK_DEVICE
) का इस्तेमाल VBoot 1.0 के लिए किया जाता है VBoot 2.0 के लिए ज़रूरी है. इसके बजाय, VBoot 2.0 में पेश किए गए वैरिएबल बनाएं (इसमेंBOARD_AVB_ENABLE := true
शामिल है) के बारे में बताया जाना चाहिए; के लिए पूर्ण कॉन्फ़िगरेशन, देखें AVB के लिए सिस्टम इंटिग्रेशन बनाएं. - डिवाइस ट्री ओवरले के ज़रिए दी गई एंट्री को
fstab
फ़ाइल के फ़्रैगमेंट. उदाहरण के लिए, यदि आप डिवाइसट्री में/vendor
माउंट करें,fstab
फ़ाइल उसे दोहराया नहीं जाना चाहिए. - VBoot 2.0,
verifyatboot
पर काम नहीं करता. भले ही, इसे पहले माउंट करना हो चालू हो या नहीं. - पुष्टि किए गए सेगमेंट के लिए वैरिटी मोड/स्टेटस में यह बताया जाना चाहिए
androidboot.veritymode
का इस्तेमाल करकेkernel_cmdline
विकल्प (मौजूदा शर्त). इनके लिए, नीचे दिए गए सुधारों को शामिल करना न भूलें एवीबी:
डिवाइसट्री को माउंट करना, VBoot 2.0
VBoot 2.0 के लिए devicetree का कॉन्फ़िगरेशन वही है जो VBoot 1.0, जिसमें अपवाद:
fsmgr_flag
कोverify
से बदलकर, अब इस पर सेट किया गया हैavb
.- AVB मेटाडेटा वाले सभी विभाजनों को
devicetree तब भी जब विभाजन पहले से माउंट न हो रहा हो (उदाहरण के लिए,
/boot
).
उदाहरण: N5X पर /system और /vendor
नीचे दिए गए उदाहरण में,
Nexus 5X में system
और vendor
पार्टिशन. ध्यान दें:
/system
को AVB के साथ माउंट किया गया है और/vendor
को इस पर माउंट किया गया है इन्हें पूरी सुरक्षा की पुष्टि के बिना माउंट किया जाता है.- चूंकि Nexus 5X में कोई
/vbmeta
विभाजन नहीं होता, इसलिए शीर्ष-स्तरीय vbmeta,/boot
विभाजन के अंत में मौजूद है (जानकारी के लिए, एओएसपी चेंजलिस्ट देखें)./ { 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
यहां दिए गए उदाहरण में, Pixel पर /vendor
को जल्दी माउंट करने के बारे में बताया गया है.
ध्यान दें:
- vbmeta एंट्री में ज़्यादा पार्टीशन की जानकारी दी गई है, क्योंकि वे सेगमेंट हैं 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"; }; }; }; }; };