Ringkasan

Bootloader adalah image milik vendor yang bertanggung jawab untuk menampilkan kernel pada perangkat. Ini menjaga status perangkat dan bertanggung jawab untuk menginisialisasi Lingkungan Eksekusi Tepercaya dan mengikat akar kepercayaannya. Bootloader juga memverifikasi integritas partisi boot dan recovery sebelum memindahkan eksekusi ke kernel, dan menampilkan peringatan status boot .

Operasi boot

Untuk memulai boot, bootloader dapat langsung mem-flash image baru ke partisi yang sesuai atau menggunakan recovery untuk memulai proses reflashing yang digunakan untuk pembaruan over-the-air (OTA). Beberapa produsen perangkat membuat bootloader multi-bagian dan kemudian menggabungkannya menjadi satu file bootloader.img ; pada waktu flash, bootloader mengekstrak dan mem-flash semua bootloader individual.

Contoh aliran bootloader:

  1. Bootloader memuat terlebih dahulu dan menginisialisasi memori.

  2. Jika pembaruan A/B digunakan, bootloader menentukan slot saat ini untuk boot.

  3. Bootloader menentukan apakah mode pemulihan harus di-boot (lihat Mendukung pembaruan ).

  4. Bootloader memuat image boot, yang berisi image kernel dan ramdisk.

  5. Bootloader memuat kernel ke dalam memori sebagai biner terkompresi yang dapat dieksekusi sendiri. Kernel kemudian mendekompresi dirinya sendiri dan mulai mengeksekusi ke dalam memori.

  6. Bootloader memuat init , baik dari partisi ramdisk (pada perangkat yang lebih lama) atau dari partisi sistem (pada perangkat yang lebih baru).

  7. Dari partisi sistem, init meluncurkan dan memasang semua partisi lain (seperti vendor , oem , dan odm ), dan kemudian mulai mengeksekusi kode untuk memulai perangkat.

Baris perintah kernel

Gabungkan baris perintah kernel dari lokasi berikut:

  • Baris perintah bootloader: kumpulan parameter statis dan dinamis yang ditentukan oleh bootloader

  • Pohon Perangkat: dari simpul yang dipilih/bootargs

  • defconfig : dari CONFIG_CMDLINE

  • boot.img : dari cmdline (untuk offset dan ukuran, lihat system/core/mkbootimg/bootimg.h

  • Alasan reboot atau shutdown kanonik yang sesuai dengan Dokumen Definisi Kompatibilitas Android sebagaimana ditentukan dari sirkuit terpadu manajemen daya (PMIC), sumber daya perangkat keras lainnya, dan pesan argumen ajaib reboot ( LINUX_REBOOT_CMD_RESTART2 ). Sintaksnya adalah:

    androidboot.bootreason=reason
    

Dukungan untuk pohon perangkat dan hamparan pohon perangkat

Bootloader dapat mendukung konfigurasi yang berbeda dengan mengidentifikasi perangkat keras/revisi produk perangkat kemudian memuat set overlay pohon perangkat yang benar.

Dukungan untuk pengacakan tata letak ruang alamat kernel

Untuk mendukung pengacakan alamat virtual tempat imej kernel dimuat (diaktifkan oleh konfigurasi kernel RANDOMIZE_BASE ), bootloader harus menyediakan entropi dengan meneruskan nilai u64 acak di simpul pohon perangkat /chosen/kaslr-seed .

Dukungan untuk boot terverifikasi

Untuk detail tentang menggunakan bootloader untuk menerapkan boot terverifikasi, lihat Memverifikasi Boot .