ユーザー空間でのfastboot
Androidのfastbootモードは、正確にはfastbootdを起動した簡易的なLinux環境である。リカバリに近いが工場出荷時以降は変更できないっぽい。これが不便なため、元々あるfastboot(ブートローダーのfastbootと呼ぶ)とは別に後からOTAなどで追加できるfastbootを「ユーザー空間でのfastboot」と呼ぶらしい。Android 10以降から追加された。
仕組みとしてはfastboot用のパーティションを別途作り、元々あるfastbootの代わりに起動できるようにする。しかしfastboot用のパーティションを新規追加するとパーティション数が増えて色々めんどくさいため、recoveryパーティションに追加ファイルとして含めることを推奨している。
その場合、fastbootモードはrecoveryのカーネルを利用して起動する。(rootfsは別。)
adb reboot fastboot:
Androidが起動した状態で実行した場合はユーザー空間でのfastbootを起動する
recovery(twrpやベンダーのリカバリモード)で実行した場合はブートローダーのfastbootを起動する
fastboot reboot fastboot: ユーザー空間でのfastboot時に実行するとブートローダーのfastbootを起動する。
fastboot reboot recovery: ユーザー空間でのfastboot時に実行すると再起動なしにリカバリを起動できる。ブートローダーのfastboot時に実行すると普通に再起動してリカバリが起動する。
fastboot getvar is-userspace: 現在どっちのfastbootで動いているかわかる。
ユーザー空間でのfastbootは、boot・recovery・bootloader・radio以外のパーティションに対して書き込みができるが、この4つに対してはできないため依然としてブートローダーのfastbootも必要になる。またユーザー空間のfastbootは動的パーティションの変更もできない。
vendor_bootの更新は、ユーザー空間のfastbootが対応していればできる。しかしvendor_bootは新しい仕組みのためブートローダーのfastbootでは対応してないことがある。
ちなみにvendor_bootは内部にbootから切り分けられたramdisk.imgを持つことができるものだが、vendor_bootバージョン4からはramdisk.imgを複数持ち串刺しで利用できるらしい。
そういった特殊な仕組みなので、普通のfastboot flashとかfastboot fetchでvendor_bootをいじるのはできないらしい。
参考:
https://source.android.com/devices/bootloader/fastbootd
#Android