Dinamik bölümlendirme uygulama

Dinamik bölümlendirme, dm doğrusal cihaz eşleyici kullanılarak uygulanır. modülünü kullanabilirsiniz. super bölümü şunları içerir: Her bir dinamik bölümün adlarını ve blok aralıklarını listeleyen meta veri super içinde Bu ilk aşama init sırasında, meta veriler ayrıştırılıp doğrulanır ve sanal blok cihazları oluşturulur. temsil eder.

OTA uygulanırken dinamik bölümler otomatik olarak oluşturulur. gerektiği şekilde yeniden boyutlandırılabilir veya silinebilir. A/B cihazları için iki kopya vardır: değişiklikler yalnızca bu kopyayı temsil eden kopyaya unutmayın.

Dinamik bölümlendirmeler kullanıcı alanında uygulandığından, dinamik yapılamaz. Örneğin, boot, dtbo ve vbmeta, bootloader tarafından okunur ve bu nedenle fiziksel bölümler olarak kalmalıdır.

Her dinamik bölüm bir güncelleme grubuna ait olabilir. Bu grupları, söz konusu gruptaki bölümlerin kullanabileceği maksimum alanı sınırlandırır. Örneğin, system ve vendor bir system ve vendor.

Yeni cihazlara dinamik bölümler uygulayın

Bu bölümde, dinamik bölümlerin yeni cihazlara nasıl uygulanacağı açıklanmaktadır. Android 10 ve sonraki sürümlerle kullanıma sunulacak. Güncellemek için mevcut cihazlar için Android'i yeni sürüme geçirme cihazlar.

Bölüm değişiklikleri

Android 10 ile kullanıma sunulan cihazlar için super adlı bir bölümlendirme yapıyorum. super Bölüm, A/B yuvalarını dahili olarak işler; böylece A/B cihazlarının ayrı super_a ve super_b bölümleri vardır. Bootloader tarafından kullanılmayan tüm salt okunur AOSP bölümleri dinamik olmalı ve GUID Bölüm Tablosundan (GPT) kaldırılmalıdır. Tedarikçi firmaya özel bölümlerin dinamik olması gerekmez ve yerleştirilebilir onay kutusunu işaretleyin.

super öğesinin boyutunu tahmin etmek için ilgili öğenin boyutlarını ekleyin bölümlerin GPT'den silinmediği anlamına gelir. A/B cihazlarında bu, her iki alanın da boyutunu içermelidir. Şekil 1 dinamik reklama dönüştürmeden önce ve sonra örnek bölüm tablosu her bölüm için geçerlidir.

Bölüm tablosu düzeni
Şekil 1. Şu durumlarda yeni fiziksel bölüm tablosu düzeni: dinamik bölümlere dönüştürme
ziyaret edin.
'nı inceleyin.

Desteklenen dinamik bölümler şunlardır:

  • Sistem
  • Satıcı
  • Ürün
  • Sistem Uzantısı
  • ODM

Android 10 ile kullanıma sunulan cihazlarda çekirdek komut satırı seçeneği androidboot.super_partition boş olmalıdır; böylece sysprop komutu ro.boot.super_partition boş.

Bölüm hizalaması

Cihaz eşleme modülü, super bölümü doğru bir şekilde hizalanmadı. İlgili içeriği oluşturmak için kullanılan super bölümünün minimum G/Ç ile hizalanması ZORUNLUDUR istek boyutunu engelleme katmanı tarafından belirlenir. Varsayılan olarak oluşturmak için (lpmake üzerinden super bölüm resmi), 1 MiB'lık hizalamanın her dinamik bölüm için yeterlidir. Ancak tedarikçiler super bölümünün doğru hizalandığından emin olun.

Blok cihazların minimum istek boyutunu belirlemek için sysfs inceleniyor. Örnek:

# ls -l /dev/block/by-name/super
lrwxrwxrwx 1 root root 16 1970-04-05 01:41 /dev/block/by-name/super -> /dev/block/sda17
# cat /sys/block/sda/queue/minimum_io_size
786432

super bölümünün hizalamasını oluşturabilirsiniz:

# cat /sys/block/sda/sda17/alignment_offset

