DTB görüntüleri

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

  • Android 11'de Genel Kernel Görüntüsü (GKI) kullanan cihazların, başlatma bölümünden yeniden konumlandırılan satıcıya özgü tüm bilgileri içeren tedarikçi firma başlatma bölümünü desteklemesi gerekir. DTB görüntüsü, satıcıya özgü veriler içerdiğinden artık tedarikçi firma başlatma bölümünün bir parçası olmuştur. 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 görüntüsü, kendi bölümünde bulunabilir veya çekirdek ve DTB görüntüsü oluşturmak için image.gz çekirdeğine eklenebilir (daha sonra boot.img oluşturmak için mkbootimg öğesine iletilir).

DTB resim biçimi

Android 10 ve sonraki sürümlerde DTB görüntüsü için aşağıdaki biçimlerden biri kullanılmalıdır:

  • DT blob'ları art arda birleştirildi. Bootloader, ilgili blob'u okumak ve ayrıştırmak için her FDT üst bilgisinde totalsize alanını kullanır.

  • DTB/DTBO bölümleri. Bootloader, giriş için donanım tanımlama bilgilerini tutabilen dt_table_entry struct'ı (id, rev ve custom alanlarını içerir) inceleyerek doğru DT blobunu seçmenin etkili bir yoludur. Ayrıntılar için DTB/DTBO Bölümleri'ne bakın.

DTB görüntüsünü başlatma görüntüsüne ekle

Android 10 çalıştıran cihazların başlatma görüntüsünde DTB görüntüsü bulunabilir. Bu, Android'in çekirdekteki image.gz görüntüsünü DTB görüntüsüne ekleyen komut dosyalarını destekleme ihtiyacını ortadan kaldırır ve DTB yerleşimini doğrulamak (ve standartlaştırmak) için Tedarikçi Test Paketi (VTS) testinin kullanılabilmesini sağlar.

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. Bir 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 moduna girmeye çalışır. Ancak DTB bölümü daha önce güncellendiği için kurtarma görüntüsünde (henüz güncellenmemiş) bir uyumsuzluk oluşabilir. Başlatma görüntüsü biçiminin bir parçası olarak DTB görüntüsüne sahip olmak, kurtarma görüntüsünü kendi kendine yeterli hale getirerek (yani başka bir bölüme bağlı olmayıp) bu tür sorunları önler.

Başlatma görüntüsü 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.

Başlatma 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) i = (recovery_dtbo_size + page_size - 1) / page_size
DTB (p sayfaları) k = (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 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, son cihaz ağacı için fiziksel yük 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 görüntüsünün yolunu belirtmek için kart yapılandırma değişkeni BOARD_PREBUILT_DTBIMAGE_DIR kullanılmalıdır. BOARD_PREBUILT_DTBIMAGE_DIR dizininde *.dtb uzantısına sahip birden fazla dosya varsa Android derleme sistemi dosyaları birleştirerek başlatma görüntüsü oluşturma işleminde kullanılan son DTB görüntüsünü oluşturur.

dtb bağımsız değişkenini BOARD_PREBUILT_DTBIMAGE_DIR tarafından belirtilen dizinden DTB görüntüsüyle mkbootimg.py hedefine iletmek için pano yapılandırması değişkeni BOARD_INCLUDE_DTB_IN_BOOTIMG 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, başlatma görüntüsünde bulunan DTB grubundan bootloader tarafından seçilen cihaz ağacının sıfır tabanlı dizini olarak bildirir.