Ringkasan bootloader

Bootloader adalah image eksklusif vendor yang bertanggung jawab untuk memunculkan kernel di perangkat. Bootloader melindungi status perangkat dan bertanggung jawab untuk menginisialisasi Trusted Execution Environment (TEE) dan mengikat root kepercayaannya. Bootloader juga memverifikasi integritas partisi boot dan recovery sebelum memindahkan eksekusi ke kernel.

Contoh alur bootloader

Berikut adalah contoh alur bootloader:

  1. Memuat dan melakukan inisialisasi memori.

  2. Verifikasi perangkat sesuai dengan alur Verified Boot.

  3. Verifikasi partisi booting, termasuk boot, dtbo, init_boot, dan recovery, sesuai dengan alur Booting Terverifikasi. Sebagai bagian dari langkah ini, periksa versi header boot image dan uraikan header yang sesuai.

  4. Jika update A/B digunakan, tentukan slot saat ini untuk booting.

  5. Menentukan apakah mode pemulihan harus di-booting. Untuk mengetahui informasi selengkapnya, lihat Mendukung Update OTA.

  6. Muat image booting, seperti boot.img, vendor_boot.img, init_boot.img, dan image booting vendor eksklusif lainnya. Booting image ini berisi image kernel dan ramdisk.

    1. Muat kernel ke dalam memori sebagai biner terkompresi yang dapat dieksekusi secara mandiri. Kernel mendekompresi dirinya sendiri dan mulai dieksekusi ke dalam memori.

    2. Muat ramdisk dan bagian bootconfig ke dalam memori untuk membuat initramfs.

Fitur terkait bootloader tambahan

Berikut adalah daftar fitur terkait bootloader tambahan yang dapat Anda terapkan:

  • Overlay hierarki perangkat (DTO). Overlay hierarki perangkat memungkinkan bootloader mendukung berbagai konfigurasi hardware. DTO dikompilasi menjadi blob hierarki perangkat (DTB) yang digunakan oleh bootloader.

  • Pengacakan alamat virtual image kernel. Bootloader mendukung pengacakan alamat virtual tempat image kernel dimuat. Untuk mengacak alamat, tetapkan RANDOMIZE_BASE ke true dalam konfigurasi kernel. Bootloader harus menyediakan entropi dengan meneruskan nilai u64 acak di node hierarki perangkat /chosen/kaslr-seed.

  • Boot Terverifikasi. Booting Terverifikasi memungkinkan bootloader untuk memastikan semua kode yang dieksekusi berasal dari sumber tepercaya.

  • Konfigurasi booting. Konfigurasi booting tersedia di Android 12 dan yang lebih tinggi serta merupakan mekanisme untuk meneruskan detail konfigurasi dari build dan bootloader ke sistem operasi. Sebelum Android 12, parameter command line kernel dengan awalan androidboot digunakan.

  • Update over the air (OTA). Perangkat Android di lapangan dapat menerima dan menginstal update OTA ke sistem, software aplikasi, dan aturan zona waktu. Fitur ini memiliki implikasi pada implementasi bootloader Anda. Untuk informasi umum tentang OTA, lihat Update OTA. Untuk detail implementasi OTA khusus bootloader, lihat Mendukung update OTA.

  • Binding versi. Penautan versi mengikat kunci keamanan ke sistem operasi dan versi tingkat patch. Binding versi memastikan bahwa penyerang yang menemukan kelemahan dalam versi lama sistem atau software TEE tidak dapat mengembalikan perangkat ke versi yang rentan dan menggunakan kunci yang dibuat dengan versi yang lebih baru. Bootloader harus memberikan informasi tertentu untuk mendukung binding versi. Untuk informasi selengkapnya, lihat Informasi versi di properti AVB.

Command line kernel

Gabungkan command line kernel dari lokasi berikut:

  • Command line bootloader: kumpulan parameter statis dan dinamis yang ditentukan oleh bootloader

  • Hierarki perangkat: dari node chosen/bootargs

  • defconfig: mulai dari CONFIG_CMDLINE

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

Mulai Android 12, untuk parameter androidboot.* yang perlu diteruskan ke ruang pengguna Android, kita dapat menggunakan bootconfig, bukan command line kernel.