Hizalama uzaklığı 0 OLMALIDIR.

Cihaz yapılandırma değişiklikleri

Dinamik bölümlendirmeyi etkinleştirmek için aşağıdaki işareti device.mk:

PRODUCT_USE_DYNAMIC_PARTITIONS := true

Pano yapılandırma değişiklikleri

super bölümünün boyutunu ayarlamanız gerekir:

BOARD_SUPER_PARTITION_SIZE := <size-in-bytes>

A/B cihazlarında toplam boyut oranında dinamik bölüm resmi, super bölüm boyutu.

Dinamik bölüm listesini aşağıdaki gibi yapılandırabilirsiniz. Örneğin, güncelleme gruplarını kullanarak, BOARD_SUPER_PARTITION_GROUPS değişkeni Her bir grubun adı ve bir BOARD_group_SIZE var ve BOARD_group_PARTITION_LIST değişkeni gösteriliyor. A/B cihazlarda, bir grubun maksimum boyutu yalnızca bir tanesini kapsamalıdır slot'u belirtir.

Tüm bölümleri bir gruba yerleştiren örnek bir cihaz örneği adı example_dynamic_partitions:

BOARD_SUPER_PARTITION_GROUPS := example_dynamic_partitions
BOARD_EXAMPLE_DYNAMIC_PARTITIONS_SIZE := 6442450944
BOARD_EXAMPLE_DYNAMIC_PARTITIONS_PARTITION_LIST := system vendor product

Aşağıda, sistem ve ürün hizmetlerinin group_foo ve vendor, product, ve odm group_bar:

BOARD_SUPER_PARTITION_GROUPS := group_foo group_bar
BOARD_GROUP_FOO_SIZE := 4831838208
BOARD_GROUP_FOO_PARTITION_LIST := system product_services
BOARD_GROUP_BAR_SIZE := 1610612736
BOARD_GROUP_BAR_PARTITION_LIST := vendor product odm
. ziyaret edin.
  • Sanal A/B başlatma cihazları için tüm grupların maksimum boyutlarının toplamı, en fazla
    olmalıdır: BOARD_SUPER_PARTITION_SIZE - genel gider
    Sanal A/B'yi Uygulama bölümünü inceleyin.
  • A/B lansman cihazları için tüm grupların maksimum boyutlarının toplamı, be:
    BOARD_SUPER_PARTITION_SIZE / 2 - genel gider
  • A/B olmayan cihazlar ve geriye dönük A/B cihazları için maksimum tüm grupların boyutları şu olmalıdır:
    BOARD_SUPER_PARTITION_SIZE - genel gider
  • Derleme anında, her bir bölüm için görüntü boyutlarının toplamı bir güncelleme grubundaki öğeler, grubun maksimum boyutunu aşmamalıdır.
  • Meta verilerin dikkate alınması için hesaplamada ek yük gerekir. ayarlayabilirsiniz. Makul bir ek yük 4 MiB'tır, ancak cihazın ihtiyaçlarına göre daha büyük bir ek yük seçebilirsiniz.

Dinamik bölümleri boyutlandırma

Dinamik bölümlendirmelerden önce bölüm boyutları, gelecekteki güncellemeler için yeterli alana sahip olduklarından emin olun. Gerçek boyut olduğu gibi alındı ve salt okunur bölümlerin çoğunda bir miktar kullanabilir. Dinamik bölümlerde bu boş alan ve OTA sırasında bölümleri büyütmek için kullanılabilir. Bölümlendirmelerin boşa yer açmadığından ve bir alt sınırdan daha büyük bir alana

Salt okunur ext4 görüntüleri için derleme sistemi, kod gömülü bölüm boyutu belirtilmediyse minimum boyutu belirtir. İlgili içeriği oluşturmak için kullanılan görüntüye sığdırır ve böylece dosya sisteminde olabildiğince az dosya mümkün olduğunca az alan dönüştürmenizi sağlar. Bu, cihazın boşluksuz bir şekilde OTA'lar için kullanılabilecek bir alan.

Ayrıca, ext4 resimleri blok özelliği etkinleştirilerek daha da sıkıştırılabilir. tekilleştirmedir. Bunu etkinleştirmek için aşağıdaki yapılandırmayı kullanın:

