Bootloader'a genel bakış

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:

  1. Belleği yükle ve başlat.

  2. Cihazı Doğrulanmış Başlatma akışına göre doğrulayın.

  3. Doğrulanmış Başlatma akışına göre boot, dtbo, init_boot ve recovery 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.

  4. A/B güncellemeleri kullanılıyorsa önyükleme için geçerli yuvanın ne olduğunu belirleyin.

  5. 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.

  6. 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.

    1. Ç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.

    2. 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ğerini true 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ünden

  • defconfig: CONFIG_CMDLINE

  • boot.img: Komut satırından (ofsetler ve boyutlar için system/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.