पार्टिशन पहले से ही माउंट करें

यह पक्का करने के लिए कि ट्रेबल की सुविधा वाले डिवाइसों को पहले स्टेज माउंट को चालू करना चाहिए 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 वर्शन के साथ, पार्टिशन को पहले से माउंट करने की ज़रूरी शर्तों में ये शामिल हैं:

  1. डिवाइस नोड पाथ को अपने by-name सिमलिंक का इस्तेमाल fstab और devicetree एंट्री. उदाहरण के लिए, /dev/block/mmcblk0pX का इस्तेमाल करके पार्टीशन करें, पक्का करें कि पार्टिशन को नाम दिया गया है और डिवाइस नोड यह है /dev/block/…./by-name/{system,vendor,odm}.
  2. 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
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  3. डिवाइस ट्री ओवरले के ज़रिए दी गई एंट्री को fstab फ़ाइल के फ़्रैगमेंट. उदाहरण के लिए, डिवाइसट्री में /vendor माउंट करें, fstab फ़ाइल उसे दोहराया नहीं जाना चाहिए.
  4. जिन पार्टीशन के लिए verifyatboot की ज़रूरत है उन्हें ऐसा नहीं होना चाहिए पहले से माउंट किया जाना चाहिए (ऐसा करना असमर्थित है).
  5. पुष्टि किए गए सेगमेंट के लिए वैरिटी मोड/स्टेटस में यह बताया जाना चाहिए 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, Android fs_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 वाले माउंट पार्टीशन ये हैं:

  1. डिवाइस नोड पाथ को अपने by-name सिमलिंक का इस्तेमाल fstab और devicetree एंट्री. उदाहरण के लिए, सेगमेंट में /dev/block/mmcblk0pX का इस्तेमाल करें, ताकि वे को नाम दिया गया है और डिवाइस नोड /dev/block/…./by-name/{system,vendor,odm}.
  2. सिस्टम वैरिएबल (जैसे कि PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION और CUSTOM_IMAGE_VERITY_BLOCK_DEVICE) का इस्तेमाल VBoot 1.0 के लिए किया जाता है VBoot 2.0 के लिए ज़रूरी है. इसके बजाय, VBoot 2.0 में पेश किए गए वैरिएबल बनाएं (इसमें BOARD_AVB_ENABLE := true शामिल है) के बारे में बताया जाना चाहिए; के लिए पूर्ण कॉन्फ़िगरेशन, देखें AVB के लिए सिस्टम इंटिग्रेशन बनाएं.
  3. डिवाइस ट्री ओवरले के ज़रिए दी गई एंट्री को fstab फ़ाइल के फ़्रैगमेंट. उदाहरण के लिए, यदि आप डिवाइसट्री में /vendor माउंट करें, fstab फ़ाइल उसे दोहराया नहीं जाना चाहिए.
  4. VBoot 2.0, verifyatboot पर काम नहीं करता. भले ही, इसे पहले माउंट करना हो चालू हो या नहीं.
  5. पुष्टि किए गए सेगमेंट के लिए वैरिटी मोड/स्टेटस में यह बताया जाना चाहिए 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";
            };
          };
        };
      };
    };