DTB görüntüleri

Android uygulamaları, önyükleyici tarafından kullanılacak bir cihaz ağacı blob'u (DTB) resmi içerebilir. DTB resminin konumu (ve DTB resim parametrelerini belirtme seçenekleri) Android sürümleri arasında farklılık gösterir.

  • Android 11'de Genel Çekirdek Görüntüsü'nü (GKI) kullanan cihazlar, ö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ü desteklemelidir. DTB resmi tedarikçiye özgü veriler içerdiğinden artık tedarikçi önyükleme bölümünün bir parçasıdır. DTB resim parametrelerini belirtmek için Tedarikçi firma önyükleme başlığı başlıklı makaleyi inceleyin.

  • Android 10'da cihazlar, önyükleme bölümüne DTB resmini dahil edebilir. DTB resim parametrelerini belirtmek için DTB resmini önyükleme resmine dahil etme başlıklı makaleyi inceleyin.

  • Android 9 ve önceki sürümlerde DTB resmi kendi bölümünde bulunabilir veya çekirdek + DTB resmi oluşturmak için çekirdek image.gz'e eklenebilir (bu resim daha sonra boot.img oluşturmak için mkbootimg'e iletilir).

DTB resim biçimi

Android 10 ve sonraki sürümlerde DTB resmi aşağıdaki biçimlerden birinde olmalıdır:

  • DT blob'ları birbirine bağlanır. Ö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ükleyici, girişin donanım tanımlama bilgilerini barındırabilen dt_table_entry yapısını (id, rev ve custom alanlarını içerir) inceleyerek doğru DT blob'unu seçmenin etkili bir yoluna sahiptir. Ayrıntılar için DTB/DTBO bölümlendirme bölümüne bakın.

DTB görüntüsünü önyükleme görüntüsüne dahil etme

Android 10 yüklü cihazlar, DTB görüntüsünü önyükleme görüntüsüne dahil edebilir. Bu sayede Android'in, DTB resmini çekirdekteki image.gz dosyasına ekleyen komut dosyalarını desteklemesi gerekmez ve DTB yerleşimini doğrulamak (ve standartlaştırmak) için Tedarikçi Firma Testi Paketi (VTS) testinin kullanılmasına olanak tanır.

Ayrıca, A/B olmayan cihazlarda, kesintiye uğrayan OTA'lardan kaynaklanan sorunları önlemek için DTB'nin ayrı bir bölümde değil, kurtarma görüntüsünün bir parçası olarak bulunması daha güvenlidir. OTA sırasında, DTB bölümü güncellendikten sonra (ancak tam güncelleme tamamlanmadan önce) bir sorun oluşursa cihaz, OTA'yı tamamlamak için kurtarma modunda önyükleme yapmaya çalışır. Ancak DTB bölümü zaten güncellendiği için kurtarma görüntüsünde (henüz güncellenmemiş) uyuşmazlık oluşabilir. DTB görüntüsünün önyükleme görüntüsünün bir parçası olması, kurtarma görüntüsünü kendi kendine yeterli hale getirerek (yani başka bir bölüme bağlı kalmadan) bu tür sorunları önler.

Önyükleme resmi yapısı

Android 10 çalıştıran cihazlar, aşağıdaki önyükleme resmi yapısını kullanarak bir DTB resmi içerebilir.

Önyükleme görüntüsü bölümü Sayfa sayısı
Başlatma üstbilgisi (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 bootloader (n sayfa) n = (second_size + page_size - 1) / page_size
DTBO'yu kurtarma (sayfa sayısı) o = (recovery_dtbo_size + page_size - 1) / page_size
DTB (p sayfa) p = (dtb_size + page_size - 1) / page_size

DTB resim yolu

Android 10 çalıştıran cihazlarda, DTB resminin yolunu belirtmek için mkbootimg.py aracını ve aşağıdaki bağımsız değişkenleri kullanabilirsiniz.

Bağımsız değişken Açıklama
dtb Önyükleme/kurtarma görüntülerine eklenecek DTB görüntüsünün yolu.
dtb_offset base bağımsız değişkenine eklendiğinde, nihai cihaz ağacının fiziksel yükleme adresini sağlar. Örneğin, base bağımsız değişkeni 0x10000000 ve dtb_offset bağımsız değişkeni 0x01000000 ise önyükleme resmi başlığındaki dtb_addr_field 0x11000000 olarak doldurulur.

DTB görüntüsünün yolunu belirtmek için BOARD_PREBUILT_DTBIMAGE_DIR kart yapılandırması değişkeni kullanılmalıdır. BOARD_PREBUILT_DTBIMAGE_DIR dizininde *.dtb uzantılı birden fazla dosya varsa Android derleme sistemi, önyükleme resmi oluşturmada kullanılan nihai DTB resmini oluşturmak için dosyaları birleştirir.

dtb bağımsız değişkenini, BOARD_PREBUILT_DTBIMAGE_DIR tarafından belirtilen dizindeki DTB resmiyle birlikte mkbootimg.py'e iletmek için BOARD_INCLUDE_DTB_IN_BOOTIMG kart yapılandırması değişkeni true olarak ayarlanmalıdır. Örnek:

BOARD_INCLUDE_DTB_IN_BOOTIMG := true

dtb_offset bağımsız değişkenini, diğer ofsetler ve başlık sürümüyle birlikte BOARD_MKBOOTIMG_ARGS boardconfig değişkenine ekleyebilirsiniz. Örnek:

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)

Bootloader desteği

VTS'nin Android 10 çalıştıran cihazlarda başarılı bir şekilde çalışabilmesi için önyükleme yükleyicinin güncellenmiş önyükleme görüntüsünü desteklemesi ve seçili cihaz ağacının (DT) dizesini 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 değerini önyükleme resminde bulunan DTB grubundan önyükleme yükleyicisi tarafından seçilen cihaz ağacının sıfır tabanlı dizini olarak bildirir.