BOARD_EXT4_SHARE_DUP_BLOCKS := true

Minimum bölüm boyutunun otomatik olarak atanması istenmiyorsa Bölüm boyutunu kontrol etmenin iki yolu vardır. Hedeflerinize göre bir minimum boş alan BOARD_partitionIMAGE_PARTITION_RESERVED_SIZE, ya da yeni bir web sitesi Zorunlu kılma süresi: BOARD_partitionIMAGE_PARTITION_SIZE dinamik bölümleri belirli bir boyuta böler. Bunların ikisi de kullanmanızı önermeyiz.

Örnek:

BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE := 52428800

Bu işlem, product.img aralığındaki dosya sisteminde 50 MiB kullanılmayan alan.

Kök olarak sistem değişiklikleri

Android 10 ile kullanıma sunulan cihazlar sistemi kök olarak kullanın.

Dinamik bölümleri olan cihazlar (cihazların kullanıma sunulması veya geriye dönük olarak ayarlanmasına bakılmaksızın) dinamik bölümlendirmeler) kök olarak sistem kullanmamalıdır. Linux çekirdeği super bölümünü yorumladığı için eklenemiyor system. system artık şu cihaz tarafından ekleniyor: ilk aşama init.

BOARD_BUILD_SYSTEM_ROOT_IMAGE özelliğini ayarlama. İçinde Android 10, BOARD_BUILD_SYSTEM_ROOT_IMAGE flag'i yalnızca şunun için kullanılır: mi yoksa çekirdek tarafından mı yoksa ilk aşama init.

BOARD_BUILD_SYSTEM_ROOT_IMAGE, true olarak ayarlanıyor bir yapı hatasına neden olur. PRODUCT_USE_DYNAMIC_PARTITIONS aynı zamanda true.

BOARD_USES_RECOVERY_AS_BOOT doğru değerine ayarlandığında kurtarma görüntüsünü içeren boot.img dosyası biçiminde oluşturulur ramdisk'e bakın. Bootloader daha önce skip_initramfs çekirdeğini kullanıyordu komut satırı parametresini kullanabilirsiniz. Örneğin, Android 10 cihazlarda bootloader'ın bu işlevi GEREKTİRMEMELİDİR skip_initramfs komutunu çekirdek komut satırına ekleyin. Bunun yerine, bootloader Kurtarma işlemini atlamak için androidboot.force_normal_boot=1 değerini geçmelidir normal Android'i başlatın. Android 12 ile kullanıma sunulan cihazlar veya sonraki sürümler androidboot.force_normal_boot=1 öğesini aktarmak için bootconfig'i kullanmalıdır.

AVB yapılandırma değişiklikleri

Android kullanırken Doğrulanmış Başlatma 2.0 (cihaz zincirli bölüm kullanmıyorsa) tanımlar ise herhangi bir değişiklik gerekmez. Zincirli kullanılıyorsa ancak doğrulanmış bölümlerden biri dinamikse, ve değişiklik yapılması gerekir.

Zincir ve system ve için vbmeta vendor bölüm.

BOARD_AVB_SYSTEM_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_SYSTEM_ALGORITHM := SHA256_RSA2048
BOARD_AVB_SYSTEM_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_SYSTEM_ROLLBACK_INDEX_LOCATION := 1

BOARD_AVB_VENDOR_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_VENDOR_ALGORITHM := SHA256_RSA2048
BOARD_AVB_VENDOR_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_VENDOR_ROLLBACK_INDEX_LOCATION := 1

