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 görüntü parametrelerini belirtmek için Tedarikçi firma başlatma başlığı bölümüne bakın.

  • Android 10'daki cihazların başlatma bölümünde DTB görüntüsü bulunabilir. DTB görüntü parametrelerini belirtmek için DTB görüntüsünü başlatma görüntüsüne ekleme bölümüne bakın.

  • 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ı art arda 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ü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 çalıştıran 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ı sağlanır.

Ayrıca, A/B olmayan cihazlarda, kesintiye uğrayan OTA'ların neden olduğu sorunları önlemek için 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 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 resminin önyükleme resmi biçiminin bir parçası olması, kurtarma resmini 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 başlatma görüntüsü yapısını kullanan bir DTB görüntüsü 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) e = (ramdisk_size + page_size - 1) / page_size
İkinci aşama bootloader (n sayfa) n = (second_size + page_size - 1) / page_size
Kurtarma DTBO'su (o sayfa) o = (recovery_dtbo_size + page_size - 1) / page_size
DTB (p sayfaları) k = (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 Başlatma/kurtarma görüntülerine dahil edilecek 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 başlatma görüntüsü başlığındaki dtb_addr_field 0x11000000 olarak doldurulur.

DTB resminin 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 BOARD_MKBOOTIMG_ARGS pano yapılandırması değişkenine diğer ofsetler ve başlık sürümüyle birlikte 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ışması için bootloader'ın güncellenmiş başlatma 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 değerini önyükleme resminde bulunan DTB grubundan önyükleme yükleyici tarafından seçilen cihaz ağacının sıfır tabanlı dizini olarak bildirir.