Bootloader adalah image eksklusif 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 of trust-nya. Bootloader juga memverifikasi integritas partisi boot dan recovery sebelum memindahkan eksekusi ke kernel.
Contoh alur bootloader
Berikut adalah contoh alur bootloader:
Memuat dan melakukan inisialisasi memori.
Memverifikasi perangkat sesuai dengan alur Booting Terverifikasi.
Memverifikasi partisi booting, termasuk
boot,dtbo,init_boot, danrecovery, sesuai dengan alur Booting Terverifikasi. Sebagai bagian dari langkah ini, periksa the boot image header versi dan uraikan header yang sesuai.Jika update A/B digunakan, tentukan slot saat ini untuk booting.
Tentukan apakah mode pemulihan harus di-booting. Untuk mengetahui informasi selengkapnya, lihat Mendukung Update OTA.
Memuat image booting, seperti
boot.img,vendor_boot.img,init_boot.img, dan image booting vendor eksklusif lainnya. Image booting ini berisi image kernel dan ramdisk.Memuat kernel ke dalam memori sebagai biner terkompresi yang dapat dieksekusi sendiri. Kernel melakukan dekompresi sendiri dan mulai dieksekusi ke dalam memori.
Memuat 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 device tree memungkinkan bootloader untuk mendukung konfigurasi hardware yang berbeda. DTO dikompilasi ke dalam device tree blob (DTB) yang digunakan oleh bootloader.
Pengacakan alamat virtual image kernel. Bootloader mendukung pengacakan alamat virtual tempat image kernel dimuat. Untuk mengacak alamat, tetapkan
RANDOMIZE_BASEketruedalam konfigurasi kernel. Bootloader harus memberikan entropi dengan meneruskan nilai u64 acak di node device tree/chosen/kaslr-seed.Booting Terverifikasi. Booting Terverifikasi memungkinkan bootloader 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
androidbootdigunakan.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 penerapan 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 sistem operasi dan versi 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/bootargsdefconfig: dariCONFIG_CMDLINEboot.img: dari command line (untuk offset dan ukuran, lihatsystem/core/mkbootimg/bootimg.h
Mulai Android 12, untuk parameter androidboot.* yang
perlu kita teruskan ke ruang pengguna Android, kita dapat menggunakan
bootconfig bukan
command line kernel.