Ikhtisar bootloader

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

Contoh aliran bootloader

Berikut ini contoh alur bootloader:

  1. Memuat dan menginisialisasi memori.

  2. Verifikasi perangkat sesuai dengan alur Boot Terverifikasi .

  3. Verifikasi partisi boot, termasuk boot , dtbo , init_boot , dan recovery , sesuai dengan alur Boot Terverifikasi. Sebagai bagian dari langkah ini, periksa versi header gambar boot dan parsing header yang sesuai.

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

  5. Tentukan apakah mode pemulihan harus di-boot. Untuk informasi lebih lanjut, lihat Mendukung Pembaruan OTA .

  6. Muat gambar boot, seperti boot.img , vendor_boot.img , init_boot.img , dan gambar boot vendor milik lainnya. Gambar boot ini berisi gambar kernel dan ramdisk.

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

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

Fitur tambahan terkait bootloader

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

  • Hamparan pohon perangkat (DTO). Hamparan pohon perangkat memungkinkan bootloader mendukung konfigurasi perangkat keras yang berbeda. DTO dikompilasi menjadi gumpalan pohon perangkat (DTB) yang digunakan oleh bootloader.

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

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

  • Konfigurasi boot. Konfigurasi boot tersedia di Android 12 dan lebih tinggi dan merupakan mekanisme untuk meneruskan detail konfigurasi dari build dan bootloader ke sistem operasi. Sebelum Android 12, parameter baris perintah kernel dengan awalan androidboot digunakan.

  • Pembaruan melalui udara (OTA). Perangkat Android di lapangan dapat menerima dan menginstal pembaruan OTA pada sistem, perangkat lunak aplikasi, dan aturan zona waktu. Fitur ini mempunyai implikasi pada implementasi bootloader Anda. Untuk informasi umum tentang OTA, lihat Pembaruan OTA . Untuk detail implementasi OTA khusus bootloader, lihat Mendukung pembaruan OTA .

  • Pengikatan versi . Pengikatan versi mengikat kunci keamanan ke sistem operasi dan versi tingkat patch. Pengikatan versi memastikan bahwa penyerang yang menemukan kelemahan pada sistem versi lama atau perangkat lunak 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 pengikatan versi. Untuk informasi lebih lanjut, lihat Informasi versi di properti AVB .

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 node chosen/bootargs

  • defconfig : dari CONFIG_CMDLINE

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

Pada Android 12, untuk parameter androidboot.* yang perlu kita teruskan ke ruang pengguna Android, kita dapat menggunakan bootconfig alih-alih baris perintah kernel.