Bootloader, bu yapılandırmayla bir vbmeta system sonundaki ve vendor bölüm. Çünkü bu bölümler artık tarafından görülebilir (super konumunda bulunur), gerekiyor.

  • vbmeta_system ve vbmeta_vendor ekle cihazın bölüm tablosunu da ekler. A/B cihazları için vbmeta_system_a, vbmeta_system_b, vbmeta_vendor_a ve vbmeta_vendor_b. Eğer bu bölümlerden birini veya daha fazlasını eklediğinizde, bunlar aynı boyutta olmalıdır vbmeta bölümü olarak tanımlıyor.
  • VBMETA_ ve ekleyerek yapılandırma bayraklarını yeniden adlandırın zincirlemenin hangi bölümlere uzandığını belirtin:
    BOARD_AVB_VBMETA_SYSTEM := system
    BOARD_AVB_VBMETA_SYSTEM_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
    BOARD_AVB_VBMETA_SYSTEM_ALGORITHM := SHA256_RSA2048
    BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
    BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX_LOCATION := 1
    
    BOARD_AVB_VBMETA_VENDOR := vendor
    BOARD_AVB_VBMETA_VENDOR_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
    BOARD_AVB_VBMETA_VENDOR_ALGORITHM := SHA256_RSA2048
    BOARD_AVB_VBMETA_VENDOR_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
    BOARD_AVB_VBMETA_VENDOR_ROLLBACK_INDEX_LOCATION := 1
    

Bir cihaz bu bölümlerden birini veya ikisini birden kullanıyor olabilir ya da hiçbirini kullanmıyor olabilir. Değişiklikler yalnızca mantıksal bir bölümlendirmeye bağlı olduğunda gereklidir.

AVB bootloader değişiklikleri

Bootloader libavb'yi yerleştirdiyse aşağıdaki yamaları içerir:

Zincirli bölümler kullanıyorsanız ek yama ekleyin:

  • 49936b4c0109411fdd38bd4ba3a32a01c40439a9 — "libavb:/Bölümlemenin başında vbmeta blobs'u destekle."

Çekirdek komut satırı değişiklikleri

Yeni bir parametre (androidboot.boot_devices) eklenmelidir komutuna eklemeniz gerekir. init tarafından şu amaçlarla kullanılır: /dev/block/by-name sembolik bağlantıyı etkinleştir. Bu olmalıdır. tarafından oluşturulan temel ad sembolik bağlantısına ueventd, yani, /dev/block/platform/device-path/by-name/partition-name. Android 12 veya sonraki sürümlerle kullanıma sunulan cihazlarda bootconfig'i kullanarak androidboot.boot_devices öğesini init cihazına aktarın.

Örneğin, üst bölüm ada göre sembolik bağlantısı ise /dev/block/platform/soc/100000.ufshc/by-name/super, komut satırı parametresini BoardConfig.mk dosyasına şöyle olur:

BOARD_KERNEL_CMDLINE += androidboot.boot_devices=soc/100000.ufshc
Bootconfig parametresini BoardConfig.mk dosyasına aşağıdaki şekilde ekleyebilirsiniz:
BOARD_BOOTCONFIG += androidboot.boot_devices=soc/100000.ufshc

fstab değişiklikleri

Cihaz ağacı ve cihaz ağacı yer paylaşımları Fstab içermemelidir emin olun. Ramdisk'in parçası olacak bir fstab dosyası kullanın.

Mantıksal bölümler için fstab dosyasında değişiklik yapılmalıdır:

  • fs_mgr flags alanı logical işaretini içermelidir ve kullanıma sunulan first_stage_mount işareti Android 10, bir bölümün ilk aşamaya monte edilir.
  • Bir bölüm, avb=vbmeta partition name fs_mgr işareti ve ardından belirtilen vbmeta bölüm, önceki ilk aşama init tarafından başlatıldı eklemeye çalışıyordum.
  • dev alanı, bölüm adı olmalıdır.

Aşağıdaki fstab girişleri sistemi, tedarikçiyi ve ürünü mantıksal olarak ayarlar bölümlerindeki tüm ayarları değiştirebilirsiniz.

#<dev>  <mnt_point> <type>  <mnt_flags options> <fs_mgr_flags>
system   /system     ext4    ro,barrier=1        wait,slotselect,avb=vbmeta,logical,first_stage_mount
vendor   /vendor     ext4    ro,barrier=1        wait,slotselect,avb,logical,first_stage_mount
product  /product    ext4    ro,barrier=1        wait,slotselect,avb,logical,first_stage_mount
.

fstab dosyasını ilk aşama ramdisk'e kopyalayın.

SELinux değişiklikleri

