Bölüm düzeni

Android 10'da kök dosya sistemi artık kullanılamayacak ramdisk.img bölümüne dahil edilir ve bunun yerine system.img (yani system.img her zaman (BOARD_BUILD_SYSTEM_ROOT_IMAGE ayarlanmışsa). Cihazlar Android 10 ile kullanıma sunuluyor:

  • Kök olarak sistem bölüm düzeni kullan ( hiçbir seçenek olmadan derleme) sağlar.
  • dm-Doğrusal için gerekli olan bir ramdisk kullanılmalıdır.
  • BOARD_BUILD_SYSTEM_ROOT_IMAGE değeri false olarak ayarlanmalıdır. Bu ayar yalnızca RAM disk kullanan cihazları birbirinden ayırt etmek için kullanılır ve disk yerine ramdisk kullanmayan (ve system.img doğrudan ekleyebilirsiniz).

Kök olarak sistem yapılandırmasının anlamı Android 9 ile Android 9 arasında farklılık gösterir Android 10. Android 9 kök olarak sistemde yapılandırma, BOARD_BUILD_SYSTEM_ROOT_IMAGE şuna ayarlandı: true; bu, derlemeyi kök dosya sistemini system.img'yi, ardından system.img adlı dosyayı kök dosya olarak ekleyin. sistemidir (rootfs). Cihazlar için bu yapılandırma zorunludur Bu özellik, Android 9 ile kullanıma sunulacak ancak Android 9 ve Android'in daha düşük sürümlerini çalıştıran cihazlar için. Android'de 10 kök olarak sistem yapılandırmasıyla, derleme her zaman $TARGET_SYSTEM_OUT ve $TARGET_ROOT_OUT birleşir system.img; bu yapılandırma, tüm cihazlar için varsayılan davranıştır Android 10 yüklü halde.

Android 10, destekle ilgili başka değişiklikler yapıyor dinamik bölümleri olarak ayarlayın. kablosuz olarak (OTA) güncelleme yapılmasını sağlayan bir kullanıcı alanı bölümlendirme bölümler oluşturabilir, yeniden boyutlandırabilir veya kaldırabilirsiniz. Bu değişiklik kapsamında, artık çalıştırılan cihazlara mantıksal sistem bölümünü ekleyemeyecek. Android 10'da yüklü olduğu için bu işlem, sahne başlangıcı.

Aşağıdaki bölümlerde, başarılı bir web sitesi için kök olarak sistem gereksinimleri yalnızca sisteme yönelik OTA'lar, cihazların kök olarak sistem kullanılacak şekilde güncellenmesi için rehberlik sağlar. (bölüm düzeni değişiklikleri ve dm-verity çekirdek gereksinimleri dahil). Örneğin, RAM'deki değişikliklerle ilgili ayrıntılar, bkz. Ramdisk Bölümler.

Yalnızca sisteme yönelik OTA'lar hakkında

Android sürümlerinin güncellenmesini sağlayan yalnızca sistem OTA'ları Diğer değişiklikleri değiştirmeden system.img ve product.img kök olarak sistem bölüm düzeni gerektirir. Android çalıştıran tüm cihazlar 10. kök olarak sistem bölümü düzeni yalnızca sisteme özgü OTA'ları etkinleştirin.

A/B ve A/B olmayan cihazlarla ilgili ayrıntılar için şuraya bakın: A/B (Sorunsuz) Sistem Güncellemeleri.

Tedarikçi firma yer paylaşımını kullan

Tedarikçi firma yer paylaşımı, değişiklikleri vendor üzerinde yer paylaşımlı olarak ayarlamanıza olanak tanır. bölümü gösterilir. Tedarikçi firma yerleşimi, tedarikçi firma modüllerinden oluşan vendor üzerine yerleştirilen product bölümü mevcut modüllerin değiştirilmesi ve eklenmesi gerekir.

Cihaz başlatıldığında init işlemi ilki tamamlar sahne ekleme ve varsayılan özellikleri okur. Sonra arama yapar /product/vendor_overlay/<target_vendor_version> ve bağlantı noktaları karşılık gelen vendor bölüm dizinindeki her bir alt dizin aşağıdaki koşullar karşılanırsa:

  • /vendor/<overlay_dir> mevcut.
  • /product/vendor_overlay/<target_vendor_version>/<overlay_dir>. /vendor/<overlay_dir> ile aynı dosya bağlamına sahip.
  • init öğesinin şu dosya bağlamına eklenmesine izin veriliyor: /vendor/<overlay_dir>.

Tedarikçi firma yer paylaşımını uygulama

Tedarikçi firma yer paylaşımı dosyalarını /product/vendor_overlay/<target_vendor_version> Bu dosyalar Cihaz başlatıldığında vendor bölümünü yer paylaşımlı olarak değiştirir ve dosyaları değiştirir aynı ada sahip olmalı ve tüm yeni dosyaları eklemelisiniz. Tedarikçi firma yer paylaşımı dosyaları kaldıramaz "vendor" bölümünden görebilirsiniz.

