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 resim parametrelerini belirtmek için Tedarikçi firma önyükleme başlığı başlıklı makaleyi inceleyin.
Android 10'da cihazlar, önyükleme bölümüne DTB resmini dahil edebilir. DTB resim parametrelerini belirtmek için DTB resmini önyükleme resmine dahil etme başlıklı makaleyi inceleyin.
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 sonraboot.img
oluşturmak içinmkbootimg
'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ı birbirine bağlanır. Ö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
vecustom
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 yüklü 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ına olanak tanır.
Ayrıca, A/B olmayan cihazlarda, kesintiye uğrayan OTA'lardan kaynaklanan sorunları önlemek için DTB'nin ayrı bir bölümde değil, kurtarma görüntüsünün bir parçası olarak bulunması 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 görüntüsünün önyükleme görüntüsünün bir parçası olması, kurtarma görüntüsünü 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 önyükleme resmi yapısını kullanarak bir DTB resmi 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 |
DTBO'yu kurtarma (sayfa sayısı) | o = (recovery_dtbo_size + page_size -
1) / page_size |
DTB (p sayfa) | p = (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 |
Önyükleme/kurtarma görüntülerine eklenecek 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 resmi 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, ö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, diğer ofsetler ve başlık sürümüyle birlikte BOARD_MKBOOTIMG_ARGS
boardconfig değişkenine 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ışabilmesi için önyükleme yükleyicinin güncellenmiş önyükleme görüntüsünü desteklemesi ve seçili cihaz ağacının (DT) dizesini 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ükleyicisi tarafından seçilen cihaz ağacının sıfır tabanlı dizini olarak bildirir.