Android ブート方式
Androidのブート方式には3種類ある。
タイプA(Legacy ramdisk): 古くからあるAndroidの起動方式。bootパーティションに入っているカーネル(kernel.img)とinitramfs(ramdisk.img)が起動し、/initが呼び出される。initramfsはそのままrootfsとして使われる。
タイプB(Legacy SAR): Pixel 1以降のAndroidの起動方式。bootパーティションに入っているカーネル(kernel.img)が起動し、systemパーティションをrootfsとしてマウントし/initを呼び出す。つまりinitramfsを使わず直接systemが利用される。これにより、systemパーティションにはAndroidのコンポーネントだけではなくLinuxが起動するのに必要なファイルなども含められるようになった。(ramdisk.imgを統合したとも言える)
タイプC(2SI ramdisk SAR): Pixel 3以降の起動方式。bootパーティションに入っているカーネルがinitramfsで起動し、その後systemをマウントしてrootfsをinitramfsからsystemへ変更する。Linuxディストリビューションなどがよくやっている方式。
Android 10からAndroidの動的パーティション(systemやvendorのサイズを工場出荷後も変更できるようになる)になったため、systemマウント以前にsystemの場所を特定しマウントしてあげるためのfstabやカーネルモジュールが必要になり、初期ram空間でのセットアップが必要になった結果この方式になったんだと考えられる。
参考:
Android A/B パーティション
Androidのパーティション
https://topjohnwu.github.io/Magisk/boot.html
https://source.android.com/devices/bootloader/partitions/system-as-root
#Android