Ringkasan bootloader

Bootloader adalah image milik vendor yang bertanggung jawab untuk memunculkan kernel di perangkat. Bootloader menjaga status perangkat dan bertanggung jawab untuk melakukan inisialisasi 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. Muat dan lakukan inisialisasi memori.

  2. Verifikasi perangkat sesuai dengan alur Booting Terverifikasi.

  3. Verifikasi partisi booting, termasuk boot, dtbo, init_boot, dan recovery, sesuai dengan alur Booting Terverifikasi. Sebagai bagian dari langkah ini, periksa versi header image booting dan parsing 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. Boot image ini berisi kernel dan image ramdisk.

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

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

Fitur tambahan terkait bootloader

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

  • Overlay device tree (DTO). Overlay pohon perangkat memungkinkan bootloader mendukung berbagai konfigurasi hardware. DTO dikompilasi menjadi blob pohon 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.

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

  • Konfigurasi booting. Boot config 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 mengetahui detail penerapan OTA khusus bootloader, lihat Mendukung update OTA.

  • Pengikatan versi. Pengikatan versi mengikat kunci keamanan ke versi sistem operasi dan tingkat patch. Pengikatan 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 pengikatan versi. Untuk mengetahui 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

  • Device tree: dari node chosen/bootargs

  • defconfig: 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.