Android uygulamaları, önyükleyici tarafından kullanılmak üzere bir cihaz ağacı bloğu (DTB) görüntüsü içerebilir. DTB görüntüsünün konumu (ve DTB görüntü parametrelerini belirtme seçenekleri) Android sürümleri arasında farklılık gösterir.
Android 11'de Genel Çekirdek Görüntüsü (GKI) kullanan cihazların, önyükleme bölümünden taşınan satıcıya özgü tüm bilgileri içeren satıcı önyükleme bölümünü desteklemesi gerekir. DTB görüntüsü satıcıya özel veriler içerdiğinden artık satıcı önyükleme bölümünün bir parçasıdır. DTB görüntü parametrelerini belirtmek için bkz. Satıcı önyükleme başlığı .
Android 10'da cihazlar DTB görüntüsünü önyükleme bölümüne dahil edebilir. DTB görüntü parametrelerini belirtmek için bkz . DTB görüntüsünün önyükleme görüntüsüne dahil edilmesi .
Android 9 ve daha düşük sürümlerde, DTB görüntüsü kendi bölümünde mevcut olabilir veya çekirdek + DTB görüntüsünü oluşturmak için çekirdek
image.gz
dosyasına eklenebilir (bu daha sonraboot.img
oluşturmak içinmkbootimg
iletilir).
DTB görüntü formatı
Android 10 ve üzeri sürümlerde DTB görüntüsünün aşağıdaki formatlardan birini kullanması gerekir:
DT lekeleri birbiri ardına birleştirildi. Önyükleyici, ilgili blob'u okumak ve ayrıştırmak için her FDT başlığındaki
totalsize
alanını kullanır.DTB/DTBO bölümleri. Önyükleyicinin, giriş için donanım tanımlama bilgilerini tutabilen
dt_table_entry
yapısını (id
,rev
vecustom
alanları içerir) inceleyerek doğru DT blobunu seçmenin etkili bir yolu vardır. Ayrıntılar için bkz. DTB/DTBO Bölümleri .
DTB görüntüsünün önyükleme görüntüsüne dahil edilmesi
Android 10 çalıştıran cihazlar, önyükleme görüntüsüne DTB görüntüsünü ekleyebilir. Bu, Android'in çekirdekteki DTB görüntüsünü image.gz
dosyasına ekleyen komut dosyalarını destekleme ihtiyacını ortadan kaldırır ve DTB yerleşimini doğrulamak (ve standartlaştırmak) için Vendor Test Suite (VTS) testinin kullanılmasına olanak tanır.
Ayrıca, A/B olmayan cihazlar için, kesintiye uğrayan OTA'lardan kaynaklanan sorunları önlemek amacıyla DTB'nin ayrı bir bölüm yerine kurtarma görüntüsünün bir parçası olarak kullanılması daha güvenlidir. OTA sırasında, DTB bölümü güncellendikten sonra (ancak tam güncelleme tamamlanmadan önce) bir sorun meydana gelirse, cihaz OTA'yı tamamlamak için kurtarma moduna önyükleme yapmayı dener; ancak DTB bölümü zaten güncellendiğinden kurtarma görüntüsünde (henüz güncellenmemiş) bir uyumsuzluk meydana gelebilir. Önyükleme görüntüsü formatının bir parçası olarak DTB görüntüsünün olması, kurtarma görüntüsünün kendi kendine yeterli olmasını sağlayarak (yani başka bir bölüme bağlı olmamasını) bu tür sorunları önler.
Önyükleme görüntüsü yapısı
Android 10 çalıştıran cihazlar, aşağıdaki önyükleme görüntüsü yapısını kullanarak bir DTB görüntüsü içerebilir.
Önyükleme görüntüsü bölümü | Sayfa sayısı |
---|---|
Önyükleme başlığı (1 sayfa) | 1 |
Çekirdek (l sayfa) | l = ( kernel_size + page_size - 1) / page_size |
Ramdisk (m sayfa) | m = ( ramdisk_size + page_size - 1) / page_size |
İkinci aşama önyükleyici (n sayfa) | n = ( second_size + page_size - 1) / page_size |
Kurtarma DTBO (o sayfalar) | o = ( recovery_dtbo_size + page_size - 1) / page_size |
DTB (p sayfa) | p = ( dtb_size + page_size - 1) / page_size |
DTB görüntü yolu
Android 10 çalıştıran cihazlarda, DTB görüntüsünün yolunu belirtmek için mkbootimg.py
aracını ve aşağıdaki bağımsız değişkenleri kullanabilirsiniz.
Argüman | Tanım |
---|---|
dtb | Önyükleme/kurtarma görüntülerine eklenecek DTB görüntüsünün yolu. |
dtb_offset | base değişkene eklendiğinde son aygıt ağacı için fiziksel yük adresini sağlar. Örneğin, base değişken 0x10000000 ve dtb_offset bağımsız değişkeni 0x01000000 ise, önyükleme yansıması üstbilgisindeki dtb_addr_field 0x11000000 olarak doldurulur. |
DTB görüntüsünün yolunu belirtmek için BOARD_PREBUILT_DTBIMAGE_DIR
kart yapılandırma değişkeni kullanılmalıdır. BOARD_PREBUILT_DTBIMAGE_DIR
dizininde *.dtb
uzantılı birden fazla dosya mevcutsa, Android derleme sistemi, önyükleme görüntüsü oluşturmada kullanılan son DTB görüntüsünü oluşturmak için dosyaları birleştirir.
BOARD_PREBUILT_DTBIMAGE_DIR
tarafından belirtilen dizindeki DTB görüntüsüyle dtb
argümanını mkbootimg.py
iletmek için, kart yapılandırma değişkeni BOARD_INCLUDE_DTB_IN_BOOTIMG
true
olarak ayarlanmalıdır. Örneğin:
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
Diğer ofsetler ve başlık sürümüyle birlikte dtb_offset
bağımsız değişkenini BOARD_MKBOOTIMG_ARGS
kart yapılandırma değişkenine ekleyebilirsiniz. Örneğin:
BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --dtb_offset $(BOARD_DTB_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Önyükleyici desteği
VTS'nin Android 10 çalıştıran cihazlarda başarılı bir şekilde çalışması için, önyükleyicinin güncellenmiş önyükleme görüntüsünü desteklemesi ve seçilen cihaz ağacının (DT) dizinini belirtmek için androidboot.dtb_idx
çekirdek komut satırı parametresini eklemesi gerekir. Yalnızca bir (1) dizin belirtebilirsiniz. Örneğin, androidboot.dtb_idx=N
parametresi, N
önyükleme görüntüsünde mevcut DTB'ler kümesinden önyükleyici tarafından seçilen aygıt ağacının sıfır tabanlı dizini olarak bildirir.