Süper bölüm blok cihazı etiketle işaretlenmelidir super_block_device Örneğin, üst bölüm ada göre sembolik bağlantısı ise /dev/block/platform/soc/100000.ufshc/by-name/super, şu satırı file_contexts öğesine ekleyin:

/dev/block/platform/soc/10000\.ufshc/by-name/super   u:object_r:super_block_device:s0

hızlı önyükleme

Bootloader (veya kullanıcı alanı dışında yanıp sönen herhangi bir araç) dinamik bölümlere ayırır, dolayısıyla bunları yanıp söndüremez. Bu sorunu gidermek için Fastboot protokolünün bir kullanıcı alanı uygulamasını kullanmalıdır; hızlı önyükleme.

Fastbootd'un nasıl uygulanacağı hakkında daha fazla bilgi için Fastboot'u Kullanıcı Alanı'na Taşıma bölümüne bakın.

adb yeniden ekleme

Eng veya userdebug derlemelerini kullanan geliştiriciler için adb remount hızlı iterasyon için son derece yararlıdır. Dinamik bölümler Artık ücretsiz olmadığı için adb remount için sorun alan sağlar. Bu sorunu gidermek için cihazlar yer paylaşımlı Üst bölümde boş alan olduğu sürece adb remount, otomatik olarak geçici bir dinamik oluşturur bölümlendirme ve yazmalar için yer paylaşımlı fişler kullanır. Geçici bölüm adı scratch olduğundan, bu adı diğer her bölüm için geçerlidir.

Bindirmelerin nasıl etkinleştirileceği hakkında daha fazla bilgi için yer paylaşımları AOSP'de README değerini alır.

Android cihazları yeni sürüme geçirme

Bir cihazı Android 10'a yükseltirseniz ve OTA'ya dinamik bölümlendirme desteğini dahil etmek istiyorsanız yerleşik bölüm tablosunu değiştirebilirsiniz. Bazı ek yapılandırmalar gereklidir.

Cihaz yapılandırma değişiklikleri

Dinamik bölümlendirmeyi geriye dönük olarak ayarlamak için aşağıdaki işaretleri device.mk:

PRODUCT_USE_DYNAMIC_PARTITIONS := true
PRODUCT_RETROFIT_DYNAMIC_PARTITIONS := true

Pano yapılandırma değişiklikleri

Aşağıdaki pano değişkenlerini ayarlamanız gerekir:

  • BOARD_SUPER_PARTITION_BLOCK_DEVICES uygulamasını, kullanılan engellenen cihazlar listesine ayarla depolama alanı oluşturabilirsiniz. Bu, mevcut fiziksel pozisyonların adlarının listesidir cihazdaki bölümleri içerir.
  • BOARD_SUPER_PARTITION_partition_DEVICE_SIZE öğesini boyutlara ayarla her bir blok cihazın BOARD_SUPER_PARTITION_BLOCK_DEVICES'inde gösterildiği anlamına gelir. Bu, cihazdaki mevcut fiziksel bölümlerin boyutlarının listesidir. Bu genelde Mevcut panoda BOARD_partitionIMAGE_PARTITION_SIZE yapılandırmanın üç yolu vardır.
  • Mevcut BOARD_partitionIMAGE_PARTITION_SIZE ayarını tümü için kaldır BOARD_SUPER_PARTITION_BLOCK_DEVICES içindeki bölümler.
  • BOARD_SUPER_PARTITION_SIZE değerini şunun toplamına ayarla: BOARD_SUPER_PARTITION_partition_DEVICE_SIZE.
  • BOARD_SUPER_PARTITION_METADATA_DEVICE öğesini şu blok cihaza ayarlayın: dinamik bölüm meta verileri depolanır. Aşağıdakilerden biri olmalıdır: BOARD_SUPER_PARTITION_BLOCK_DEVICES Bu ayar genellikle system
  • BOARD_SUPER_PARTITION_GROUPS ayarla, BOARD_group_SIZE ve Sırasıyla BOARD_group_PARTITION_LIST. Görüntüleyin Yeni cihazlarda kart yapılandırma değişiklikleri inceleyebilirsiniz.

