Önyükleyiciye genel bakış

Önyükleyici, çekirdeği bir cihaza getirmekten sorumlu, satıcıya ait bir görüntüdür. Önyükleyici, cihazın durumunu korur ve Güvenilir Yürütme Ortamını (TEE) başlatmaktan ve güven kökünü bağlamaktan sorumludur. Önyükleyici ayrıca yürütmeyi çekirdeğe taşımadan önce boot ve recovery bölümlerinin bütünlüğünü doğrular.

Örnek önyükleyici akışı

Örnek bir önyükleyici akışı aşağıda verilmiştir:

  1. Belleği yükleyin ve başlatın.

  2. Cihazı Doğrulanmış Önyükleme akışına göre doğrulayın.

  3. Doğrulanmış Önyükleme akışına göre boot , dtbo , init_boot ve recovery dahil önyükleme bölümlerini doğrulayın. Bu adımın bir parçası olarak, önyükleme görüntüsü başlık sürümünü kontrol edin ve başlığı uygun şekilde ayrıştırın.

  4. A/B güncellemeleri kullanılıyorsa önyükleme yapılacak geçerli yuvayı belirleyin.

  5. Kurtarma modunun başlatılması gerekip gerekmediğini belirleyin. Daha fazla bilgi için bkz. OTA Güncellemelerini Destekleme .

  6. boot.img , vendor_boot.img , init_boot.img gibi önyükleme görüntülerini ve diğer özel satıcı önyükleme görüntülerini yükleyin. Bu önyükleme görüntüleri çekirdek ve ramdisk görüntülerini içerir.

    1. Çekirdeği, kendi kendine çalıştırılabilen sıkıştırılmış bir ikili dosya olarak belleğe yükleyin. Çekirdek kendi sıkıştırmasını açar ve bellekte çalışmaya başlar.

    2. initramfs oluşturmak için ramdiskleri 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 bir listesi bulunmaktadır:

  • Cihaz ağacı katmanı (DTO). Cihaz ağacı katmanı, önyükleyicinin farklı donanım yapılandırmalarını desteklemesine olanak tanır. Bir DTO, önyükleyici tarafından kullanılan bir aygıt ağacı bloğunda (DTB) derlenir.

  • Çekirdek görüntüsü sanal adres rastgeleleştirmesi. Önyükleyici, çekirdek görüntüsünün yüklendiği sanal adresin rastgele seçilmesini destekler. Adresi rastgele hale getirmek için çekirdek yapılandırmasında RANDOMIZE_BASE değerini true olarak ayarlayın. Önyükleyici /chosen/kaslr-seed aygıt ağacı düğümünde rastgele bir u64 değeri ileterek entropi sağlamalıdır.

  • Doğrulanmış Önyükleme. Doğrulanmış Önyükleme, önyükleyicinin yürütülen tüm kodun güvenilir bir kaynaktan geldiğinden emin olmasını sağlar.

  • Önyükleme yapılandırması Önyükleme yapılandırması Android 12 ve sonraki sürümlerde mevcuttur ve yapılandırma ayrıntılarını yapıdan ve önyükleyiciden işletim sistemine aktarmaya yönelik bir mekanizmadır. Android 12'den önce, androidboot ön ekine sahip çekirdek komut satırı parametreleri kullanılıyordu.

  • Kablosuz (OTA) güncellemeler. Sahadaki Android cihazlar sisteme, uygulama yazılımına ve saat dilimi kurallarına ilişkin 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 bkz. OTA güncellemeleri . Önyükleyiciye özel OTA uygulama ayrıntıları için bkz. OTA güncellemelerini destekleme .

  • 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 eski bir sürümünde veya TEE yazılımında bir zayıflık keşfeden bir saldırganın, cihazı güvenlik açığı bulunan sürüme geri döndürememesini ve yeni sürümle oluşturulan anahtarları kullanamamasını sağlar. Önyükleyicinin sürüm bağlamayı desteklemek için belirli bilgileri sağlaması gerekir. Daha fazla bilgi için AVB özelliklerindeki Sürüm bilgilerine bakın.

Çekirdek komut satırı

Çekirdek komut satırını aşağıdaki konumlardan birleştirin:

  • Bootloader komut satırı: Bootloader tarafından belirlenen statik ve dinamik parametreler kümesi

  • 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 adresine bakın)

Android 12'den itibaren Android kullanıcı alanına aktarmamız gereken androidboot.* parametreleri için çekirdek komut satırı yerine bootconfig'i kullanabiliriz.