Android 9 menyertakan perubahan berikut pada spesifikasi alasan booting bootloader.
Alasan booting
  Bootloader menggunakan hardware dan resource memori yang tersedia secara unik untuk
  menentukan alasan perangkat melakukan reboot, lalu mengomunikasikan penentuan tersebut dengan
  menambahkan androidboot.bootreason=<reason> ke command line kernel Android
  untuk peluncurannya. init kemudian menerjemahkan command line ini untuk disebarkan ke properti Android bootloader_boot_reason_prop (ro.boot.bootreason).
  Untuk perangkat yang diluncurkan dengan Android 12 atau yang lebih tinggi, menggunakan kernel versi 5.10 atau yang lebih baru, androidboot.bootreason=<reason> ditambahkan ke bootconfig, bukan command line kernel.
Spesifikasi alasan booting
  Rilis Android sebelumnya menentukan format alasan booting yang tidak menggunakan
  spasi, semuanya huruf kecil, mencakup beberapa persyaratan (seperti untuk pelaporan
  kernel_panic, watchdog,
  cold/warm/hard), dan yang memberikan
  kelonggaran untuk alasan unik lainnya. Spesifikasi yang tidak ketat ini menyebabkan
  munculnya ratusan string alasan booting kustom (dan terkadang tidak bermakna), yang pada gilirannya menyebabkan situasi yang tidak dapat dikelola. Mulai rilis Android saat ini, momentum besar konten yang hampir tidak dapat diuraikan atau tidak bermakna yang dicatat oleh bootloader telah menimbulkan masalah kepatuhan untuk bootloader_boot_reason_prop.
  Dengan rilis Android 9, tim Android menyadari bahwa bootloader_boot_reason_prop lama memiliki momentum yang besar dan tidak dapat ditulis ulang saat runtime. Oleh karena itu, setiap peningkatan pada spesifikasi alasan booting harus berasal dari interaksi dengan developer bootloader dan penyesuaian pada sistem yang ada. Untuk itu, tim Android:
- Berinteraksi dengan developer bootloader untuk mendorong mereka:
  
- Berikan alasan kanonis, yang dapat diuraikan, dan dapat dikenali untuk
    
bootloader_boot_reason_prop. - Berpartisipasi dalam daftar 
system/core/bootstat/bootstat.cppkBootReasonMap. 
 - Berikan alasan kanonis, yang dapat diuraikan, dan dapat dikenali untuk
    
 - Menambahkan sumber yang dapat ditulis ulang saat runtime dan dikontrol untuk
  
system_boot_reason_prop(sys.boot.reason). Sejumlah aplikasi sistem terbatas (sepertibootstatdaninit) dapat menulis ulang properti ini, tetapi semua aplikasi dapat diberi hak sepolicy untuk membacanya. - Memberi tahu pengguna tentang alasan booting untuk menunggu hingga userdata dipasang
  sebelum memercayai konten dalam properti alasan booting sistem
  
system_boot_reason_prop. 
  Mengapa terlambat? Meskipun bootloader_boot_reason_prop tersedia lebih awal
  saat booting, bootloader_boot_reason_prop diblokir oleh kebijakan keamanan Android sesuai kebutuhan
  karena menampilkan informasi yang tidak akurat, tidak dapat diuraikan, dan non-kanonis.
  Dalam sebagian besar situasi, hanya developer dengan pengetahuan mendalam tentang sistem booting
  yang perlu mengakses informasi ini. API yang disempurnakan, dapat diuraikan, dan kanonis
  untuk alasan booting dengan system_boot_reason_prop dapat diambil secara andal
  dan akurat hanya setelah data pengguna terpasang.
  Khususnya:
- Sebelum data pengguna dimuat,
    
system_boot_reason_propakan berisi nilai daribootloader_boot_reason_prop. - Setelah data pengguna terpasang,
    
system_boot_reason_propdapat diperbarui agar sesuai atau untuk melaporkan informasi yang lebih akurat. 
  Oleh karena itu, Android 9 memperpanjang jangka waktu sebelum alasan booting dapat diperoleh secara resmi, mengubahnya dari yang langsung akurat saat booting (dengan bootloader_boot_reason_prop) menjadi hanya tersedia setelah userdata terpasang (dengan system_boot_reason_prop).
  Logika Bootstat bergantung pada bootloader_boot_reason_prop yang lebih informatif dan sesuai. Jika properti tersebut menggunakan
  format yang dapat diprediksi, akurasi semua skenario reboot dan
  penonaktifan yang dikontrol akan meningkat, yang pada gilirannya akan meningkatkan dan memperluas akurasi serta makna
  system_boot_reason_prop.
Format alasan booting kanonis
  Format alasan booting kanonis untuk bootloader_boot_reason_prop
  di Android 9 menggunakan sintaksis berikut:
<reason>,<subreason>,<detail>…
Aturan pemformatan:
- Huruf kecil
 - Tidak ada spasi (gunakan garis bawah)
 - Semua karakter yang dapat dicetak
 reason,subreason, dan satu atau lebih instancedetailyang dipisahkan koma.reasonyang diperlukan yang menunjukkan prioritas tertinggi alasan perangkat harus di-reboot atau dimatikan.subreasonopsional yang merepresentasikan ringkasan singkat tentang alasan perangkat harus di-reboot atau dimatikan (atau siapa yang me-reboot atau mematikan perangkat).- Satu atau beberapa nilai 
