DTB Görüntüleri

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 sonra boot.img oluşturmak için mkbootimg 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 ve custom 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.