Androidを支える技術<II>輪読会テンプレート 6.1, 6.2
日付:2024/4/13
章:6.1, 6.2
調査者:takasshii.icon
ブートローダーとその周辺
スマホの特殊性 - PCの違いから-
table: 違い
スマホ PC
ユーザー 一般人 ある程度の専門知識がある
カスタム root化やカスタムROMをすることも 全くしない
機能 非常に多いためセキュリティアップデートが必要 左に同じ
システムをかなり根本から差し替え可能なほどに柔軟に変更可能でありながら、ユーザーがシステムを壊すのを防ぐような制約
電源を入れてからinitまでの流れ
1. ブートローダの実行
2を行うために必要
2. カーネルのロードと実行
カーネルをフラッシュメモリから読みおみ
メモリ上にカーネルをコピー
カーネルのエントリポイントから実行
3. initを起動するのに必要な程度のカーネルの初期化
仮想メモリを初期化
ユーザープロセスを起動するために必要な最適限のカーネルの初期化を行う
4. initプロセスの起動
ユーザープロセスが早い段階で立ち上がる
5. カーネルの残った初期化とinitによる初期化、ファイルシステムのマウント
残りの初期化を行う
procやdevなどのディレクトリを作成してカーネルと対応
ルートファイル以外のストレージをマウント
システムに必要なデーモンやシステムサービスを起動
Android端末のパーティション
aboot
ブートローダーの保存されているパーティション
まずここが行われる
boot
ブートイメージを置く場所
cache
バックアップ
recovery
リカバリーイメージ
system
Androidのバイナリが入ってる
userdata
/dataにマウントされるパーティション
アプリやデータが格納される
ブートイメージとリカバリーイメージ
基本的には一緒
ヘッダ、カーネル、DeviceTree(カーネルの一部)、RAMディスク(メモリ上のファイルシステムイメージ)
ブート時にRAMディスクをルートとしてmountし、カーネルをロード
RAMディスクがルートのファイルシステムとして最後まで生き続ける
Androidのブートローダー
電源を入れてからカーネルに処理が移るまでの部分は端末ごとに大きく異なる
Nexusシリーズを例に挙げる
LKブートローダー
Little Kernel Boot Loaderの略
Androidのブートローダーとして使われている
特徴
署名されたイメージのロードをサポートしている
Device Treeをサポートしている
デバイスのパラメータを記述できるもの
fastbootをサポートしている
USBでPCと通信して開発作業を行う
誤って書き換えがされないように、systemとは異なるabootに置かれている
処理
ハードウェアを初期化
基本的なレジスタの設定はここでやる(PCとは異なる)
ブートイメージの署名を確認
こっそり悪意のあるファイルが追加されないようにする
カーネル, Device Tree, RAMディスクをロード、カーネルに処理を移す
応用
code:sample.kt
質疑応答