Bootloader, bir cihazda çekirdeği başlatmaktan sorumlu olan tedarikçiye özel bir resimdir. Önyükleme yükleyici, cihaz durumunu korur ve Güvenilir Yürütme Ortamı'nı (TEE) başlatmaktan ve güven kökünü bağlamaktan sorumludur. Önyükleme programı, yürütmeyi çekirdeğe taşımadan önce boot
ve recovery
bölümlerinin bütünlüğünü de doğrular.
Örnek önyükleme akışı
Aşağıda bir önyükleyici akışı örneği verilmiştir:
Belleği yükle ve başlat.
Cihazı Doğrulanmış Başlatma akışına göre doğrulayın.
Doğrulanmış Başlatma akışına göre
boot
,dtbo
,init_boot
verecovery
dahil olmak üzere başlatma bölümlerini doğrulayın. Bu adım kapsamında, önyükleme resmi üstbilgisinin sürümünü kontrol edin ve üstbilgiyi buna göre ayrıştırın.A/B güncellemeleri kullanılıyorsa önyükleme için geçerli yuvanın ne olduğunu belirleyin.
Kurtarma modunun başlatılıp başlatılmayacağını belirleyin. Daha fazla bilgi için OTA güncellemelerini destekleme başlıklı makaleyi inceleyin.
boot.img
,vendor_boot.img
,init_boot.img
gibi önyükleme resimlerini ve diğer özel tedarikçi önyükleme resimlerini yükleyin. Bu önyükleme resimleri, çekirdek ve ramdisk resimlerini içerir.Çekirdeği, kendi kendine yürütülebilir sıkıştırılmış ikili kod olarak belleğe yükleyin. Çekirdek kendi sıkıştırmasını kaldırır ve bellekte çalışmaya başlar.
initramfs
oluşturmak için ramdisk'leri ve bootconfig bölümünü belleğe yükleyin.
Önyükleme yükleyiciyle ilgili ek özellikler
Aşağıda, uygulayabileceğiniz ek önyükleme yöneticisi özelliklerinin listesi verilmiştir:
Cihaz ağacı yer paylaşımı (DTO). Cihaz ağacı yer paylaşımı, önyükleyicinin farklı donanım yapılandırmalarını desteklemesine olanak tanır. DTO, bootloader tarafından kullanılan bir cihaz ağaç blob'u (DTB) olarak derlenir.
Çekirdek görüntüleri sanal adres rastgele hale getirme. Bootloader, çekirdek görüntüsünün yüklendiği sanal adresin rastgele kullanılmasını destekler. Adresi rastgele hale getirmek için çekirdek yapılandırmasında
RANDOMIZE_BASE
değerinitrue
olarak ayarlayın. Bootloader,/chosen/kaslr-seed
cihaz ağacı düğümüne rastgele bir u64 değeri ileterek entropi sağlamalıdır.Doğrulanmış Başlatma. Doğrulanmış Başlatma, yürütülen tüm kodların güvenilir bir kaynaktan geldiğinden emin olmak için önyükleyiciye olanak tanır.
Açılış yapılandırması Android 12 ve sonraki sürümlerde kullanılabilen boot config, yapılandırma ayrıntılarını derleme ve önyükleme yükleyiciden işletim sistemine aktaran bir mekanizmadır. Android 12'den önce
androidboot
ön ekiyle çekirdek komut satırı parametreleri kullanılır.Kablosuz (OTA) güncellemeler. Sahadaki Android cihazlar sistem, uygulama yazılımı ve saat dilimi kurallarına yönelik OTA güncellemelerini alıp yükleyebilir. Bu özelliğin, önyükleyici uygulamanız üzerinde etkileri vardır. OTA hakkında genel bilgi için OTA güncellemelerine bakın. Bootloader'a özel OTA uygulama ayrıntıları için OTA güncellemelerini destekleme bölümüne bakın.
Sürüm bağlama. Sürüm bağlama, güvenlik anahtarlarını işletim sistemine ve yama düzeyi sürümüne bağlar. Sürüm bağlama, sistemin veya TEE yazılımının eski bir sürümünde zayıflık keşfeden bir saldırganın cihazı zayıf sürüme geri döndürememesini ve daha yeni sürümle oluşturulan anahtarları kullanamamasını sağlar. Bootloader, sürüm bağlamayı desteklemek için belirli bilgiler sağlamalıdır. Daha fazla bilgi için AVB özelliklerindeki sürüm bilgileri bölümüne bakın.
Çekirdek komut satırı
Aşağıdaki konumlardan çekirdek komut satırını birleştirin:
Önyükleme programı komut satırı: Önyükleme programı tarafından belirlenen statik ve dinamik parametre grubu
Cihaz ağacı:
chosen/bootargs
düğümündendefconfig
:CONFIG_CMDLINE
boot.img
: Komut satırından (ofsetler ve boyutlar içinsystem/core/mkbootimg/bootimg.h
bölümüne bakın.
Android 12'den itibaren, Android kullanıcı alanına iletmemiz gereken androidboot.*
parametreleri için çekirdek komut satırı yerine bootconfig kullanabiliriz.