Örneğin, cihazda sistem ve tedarikçi bölümleri varsa ve bu bölümü bunları dinamik bölümlere ekleyebilirsiniz. Ayrıca güncelleme sırasında yeni bir ürün bölümü eklemek isterseniz şu Jamboard yapılandırmasını ayarlayın:

BOARD_SUPER_PARTITION_BLOCK_DEVICES := system vendor
BOARD_SUPER_PARTITION_METADATA_DEVICE := system

# Rename BOARD_SYSTEMIMAGE_PARTITION_SIZE to BOARD_SUPER_PARTITION_SYSTEM_DEVICE_SIZE.
BOARD_SUPER_PARTITION_SYSTEM_DEVICE_SIZE := <size-in-bytes>

# Rename BOARD_VENDORIMAGE_PARTITION_SIZE to BOARD_SUPER_PARTITION_VENDOR_DEVICE_SIZE
BOARD_SUPER_PARTITION_VENDOR_DEVICE_SIZE := <size-in-bytes>

# This is BOARD_SUPER_PARTITION_SYSTEM_DEVICE_SIZE + BOARD_SUPER_PARTITION_VENDOR_DEVICE_SIZE
BOARD_SUPER_PARTITION_SIZE := <size-in-bytes>

# Configuration for dynamic partitions. For example:
BOARD_SUPER_PARTITION_GROUPS := group_foo
BOARD_GROUP_FOO_SIZE := <size-in-bytes>
BOARD_GROUP_FOO_PARTITION_LIST := system vendor product

SELinux değişiklikleri

Süper bölüm blok cihazları super_block_device_type Örneğin, cihazda system ve vendor bölümlerini blok olarak kullanmak istiyorsunuz cihazların dinamik bölümlerin boyutlarını depolayabileceğini ve bunların adlarına sembolik bağlantıları system_block_device:

/dev/block/platform/soc/10000\.ufshc/by-name/system   u:object_r:system_block_device:s0
/dev/block/platform/soc/10000\.ufshc/by-name/vendor   u:object_r:system_block_device:s0

Ardından, aşağıdaki satırı device.te öğesine ekleyin:

typeattribute system_block_device super_block_device_type;

Diğer yapılandırmalar için Uygulama yeni cihazlardaki dinamik bölümlerin nasıl görüneceğini belirler.

Düzeltme güncellemeleri hakkında daha fazla bilgi için bkz. Dinamik Olmayan A/B Cihazları için OA Bölümler.

Fabrika ayarı görüntüleri

Dinamik bölüm desteği ile başlatılan cihazlarda fabrika görüntülerine yüklemek için kullanıcı alanı hızlı önyüklemesi (kullanıcı alanına önyükleme) daha yavaş çalışır.

make dist, bu sorunu gidermek için Doğrudan süper reklama yüklenebilen super.img resim bölüm. Mantıksal ve bölümleridir; yani system.img, super yanı sıra vendor.img ve diğerleri bölüm meta verileridir. Bu resim doğrudan Ek araç kullanılmadan veya kullanılmadan super bölümü hızlı önyükleme. super.img, derlemeden sonra ${ANDROID_PRODUCT_OUT}.

Dinamik bölümlerle başlatılan A/B cihazları için super.img, A alanında resimler içeriyor. süper görüntüyü yeniden başlatmadan önce A yuvasını olanak tanır.

make dist, yedekleme cihazları için bir set oluşturur Doğrudan yüklenebilecek super_*.img resim fiziksel bölümleri vardır. Örneğin, make dist super_system.img ve super_vendor.img oluşturur sistem BOARD_SUPER_PARTITION_BLOCK_DEVICES olduğunda yardımcı olur. Bu görüntüler, OTA klasörüne şu konuma yerleştirilir: target_files.zip

Cihaz haritalayıcı depolama cihazı ayarı

Dinamik bölümlendirme, deterministik olmayan bir dizi cihaz eşleyici içerir nesneler'i tıklayın. Bunların tümü beklendiği gibi örneklenmeyebilir, bu nedenle tüm ekler ve ilişkili tüm bölümlerin Android özelliklerini temel depolama cihazlarını kullanmaya devam ediyor.