Tedarikçi firma yer paylaşımı dosyaları, hedef dosyalarla aynı dosya bağlamına sahip olmalıdır vendor bölümünde yer alırlar. Varsayılan olarak, /product/vendor_overlay/<target_vendor_version> dizini vendor_file bağlama sahip. Dosya içeriği uyuşmazlıkları varsa arasında, tedarikçi firma bindirme dosyaları ile değiştirdikleri dosyalar arasında seçim yapmak için, Cihaza özgü gizlilik politikası. Dosya bağlamı, dizin düzeyinde ayarlanır. Öğe bir tedarikçi firma yer paylaşımı dizininin dosya bağlamı, hedef dizinle eşleşmiyorsa ve cihaza özel ayarda doğru dosya bağlamı belirtilmemişse tedarikçi firma yer paylaşımı dizininin hedef dizine yerleştirilmediğini gösterir.

Tedarikçi firma yer paylaşımını kullanmak için çekirdek, CONFIG_OVERLAY_FS=y Ayrıca, çekirdek 4.4 veya sonraki bir sürümü ya da "overlayfs: override_creds=off option bypass creator_cred" ile yama uygulanmış bir sürüm.

Tedarikçi firma yer paylaşımı uygulama örneği

Bu prosedür, üst kısımda bulunan tedarikçi firma katmanının dizinler: /vendor/lib/*, /vendor/etc/* ve /vendor/app/*.

  1. Önceden oluşturulmuş tedarikçi firma dosyalarını device/<vendor>/<target>/vendor_overlay/<target_vendor_version>/:

    device/google/device/vendor_overlay/28/lib/libfoo.so
    device/google/device/vendor_overlay/28/lib/libbar.so
    device/google/device/vendor_overlay/28/etc/baz.xml
    device/google/device/vendor_overlay/28/app/qux.apk
    
  2. Önceden oluşturulmuş tedarikçi firma dosyalarını product/vendor_overlay inç device/google/device/device.mk:

    PRODUCT_COPY_FILES += \
        $(call find-copy-subdir-files,*,device/google/device/vendor_overlay,$(TARGET_COPY_OUT_PRODUCT)/vendor_overlay)
    
  3. Hedef vendor bölümü dosyaları ise dosya bağlamlarını tanımlayın vendor_file dışında bağlamlara sahip. Çünkü /vendor/lib/*, vendor_file bağlamını kullanıyor. Bu, örneği bu dizini içermez.

    Şunları ekleyin: device/google/device-sepolicy/private/file_contexts:

    /(product|system/product)/vendor_overlay/[0-9]+/etc(/.*)?   u:object_r:vendor_configs_file:s0
    /(product|system/product)/vendor_overlay/[0-9]+/app(/.*)?   u:object_r:vendor_app_file:s0
    
  4. init işleminin, tedarikçi firma yer paylaşımını dosyaya eklemesine izin ver vendor_file dışındaki bağlamlar. Çünkü init işleminin zaten vendor_file bağlamına ekleme izni var. bu örnek, vendor_file politikasını tanımlamamaktadır.

    Şunları ekleyin: device/google/device-sepolicy/public/init.te:

    allow init vendor_configs_file:dir mounton;
    allow init vendor_app_file:dir mounton;
    

Tedarikçi firma yer paylaşımını doğrulama

Tedarikçi firma yer paylaşımı yapılandırmasını doğrulamak için dosyaları /product/vendor_overlay/<target_vendor_version>/<overlay_dir>. ve dosyaların Google Drive'daki dosyaların üzerine yerleştirilip yerleştirilmediğini /vendor/<overlay_dir>.

userdebug derlemelerinde Atest için bir test modülü vardır:

$ atest -v fs_mgr_vendor_overlay_test

Kök olarak sisteme güncelleme

A/B olmayan cihazları kök olarak sistemi kullanacak şekilde güncellemek için boot.img ve system.img için bölümlendirme şeması, ayarlandı dm-verity'yi yükseltin ve cihaza özgü kök dizindeki başlatma bağımlılıklarını kaldırın. klasörlerini tıklayın.

Bölümleri güncelleme

/boot, A/B cihazlarından farklı olarak recovery bölümü, A/B olmayan cihazlar /recovery bölümünü korumalıdır Bunlar, yedek alan bölümüne sahip olmadıklarından ayrıdır. (örneğin, boot_a ile boot_b) arasında). /recovery ise A/B olmayan cihazdan kaldırıldı ve A/B şemasına benzer hale getirildi, kurtarma modu /boot bölümünde yapılan başarısız bir güncelleme sırasında bozulabilir. Örneğin, bu nedenle, /recovery bölüm ayrı bir bölümlendirme (ör. A/B olmayan cihazlar için /boot) ile kurtarma görüntüsünün ertelenen bir şekilde güncellenmeye devam etmesinin Android 8.1.0 veya önceki sürümleri çalıştıran cihazlardakilerle aynıdır).

Aşağıdaki tabloda A/B olmayan cihazlar için görüntü bölümü farklılıkları listelenmektedir Android 9 öncesi ve sonrası.

Resim Ramdisk (9'dan önce) Kök olarak sistem (9'dan sonra)
boot.img Bir çekirdek ve ramdisk.img içerir:
ramdisk.img
  -/
    - init.rc
    - init
    - etc -> /system/etc
    - system/ (mount point)
    - vendor/ (mount point)
    - odm/ (mount point)
    ...
Yalnızca normal başlatma çekirdeği içerir.
recovery.img Kurtarma çekirdeği ve kurtarma içerir ramdisk.img
system.img Şunları içerir:
system.img
  -/
    - bin/
    - etc
    - vendor -> /vendor
    - ...
.
Birleştirilmiş orijinal system.img ve ramdisk.img:
system.img
  -/
    - init.rc
    - init
    - etc -> /system/etc
    - system/
      - bin/
      - etc/
      - vendor -> /vendor
      - ...
    - vendor/ (mount point)
    - odm/ (mount point)
    ...

Bölümlerin kendisi değişmez; hem ramdisk hem de kök olarak sistem kullanımı şu bölüm şemasını eklemeniz gerekir:

  • /boot
  • /system
  • /system
  • /recovery
  • /vendor vb.

Dm-verity'yi ayarlama

Kök olarak sistemde çekirdek, system.img komutunun altına eklemelidir / (ekleme noktası) dm-verity yoluyla iletişim kurun. AOSP, aşağıdaki dm-verity'yi destekler system.img uygulamaları.

vboot 1.0

vboot 1.0 için çekirdek, Android'e özel meta veri, /system, ardından şuna dönüştür: dm-verity'yi ayarlamak için dm-verity parametrelerini bu çekirdek yamalarını inceleyin. Aşağıdaki örnekte, çekirdek komut satırı:

ro root=/dev/dm-0 rootwait skip_initramfs init=/init
dm="system none ro,0 1 android-verity /dev/sda34"
veritykeyid=id:7e4333f9bba00adfe0ede979e28ed1920492b40f

vboot 2.0

vboot 2.0 için (AVB), bootloader'ın external/avb/libavb; daha sonra /system için hashtree açıklayıcısı, dönüşüm gerçekleştirir şuraya dm-verity parametrelerini özelleştirir ve son olarak parametreleri çekirdek komut satırından değiştirebilirsiniz. (/system öğesinin hashtag tanımlayıcıları /vbmeta veya /system üzerinde olabilir.)

vboot 2.0, aşağıdaki çekirdek yamalarını gerektirir:

Aşağıdaki örnekte, çekirdek komut satırı:

ro root=/dev/dm-0 rootwait  skip_initramfs init=/init

dm="1 vroot none ro 1,0 5159992 verity 1
PARTUUID=00000016-0000-0000-0000-000000000000
PARTUUID=00000016-0000-0000-0000-000000000000 4096 4096 644999 644999
sha1 d80b4a8be3b58a8ab86fad1b498640892d4843a2
8d08feed2f55c418fb63447fec0d32b1b107e42c 10 restart_on_corruption
ignore_zero_blocks use_fec_from_device
PARTUUID=00000016-0000-0000-0000-000000000000 fec_roots 2 fec_blocks
650080 fec_start 650080"

Cihaza özel kök klasörleri kullan

Kök olarak sistem ile, genel sistem imajından (GSI) cihazda yanıp söner (ve çalıştırılmadan önce) Tedarikçi Firma Test Paketi testleri), herhangi bir cihaza özel kök klasörler BOARD_ROOT_EXTRA_FOLDERS ile eklendi kök dizin içeriğinin tamamı GSI olarak kullandığınızdan emin olun. Bu klasörlerin kaldırılması cihazın Cihaza özel kök klasörlere bir bağımlılık varsa önyüklenemez hale gelir (örneğin, ekleme noktaları olarak kullanılırlar).

Bu sorunu önlemek için BOARD_ROOT_EXTRA_FOLDERS parametresini kullanarak şu işlemleri yapmayın: cihaza özel kök klasörler ekleyin. Cihaza özel montaj düzeneği belirtmeniz gerekiyorsa puan, /mnt/vendor/<mount point> kullanın ( değişiklik listeleri) inceleyin. Tedarikçiye özgü bu ekleme noktaları, hem fstab cihaz ağacında doğrudan belirtilir (ilk aşama için mount) ve /vendor/etc/fstab.{ro.hardware} dosyasını (fs_mgr tarafından oluşturulduğu için) /mnt/vendor/*) otomatik olarak eklenir.