detailopsional.detaildapat mengarah ke subsistem untuk membantu menentukan sistem spesifik mana yang menghasilkansubreason. Anda dapat menentukan beberapa nilaidetail, yang umumnya harus mengikuti hierarki kepentingan. Namun, Anda juga dapat melaporkan beberapa nilaidetailyang sama pentingnya. 
  Nilai kosong untuk bootloader_boot_reason_prop dianggap
  ilegal (karena memungkinkan agen lain menyisipkan alasan booting setelahnya).
Persyaratan alasan
  Nilai yang diberikan untuk reason (rentang pertama, sebelum penghentian atau
  koma) harus berupa set berikut yang dibagi menjadi alasan kernel, kuat, dan tidak jelas:
- kernel set:
  
- "
watchdog" "kernel_panic"
 - "
 - strong set:
  
"recovery""bootloader"
 - kumpulan tumpul:
  
"cold". Umumnya menunjukkan reset penuh semua perangkat, termasuk memori."hard". Umumnya menunjukkan bahwa hardware telah direset statusnya danramoopsharus mempertahankan konten persisten."warm". Umumnya menunjukkan bahwa memori dan perangkat mempertahankan beberapa status, dan penyimpanan pendukungramoops(lihat driverpstoredi kernel) berisi konten persisten."shutdown""reboot". Umumnya berarti statusramoopstidak diketahui dan status hardware tidak diketahui. Nilai ini adalah nilai umum karena nilaicold,hard, danwarmmemberikan petunjuk tentang kedalaman reset untuk perangkat.
 
  Bootloader harus menyediakan set kernel atau set tumpul reason, dan
  sangat disarankan untuk menyediakan subreason jika dapat
  ditentukan. Misalnya, penekanan lama tombol daya yang mungkin atau mungkin tidak memiliki
  cadangan ramoops akan memiliki alasan booting
  "reboot,longkey".
  Tidak ada reason rentang pertama yang dapat menjadi bagian dari subreason atau
  detail. Namun, karena alasan set kernel tidak dapat dihasilkan oleh
  ruang pengguna, "watchdog" dapat digunakan kembali setelah alasan set tumpul,
  bersama dengan detail sumber (misalnya,
  "reboot,watchdog,service_manager_unresponsive", atau
  "reboot,software,watchdog").
  Alasan booting tidak boleh memerlukan pengetahuan internal ahli untuk diuraikan dan/atau
  harus dapat dibaca oleh manusia dengan laporan yang intuitif. Contoh:
  "shutdown,vbxd" (buruk), "shutdown,uv" (lebih baik),
  "shutdown,undervoltage" (lebih disarankan).
Kombinasi alasan-subalasan
  Android mencadangkan serangkaian kombinasi reason-subreason
  yang tidak boleh kelebihan beban dalam penggunaan normal, tetapi dapat digunakan berdasarkan
  kasus per kasus jika kombinasi tersebut secara akurat mencerminkan kondisi
  terkait. Contoh kombinasi yang dicadangkan meliputi:
"reboot,userrequested""shutdown,userrequested""shutdown,thermal"(darithermald)"shutdown,battery""shutdown,battery,thermal"(dariBatteryStatsService)"reboot,adb""reboot,shell""reboot,bootloader""reboot,recovery"
  Untuk mengetahui detail selengkapnya, lihat kBootReasonMap di
  system/core/bootstat/bootstat.cpp dan histori log perubahan git terkait di repositori sumber Android.
Melaporkan alasan booting
  Semua alasan booting, baik dari bootloader atau yang dicatat dalam alasan booting kanonis, harus dicatat di bagian kBootReasonMap dari system/core/bootstat/bootstat.cpp. Daftar
  kBootReasonMap adalah campuran alasan patuh dan tidak patuh
  lama. Developer bootloader hanya boleh mendaftarkan alasan kepatuhan baru di sini (dan tidak boleh mendaftarkan alasan ketidakpatuhan kecuali jika produk telah dikirim dan tidak dapat diubah).
  Sebaiknya gunakan entri yang ada dan sesuai di
  system/core/bootstat/bootstat.cpp dan tunjukkan kehati-hatian sebelum
  menggunakan string yang tidak sesuai. Sebagai panduan, berikut adalah:
- OK untuk melaporkan 
"kernel_panic"dari bootloader, karenabootstatmungkin dapat memeriksaramoopsuntukkernel_panic signaturesguna menyempurnakan sub-alasan menjadisystem_boot_reason_propkanonis. - Tidak Boleh melaporkan string yang tidak mematuhi kebijakan di
  
kBootReasonMap(seperti"panic")dari bootloader, karena pada akhirnya akan merusak kemampuan untuk menyempurnakanreason. 
  Misalnya, jika kBootReasonMap berisi "wdog_bark",
  developer bootloader harus:
- Ubah ke 
"watchdog,bark"dan tambahkan ke daftar dikBootReasonMap. - Pertimbangkan arti 
"bark"bagi orang yang belum memahami teknologi tersebut dan tentukan apakahsubreasonyang lebih bermakna tersedia. 
Memverifikasi kepatuhan alasan booting
Saat ini, Android tidak menyediakan pengujian CTS aktif yang dapat secara akurat memicu atau memeriksa semua kemungkinan alasan booting yang dapat diberikan bootloader; partner masih dapat mencoba menjalankan pengujian pasif untuk menentukan kompatibilitas.
  Oleh karena itu, kepatuhan bootloader mengharuskan developer bootloader untuk
  secara sukarela mematuhi semangat aturan dan panduan yang dijelaskan di atas.
  Kami mendesak developer tersebut untuk berkontribusi pada AOSP (khususnya pada
  system/core/bootstat/bootstat.cpp) dan menggunakan kesempatan ini sebagai
  forum untuk diskusi tentang masalah alasan booting.