DTB görüntüleri

Android uygulamaları, önyükleyici tarafından kullanılmak üzere bir cihaz ağacı blob'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, Generic Kernel Image (GKI) kullanan cihazlar, önyükleme bölümünden taşınan tüm satıcıya özel bilgileri içeren satıcı önyükleme bölümünü desteklemelidir. DTB görüntüsü tedarikçiye özel 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 önyükleme başlığı bölümüne bakın.

  • Android 10'da cihazlar, DTB görüntüsünü önyükleme bölümüne ekleyebilir. DTB görüntü parametrelerini belirtmek için Önyükleme görüntüsüne DTB görüntüsünü dahil etme başlıklı makaleyi inceleyin.

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

DTB resim biçimi

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

  • DT blob'ları art arda birleştirilir. Önyükleyici, ilgili blobu 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şe ait donanımı tanımlayan bilgileri tutabilen dt_table_entry yapısını (id, rev ve custom alanlarını içerir) inceleyerek doğru DT blob'unu seçmek için etkili bir yönteme sahiptir. Ayrıntılar için DTB/DTBO Bölümleri başlıklı makaleyi inceleyin.

DTB görüntüsünü önyükleme görüntüsüne ekleyin

Android 10 çalıştıran cihazlar, DTB görüntüsünü başlatma görüntüsüne ekleyebilir. Bu sayede Android'in, çekirdekte image.gz konumuna DTB görüntüsü ekleyen komut dosyalarını desteklemesi gerekmez ve DTB yerleşimini doğrulamak (ve standartlaştırmak) için Tedarikçi Test 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ı olması 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 başlatılmaya çalışır. Ancak DTB bölümü zaten güncellendiğinden, henüz güncellenmemiş olan kurtarma görüntüsüyle bir uyuşmazlık oluşabilir. DTB görüntüsünün önyükleme görüntüsü biçiminin bir parçası olması, kurtarma görüntüsünü kendi kendine yeterli hale getirerek (yani başka bir bölüme bağlı olmaması) 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ı
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
Recovery DTBO (o pages) o = (recovery_dtbo_size + page_size - 1) / page_size
DTB (p sayfaları) 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.

Bağımsız değişken Açıklama
dtb Önyükleme/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 önyükleme görüntüsü 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, dosyaları birleştirerek önyükleme görüntüsü oluşturmada kullanılan nihai DTB görüntüsünü oluşturur.

dtb bağımsız değişkenini BOARD_PREBUILT_DTBIMAGE_DIR tarafından belirtilen dizindeki DTB görüntüsüyle mkbootimg.py'ye 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

dtb_offset bağımsız değişkenini, diğer ofsetler ve başlık sürümüyle birlikte BOARD_MKBOOTIMG_ARGS board config 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)

Bootloader desteği

VTS'nin Android 10 çalıştıran cihazlarda başarıyla ç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 üzere androidboot.dtb_idx çekirdek komut satırı parametresini eklemesi gerekir. Yalnızca bir (1) dizin belirtebilirsiniz. Örneğin, androidboot.dtb_idx=N parametresi, önyükleyici tarafından önyükleme görüntüsünde bulunan DTB'ler kümesinden seçilen cihaz ağacının sıfır tabanlı dizini olarak N değerini bildirir.