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.
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
vevbmeta_vendor
ekle cihazın bölüm tablosunu da ekler. A/B cihazları içinvbmeta_system_a
,vbmeta_system_b
,vbmeta_vendor_a
vevbmeta_vendor_b
. Eğer bu bölümlerden birini veya daha fazlasını eklediğinizde, bunlar aynı boyutta olmalıdırvbmeta
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:
- 818cf56740775446285466eda984acedd4baeac0 — "libavb: Yalnızca cmdline komutu gerektiğinde sorgu bölümü GUID'lerini kabul edersiniz."
- 5abd6bc2578968d24406d834471adfd995a0c2e9 — "İzin ver sistem bölümü eksik"
- 9ba3b6613b4e5130fa01a11d984c6b5f0eb3af05 — "Fix AvbSlotVerifyData->cmdline belki NULL olabilir"
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.ufshcBootconfig 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 sunulanfirst_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 belirtilenvbmeta
bölüm, önceki ilk aşamainit
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ınBOARD_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 panodaBOARD_partitionIMAGE_PARTITION_SIZE
yapılandırmanın üç yolu vardır.- Mevcut
BOARD_partitionIMAGE_PARTITION_SIZE
ayarını tümü için kaldırBOARD_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 genelliklesystem
BOARD_SUPER_PARTITION_GROUPS
ayarla,BOARD_group_SIZE
ve SırasıylaBOARD_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}