init içindeki bir mekanizma, eklemeleri ve eşzamansız olarak izler Android özelliklerini günceller. Bu işlemin ne kadar süreceği garanti edilmez süre sınırı belirlemek için yeterli süre tanımanız gerekir. on property tetikleyicinin tümünün tepki vermesi için izin verin. Tesisler dev.mnt.blk.<partition> burada: <partition> root, system, data veya Örneğin vendor. Her mülk temel depolama cihazının adını girin:

taimen:/ % getprop | grep dev.mnt.blk
[dev.mnt.blk.data]: [sda]
[dev.mnt.blk.firmware]: [sde]
[dev.mnt.blk.metadata]: [sde]
[dev.mnt.blk.persist]: [sda]
[dev.mnt.blk.root]: [dm-0]
[dev.mnt.blk.vendor]: [dm-1]

blueline:/ $ getprop | grep dev.mnt.blk
[dev.mnt.blk.data]: [dm-4]
[dev.mnt.blk.metadata]: [sda]
[dev.mnt.blk.mnt.scratch]: [sda]
[dev.mnt.blk.mnt.vendor.persist]: [sdf]
[dev.mnt.blk.product]: [dm-2]
[dev.mnt.blk.root]: [dm-0]
[dev.mnt.blk.system_ext]: [dm-3]
[dev.mnt.blk.vendor]: [dm-1]
[dev.mnt.blk.vendor.firmware_mnt]: [sda]

init.rc dili, Android özelliklerinin kullanılmasına izin verir: genişletildiğinden ve depolama cihazları platforma göre ayarlanabilir aşağıdaki gibi komutlarla gerektiğinde:

write /sys/block/${dev.mnt.blk.root}/queue/read_ahead_kb 128
write /sys/block/${dev.mnt.blk.data}/queue/read_ahead_kb 128

İkinci aşamadaki init. adımda komut işleme başladığında, epoll loop etkin hale gelir ve değerler güncellenmeye başlar. Ancak, Mülk tetikleyicileri init sonlarına kadar etkin olmayacağından , ilk başlatma aşamalarında root işlemek için kullanılamaz, system veya vendor. Örneğin, read_ahead_kb çekirdek varsayılanını, init.rc komut dosyası, early-fs içinde geçersiz kılabilir ( çeşitli arka plan programları ve tesislerin başlatılmasına olanak tanır). Bu nedenle Google, on property özelliğini, bir sys.read_ahead_kb gibi init.rc tarafından kontrol edilen mülk (bu örnekte olduğu gibi, operasyonların zamanlamasını ve yarış koşullarını önlemek için) örnekler:

on property:dev.mnt.blk.root=* && property:sys.read_ahead_kb=*
    write /sys/block/${dev.mnt.blk.root}/queue/read_ahead_kb ${sys.read_ahead_kb:-2048}

on property:dev.mnt.blk.system=* && property:sys.read_ahead_kb=*
    write /sys/block/${dev.mnt.blk.system}/queue/read_ahead_kb ${sys.read_ahead_kb:-2048}

on property:dev.mnt.blk.vendor=* && property:sys.read_ahead_kb=*
    write /sys/block/${dev.mnt.blk.vendor}/queue/read_ahead_kb ${sys.read_ahead_kb:-2048}

on property:dev.mnt.blk.product=* && property:sys.read_ahead_kb=*
    write /sys/block/${dev.mnt.blk.system_ext}/queue/read_ahead_kb ${sys.read_ahead_kb:-2048}

on property:dev.mnt.blk.oem=* && property:sys.read_ahead_kb=*
    write /sys/block/${dev.mnt.blk.oem}/queue/read_ahead_kb ${sys.read_ahead_kb:-2048}

on property:dev.mnt.blk.data=* && property:sys.read_ahead_kb=*
    write /sys/block/${dev.mnt.blk.data}/queue/read_ahead_kb ${sys.read_ahead_kb:-2048}

on early-fs:
    setprop sys.read_ahead_kb ${ro.read_ahead_kb.boot:-2048}

on property:sys.boot_completed=1
   setprop sys.read_ahead_kb ${ro.read_ahead_kb.bootcomplete:-128}