DTB Görüntüleri

Android uygulamaları, önyükleyici tarafından kullanılmak üzere bir cihaz ağacı blobu (DTB) görüntüsü içerebilir. DTB görüntüsünün konumu (ve DTB görüntü parametrelerini belirleme 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 tüm satıcıya özel 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üsü parametrelerini belirlemek için, bkz . DTB görüntüsünün önyükleme görüntüsüne dahil edilmesi .

  • 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 çekirdek image.gz eklenebilir (daha sonra boot.img oluşturmak için mkbootimg iletilir).

DTB görüntü formatı

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

  • DT blobları birbiri ardına birleştirildi. Önyükleyici, karşılık gelen totalsize okumak ve ayrıştırmak için her FDT başlığındaki toplam boyut 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 bloğunu seçmenin etkili bir yolu vardır. Ayrıntılar için bkz. DTB/DTBO Bölümleri .

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

Android 10 çalıştıran cihazlar, önyükleme görüntüsüne DTB görüntüsünü içerebilir. Bu, Android'in çekirdekteki image.gz DTB görüntüsünü 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ını sağlar.

Ayrıca, A/B olmayan cihazlarda, kesintiye uğramış OTA'ların neden olduğu sorunları önlemek için DTB'yi ayrı bir bölüm yerine kurtarma görüntüsünün bir parçası olarak kullanmak 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 moduna geçmeye çalışır; ancak, DTB bölümü zaten güncellenmiş olduğundan, kurtarma görüntüsüyle (henüz güncellenmemiş) bir uyumsuzluk meydana gelebilir. 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 bu tür sorunları önler (başka bir deyişle, başka bir bölüme bağlı değildir).

Ö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 sayfaları) 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 (s 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 Açıklama
dtb Önyükleme/kurtarma görüntülerine dahil edilecek DTB görüntüsünün yolu.
dtb_offset base argümana eklendiğinde, son cihaz ağacı için fiziksel yük adresini sağlar. Örneğin, base bağımsız değişken 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 pano yapılandırma değişkeni kullanılmalıdır. BOARD_PREBUILT_DTBIMAGE_DIR dizininde *.dtb BOARD_PREBUILT_DTBIMAGE_DIR birden fazla dosya varsa, 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.

true tarafından belirtilen dizinden DTB görüntüsü ile dtb bağımsız değişkenini mkbootimg.py iletmek için, BOARD_PREBUILT_DTBIMAGE_DIR pano yapılandırma değişkeni BOARD_INCLUDE_DTB_IN_BOOTIMG 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 pano 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 N , N'yi, önyükleme görüntüsünde bulunan DTB kümesinden önyükleyici tarafından seçilen aygıt ağacının sıfır tabanlı dizini olarak bildirir.