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