Bölümleri erken ekle

Tiz özellikli cihazlarda ilk aşamanın montaj özelliğinin etkinleştirilmesi gerekir: init, Güvenlik açısından Geliştirilmiş Linux'u yükleyebilir (SELinux) system ve vendor bölüm. Bu erişim, çekirdeğin yüklenmesini de sağlar. en kısa sürede güncellemeniz gerekir.

Erken ekleme işlemini gerçekleştirmek için Android'in dahil edilir. Android 8.0 ve sonraki sürümler montajı destekler /system, /vendor veya /odm daha erken init'in ilk aşaması (SElinux başlatılmadan önce).

Fstab girişleri

Android 9 ve önceki sürümlerde cihazlar şunun için fstab girişi belirtebilir: erken eklenen bölümler cihaz ağacı yer paylaşımları (DTO). Android 10 ve sonraki sürümlerde cihazlar erken eklenen bölümler için fstab giriş belirtmelidir ilk aşamada bir fstab dosyası kullanarak ramdisk'tir. Android 10, aşağıdaki fs_mgr flag'lerini sunar fstab dosyasında kullanılmak üzere:

  • first_stage_mount, bir bölümün eklendiğini gösterir ilk aşamaya göre hazırlanır.
  • logical, bunun bir dinamik bölümlendirme.
  • avb=vbmeta-partition-name, vbmeta bölüm. İlk aşama başlatma bu bölümü başlatır önce yuvarlak olması gerekir. Aşağıdaki durumlarda bu işaretin bağımsız değişkeni atlanabilir girişin vbmeta bölümü önceden önceki satırda başka bir fstab girişi daha var.

Aşağıdaki örnektefstab system, vendor ve product bölümleri mantıksal (dinamik) bölümler olarak gösterilir.

#<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

Bu örnekte, tedarikçi firma şunu kullanarak vbmeta bölümünü belirtir: fs_mgr işareti avb=vbmeta, ancak product Tedarikçi firma zaten eklendiğinden vbmeta bağımsız değişkenini atlar vbmeta ekler.

Android 10 ve sonraki sürümleri çalıştıran cihazlar Ramdisk ve vendor içinde fstab dosyası bölüm.

Ramdisk

Ram diskteki fstab dosyasının konumu, cihazın nasıl ramdisk kullanır.

Önyükleme ram diskine sahip cihazlar fstab öğesini yerleştirmelidir dosyasını yüklemenizi öneririz. Cihazda hem bir önyükleme ram diski hem de bir kurtarma belleğinde, kurtarma ram diskinde değişiklik yapılmasına gerek yoktur. Örnek:

PRODUCT_COPY_FILES +=  device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_RAMDISK)/fstab.$(PRODUCT_PLATFORM)

Kurtarma işlemini ramdisk olarak kullanan cihazların androidboot.force_normal_boot=1 çekirdek komut satırı parametresinden Android'de mi başlatacağınıza yoksa kurtarma işlemine mi devam edeceğinize karar verir. Cihazlar Android 12 veya sonraki bir sürümün yüklü olduğu cihazlarda 5.10 veya sonraki çekirdek sürümleri, androidboot.force_normal_boot=1 parametresinden yararlanın. İçinde bu cihazlarda, başlangıçtaki ilk aşamanın sonunda bir kök değiştirme işlemi Erken ekleme bölümlerini eklemeden önce /first_stage_ramdisk Bu nedenle cihazlar, fstab dosyasını $(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk. Örnek:

PRODUCT_COPY_FILES +=  device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk/fstab.$(PRODUCT_PLATFORM)

Satıcı

Tüm cihazlar, fstab dosyasının bir kopyasını şuraya yerleştirmelidir: /vendor/etc. Bunun nedeni, başlangıçtaki ilk aşamanın bileşenlerinin erken takılmasını tamamladıktan sonra ramdisk /system konumundaki ekleme noktasını şuraya taşımak için kök işlemini değiştirin /. fstab hizmetine erişmesi gereken sonraki tüm işlemler dosyaları bu nedenle /vendor/etc içindeki kopyayı kullanmalıdır. Örnek:

PRODUCT_COPY_FILES +=  device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.$(PRODUCT_PLATFORM)

Bölümlendirmeleri erken ekle, VBoot 1.0

VBoot 1.0 ile erken ekleme bölümleri için gereksinimler şunları içerir:

  1. Cihaz düğümü yolları, by-name sembolik bağlantılarını kullanmalıdır fstab ve cihaz ağacı girişleri. Örneğin, /dev/block/mmcblk0pX ile bölümlendirmek için, bölümlerin cihaz düğümüne de /dev/block/…./by-name/{system,vendor,odm}.
  2. PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION ve için verilen yollar Şunun için cihaz yapılandırmasında: CUSTOM_IMAGE_VERITY_BLOCK_DEVICE ürün (yani device/oem/project/device.mk) by-name içinde belirtilen ilgili blok cihaz düğümlerini fstab/devicetree girişi. Örnek:
    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. Cihaz ağacı yer paylaşımları aracılığıyla yapılan girişler, fstab dosya parçası. Örneğin, /vendor dosyasını cihaz ağacına, fstab dosyası ekle o girişi tekrar etmemelidir.
  4. verifyatboot gerektiren bölümlerde kaçınmamalısınız erken eklenebilir (bunu yapmak desteklenmez).
  5. Doğrulanmış bölümlerin doğrulama modu/durumu androidboot.veritymode seçeneği kullanılarak kernel_cmdline (mevcut şart).

