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 sonraboot.img
oluşturmak içinmkbootimg
'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
vecustom
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.