27 Mart 2025'ten itibaren AOSP'yi derlemek ve AOSP'ye katkıda bulunmak için aosp-main
yerine android-latest-release
kullanmanızı öneririz. Daha fazla bilgi için AOSP'de yapılan değişiklikler başlıklı makaleyi inceleyin.
Bootloader'a genel bakış
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Bootloader, bir cihazda çekirdeği başlatmaktan sorumlu olan, tedarikçiye özel bir resimdir. Ö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. Ö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ükleyici akışı
Aşağıda bir önyükleme akışı örneği verilmiştir:
Belleği yükleyip başlatın.
Cihazı Doğrulanmış Başlatma akışına göre doğrulayın.
boot
, dtbo
, init_boot
ve recovery
dahil olmak üzere önyükleme bölümlerinin Doğrulanmış Başlatma akışına göre doğrulanmasını sağlayı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ükleyici ö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, önyükleyici tarafından kullanılan bir cihaz ağacı blob'u (DTB) olarak derlenir.
Çekirdek resmi sanal adresinin rastgele atanması. Önyükleyici, çekirdek resminin yüklendiği sanal adresin rastgele olması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ükleyicinin yürütülen tüm kodların güvenilir bir kaynaktan geldiğinden emin olmasını sağlar.
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üncellemeleri başlıklı makaleyi inceleyin. Önyükleyiciye özel OTA uygulama 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, 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 yeni sürümle oluşturulan anahtarları kullanamamasını sağlar. Bootloader, sürüm bağlamayı desteklemek için belirli bilgileri sağlamalıdır. Daha fazla bilgi için AVB mülklerindeki 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ü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.
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-07-27 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-07-27 UTC."],[],[],null,["# Bootloader overview\n\nA *bootloader* is a vendor-proprietary image responsible for bringing up the\nkernel on a device. The bootloader guards the device state and is responsible\nfor initializing the [Trusted Execution Environment (TEE)](/docs/security/features/trusty)\nand binding its root of trust. The bootloader also verifies the integrity of the\n`boot` and `recovery` partitions before moving execution to the kernel.\n\nExample bootloader flow\n-----------------------\n\nHere's an example bootloader flow:\n\n1. Load and initialize memory.\n\n2. Verify the device according to [Verified Boot flow](/docs/security/features/verifiedboot).\n\n3. Verify the boot partitions, including `boot`, `dtbo`, `init_boot`, and\n `recovery`, according to the Verified Boot flow. As part of this step, check the\n [boot image header](/docs/core/architecture/bootloader/boot-image-header)\n version and parse the header accordingly.\n\n4. If [A/B updates](/docs/core/ota/ab) are used, determine the current slot to\n boot.\n\n5. Determine if recovery mode should be booted. For more\n information, see\n [Supporting OTA Updates](/docs/core/architecture/bootloader/updating).\n\n6. Load the boot images, such as `boot.img`, `vendor_boot.img`,\n `init_boot.img`, and other proprietary vendor boot images. These boot images\n contain the kernel and ramdisk images.\n\n 1. Load the kernel into memory as a self-executable compressed\n binary. The kernel decompresses itself and starts executing into memory.\n\n 2. Load ramdisks and the bootconfig section into memory\n to create `initramfs`.\n\nAdditional bootloader-related features\n--------------------------------------\n\nFollowing is a list of additional bootloader-related features that you can\nimplement:\n\n- *Device tree overlay (DTO).*\n A [device tree overlay](/docs/core/architecture/dto) lets the bootloader to\n support different hardware configurations. A DTO is compiled into a *device\n tree blob (DTB)* which is used by the bootloader.\n\n- *Kernel image virtual address randomization.* The bootloader supports\n randomizing the virtual address at which the kernel image is loaded. To\n randomize the address, set `RANDOMIZE_BASE` to `true` in the kernel config.\n The bootloader must provide entropy by passing a random u64 value in the\n `/chosen/kaslr-seed` device tree node.\n\n- *Verified Boot.* [Verified Boot](/docs/security/features/verifiedboot) lets\n the bootloader to ensure all executed code comes from a trusted source.\n\n- *Boot config.*\n [Boot config](/docs/core/architecture/bootloader/implementing-bootconfig)\n is available in Android 12 and higher and is a mechanism for passing\n configuration details from the build and bootloader to the operating system.\n Prior to Android 12, kernel command-line parameters with the prefix of\n `androidboot` are used.\n\n- *Over-the-air (OTA) updates.* Android devices in the field can receive and\n install OTA updates to the system, app software, and\n time zone rules. This feature has implications on your bootloader\n implementation. For general information on OTA, see\n [OTA updates](/docs/core/ota). For bootloader-specific OTA implementation\n details, see\n [Supporting OTA updates](/docs/core/architecture/bootloader/updating).\n\n- *Version binding* .\n [Version binding](/docs/security/features/keystore/version-binding) binds\n security keys to the operating system and patch level version. Version binding\n ensures that an attacker who discovers a weakness in an old version of the\n system or the TEE software can't roll a device back to the vulnerable version\n and use keys created with the newer version. The bootloader must provide certain\n information to support version binding. For further information, see\n [Version information in AVB properties](/docs/core/architecture/bootloader/version-info-avb).\n\nKernel command line\n-------------------\n\nConcatenate the kernel command line from the following locations:\n\n- Bootloader command line: set of static and dynamic parameters determined by\n the bootloader\n\n- Device tree: from the `chosen/bootargs` node\n\n- `defconfig`: from `CONFIG_CMDLINE`\n\n- `boot.img`: from the command line (for offsets and sized, refer to\n [`system/core/mkbootimg/bootimg.h`](https://android.googlesource.com/platform/system/tools/mkbootimg/+/refs/heads/android16-release/include/bootimg/bootimg.h)\n\nAs of Android 12, for `androidboot.*` parameters that\nwe need to pass to Android userspace, we can use\n[bootconfig](/docs/core/architecture/bootloader/implementing-bootconfig) instead\nof the kernel command line."]]