Devicetree'yi erken ekle, VBoot 1.0

Android 8.x ve sonraki sürümlerde init, devicetree'yi ayrıştırır ve bölümü erkenden eklemek için fstab giriş oluşturur ilk aşama. fstab girişi şu biçimdedir:

src mnt_point type mnt_flags fs_mgr_flags

Devicetree özellikleri şu biçimi taklit edecek şekilde tanımlanır:

  • fstab giriş, şu değerin altında olmalıdır: cihaz ağacında /firmware/android/fstab ve bir uyumlu dize android,fstab olarak ayarlandı.
  • /firmware/android/fstab altındaki her düğüm tek erken bağlantı fstab girişi. Bir düğümde aşağıdakiler bulunmalıdır özellikleri tanımlıyor:
    • dev, etiketi temsil eden cihaz düğümüne işaret etmelidir bölüm by-name
    • type, fstab dosya)
    • mnt_flags, ekleme işaretlerinin virgülle ayrılmış listesi olmalıdır (fstab dosyada olduğu gibi)
    • fsmgr_flags, Android fs_mgr flags listesi olmalıdır (fstab dosyalarında olduğu gibi)
  • A/B bölümlerinde slotselect fs_mgr seçeneği olmalıdır.
  • dm-verity'nin etkin olduğu bölümlerde verify fs_mgr olmalıdır. seçeneğini belirleyin.

Örnek: N6P'de /system ve /vendor

Aşağıdaki örnekte system için cihaz ağacını erkenden ekleme gösterilmektedir ve Nexus 6P'de vendor bölüm:

/ {
  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";
        };
      };
    };
  };
};

Örnek: Pixel'de /vendor

Aşağıdaki örnekte /vendor için cihaz ağacını erkenden ekleme gösterilmektedir (şuna tabi bölümler için slotselect eklemeyi unutmayın: 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";
        };
      };
    };
  };
};

Bölümleri erkenden ekleme, VBoot 2.0

VBoot 2.0, Android Doğrulanmış Başlatma'dır (AVB). Erkenden proje başlatma belgesine VBoot 2.0 ile ekleme bölümleri şunlardır:

  1. Cihaz düğümü yolları, by-name sembolik bağlantılarını kullanmalıdır fstab ve cihaz ağacı girişleri. Örneğin, /dev/block/mmcblk0pX kullanarak bölümlere ayırarak, bölümlerin cihaz düğümünün adı ve cihaz düğümünün /dev/block/…./by-name/{system,vendor,odm}.
  2. Sistem değişkenleri (ör. PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION ve CUSTOM_IMAGE_VERITY_BLOCK_DEVICE) DEĞİLDİR VBoot 2.0 için gereklidir. Bunun yerine, VBoot 2.0'da kullanıma sunulan derleme değişkenleri (BOARD_AVB_ENABLE := true dahil) tanımlanmalıdır; - tam yapılandırma, AVB için sistem entegrasyonu oluşturun.
  3. Cihaz ağacı yer paylaşımları aracılığıyla yapılan girişler, fstab dosya parçası. Örneğin, /vendor dosyasını cihaz ağacına, fstab dosyası ekle o girişi tekrar etmemelidir.
  4. VBoot 2.0, erken ekleme durumunda verifyatboot desteklemez etkinleştirilip etkinleştirilmediğini kontrol edin.
  5. Doğrulanmış bölümlerin doğrulama modu/durumu androidboot.veritymode kullanarak kernel_cmdline seçeneğinin yanındaki kutuyu işaretleyin (mevcut gereklilik). Aşağıdaki düzeltme eklerini eklemeyi unutmayın: Ortalama görüntüleme süresi:

Devicetree'yi erken ekle, VBoot 2.0

VBoot 2.0 için devicetree'deki yapılandırma VBoot 1.0, şu istisnalar vardır:

  • fsmgr_flag, verify yerine avb.
  • AVB meta verisi içeren tüm bölümler Cihaz ağacı, bölüm erken eklenmese bile (örneğin, /boot) bilgileri gösterilir.

Örnek: N5X'te /system ve /vendor

Aşağıdaki örnekte, Nexus 5X'te system ve vendor bölümleri. Not:

  • /system, AVB ile eklendi ve /vendor: olmadan eklenir.
  • Nexus 5X'te /vbmeta bölümü olmadığından üst düzey vbmeta, /boot bölümünün sonunda bulunur (ayrıntılar için AOSP değişiklik listesine bakın).
    / {
      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";
            };
          };
        };
      };
    };
    

Örnek: Pixel'de /vendor

Aşağıdaki örnekte Pixel'e erkenden /vendor kurulumu gösterilmektedir. Not:

  • vbmeta girişte daha fazla bölümlendirme belirtilir çünkü bu bölümler şunlardır: AVB tarafından korunur.
  • Yalnızca /vendor olsa bile tüm AVB bölümleri dahil edilmelidir. başlar.
  • A/B'ye tabi bölümler için slotselect eklemeyi unutmayın.
    / {
      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";
            };
          };
        };
      };
    };