Önyükleyici, bir cihazda çekirdeği başlatmaktan sorumlu, tedarikçiye özel bir görüntüdür. Önyükleyici, cihaz durumunu korur ve güvenilir yürütme ortamını (TEE) başlatmaktan ve güven kökünü bağlamaktan sorumludur. Bootloader, yürütmeyi çekirdeğe taşımadan önce boot
ve recovery
bölümlerinin bütünlüğünü de doğrular.
Örnek önyükleyici akışı
Önyükleyici akışına dair bir örneği aşağıda görebilirsiniz:
Belleği yükleyin ve başlatın.
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 görüntüsü üstbilgisi sürümünü kontrol edin ve üstbilgiyi buna göre ayrıştırın.A/B güncellemeleri kullanılıyorsa başlatılacak mevcut yuva belirlenir.
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 başlatma görüntülerini ve diğer tescilli satıcı başlatma görüntülerini yükleyin. Bu önyükleme görüntüleri, çekirdek ve ramdisk görüntülerini içerir.Çekirdeği, kendi kendine yürütülebilir sıkıştırılmış bir ikili dosya olarak belleğe yükleyin. Çekirdek kendisini açar ve bellekte yürütülmeye başlar.
initramfs
oluşturmak için ramdisk'leri ve bootconfig bölümünü belleğe yükleyin.
Önyükleyiciyle ilgili ek özellikler
Aşağıda, uygulayabileceğiniz önyükleyiciyle ilgili ek özelliklerin listesi verilmiştir:
Cihaz ağacı yerleşimi (DTO). Cihaz ağacı yerleşimi, önyükleyicinin farklı donanım yapılandırmalarını desteklemesini sağlar. Bir DTO, önyükleyici tarafından kullanılan bir device tree blob (DTB) olarak derlenir.
Çekirdek görüntüsü sanal adres rastgeleleştirme. Önyükleyici, çekirdek görüntüsünün yüklendiği sanal adresi rastgele hale getirmeyi 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ünde rastgele bir u64 değeri ileterek entropi sağlamalıdır.Doğrulanmış Başlatma Doğrulanmış Başlatma, başlatıcı yükleyicinin yürütülen tüm kodun güvenilir bir kaynaktan geldiğinden emin olmasını sağlar.
Başlatma yapılandırması Android 12 ve sonraki sürümlerde kullanılabilen önyükleme yapılandırması, yapılandırma ayrıntılarını derleme ve önyükleyiciden işletim sistemine aktarmak için kullanılan bir mekanizmadır. Android 12'den önce,
androidboot
önekine sahip çekirdek komut satırı parametreleri kullanılıyordu.Kablosuz (OTA) güncellemeleri. Sahadaki Android cihazlar, sisteme, uygulama yazılımına ve saat dilimi kurallarına yönelik OTA güncellemelerini alıp yükleyebilir. Bu özellik, önyükleyici uygulamanızı etkiler. OTA hakkında genel bilgi için OTA güncellemeleri başlıklı makaleyi inceleyin. Önyükleyiciye özel OTA uygulamasıyla ilgili ayrıntılar için OTA güncellemelerini destekleme başlıklı makaleyi inceleyin.
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 işlemi, sistemin veya TEE yazılımının eski bir sürümündeki zayıflığı keşfeden bir saldırganın cihazı güvenlik açığı olan sürüme geri döndürmesini ve daha yeni sürümle oluşturulan anahtarları kullanmasını engeller. 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 başlıklı makaleyi inceleyin.
Çekirdek komut satırı
Aşağıdaki konumlardan çekirdek komut satırını birleştirin:
Önyükleyici komut satırı: Önyükleyici tarafından belirlenen statik ve dinamik parametreler kümesi
Cihaz ağacı:
chosen/bootargs
düğümündendefconfig
:CONFIG_CMDLINE
tarihinden itibarenboot.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 kullanılabilir.