IBoot
From Wikipedia, the free encyclopedia
iBootは、ステージ2 ブートローダである。iPhone, iPad, Appleシリコン Mac, およびApple T2を搭載したインテルMac[2][3]で採用されている。 iBootは、前モデルと比較して、ブートチェーンで実行される認証を改善する[1]。Apple T2を搭載したIntel Mac では、ブートプロセスはboot ROMからT2チップ上でコードを実行することから始まる。そのboot ROMは、iBootをT2チップにロードして実行する。その次にiBootはbridgeOSをT2チップにロードし、起動する。そしてbridgeOSはUEFIファームウェアをロードする。UEFIファームウェアはメインIntelプロセッサを起動し、Power-On Self Testプロセスを完了させる。UEFIファームウェアはboot.efiをロードし、macOSカーネルをロードして起動する[3]。
| iBoot | |
|---|---|
| Developer(s) | Apple |
| Initial release | June 29, 2007 |
| Stable release | iBoot-11881.80.57~171 (RELEASE, iOS 18.3 RC and iOS 18.3.1) |
| Preview release | iBoot-11881.80.57~107 (RELEASE, iOS 18.3 beta 1) |
| Operating system | Darwin, macOS, iPadOS and iOS[1] |
| Platform | X64, AArch64 |
| Type | ブートローダ |
| License | Proprietary software |
iPhone、iPad、Appleシリコン搭載Macの場合、ブートプロセスはデバイスのブートROMを実行することから始まる。Apple A9またはそれ以前のAシリーズプロセッサを搭載したiPhoneやiPadでは、ブートROMはステージ1ブートローダであるLLB(Low-Level Bootloader)をロードし、iBootをロードする。Apple A10以降のSoCを搭載したデバイスやAppleシリコン搭載Macでは、ブートROMはiBootをロードする[4]。すべてがうまくいくと、iBootはiOS、iPadOS、macOSのカーネルと、オペレーティングシステムのその他のロードを進める[5][6][7]。iBootがiOS、iPadOS、macOSのロードに失敗したり、検証に失敗した場合、ブートローダはDFU(デバイスファームウェアアップデート)[8]モードにジャンプする[1][9]。
カーネルと起動に必要なドライバ全てがロードされると、ブートローダはカーネルの初期化手順を開始する。この時点で、カーネルがルートデバイスを見つけるために必要なドライバがロードされる[10]。
Apple A7以降を搭載したiPhoneやiPadでは、LLBとiBootはNANDフラッシュに保存される[11]。Apple M1以降を搭載したMacでは、LLBは内蔵SSDに保存される[12]。
ビルドスタイル
流出したiBootのソースコード(2018年2月7日)によると[13]、apps/iBoot/iBoot.mkでは、iBootのコピーをビルドする際に有効なビルドスタイルを「RELEASE」、「DEVELOPMENT」、「DEBUG」、「SECRET」と定義している。これらのビルドスタイルは、ブートローダがコンパイルされる際に特定の情報を定義する。例えば、開発中のデバイスの問題を見つけるためにデバッグコマンドを追加したり、シリアル経由でiBootコマンドプロンプトを使用してハードウェアテストを実行したりできる。
定義
RELEASE - リリース版
DEVELOPMENT - 開発用ハードウェアで使用されるビルドでは、「diags」コマンドなど、いくつかの開発用ツールにアクセスできる
DEBUG - iOSやその他の下位コンポーネントのデバッグに使用されるビルド
機能
iBootは、リカバリ、DFU、またはリストアモード時にコマンドプロンプトを表示する(iBootの「DEBUG」ビルドにも表示されるが、将来のビルドでは表示されなかった)。コマンドの使用可否は、使用するiBootのタイプ、特にビルドスタイル(RELEASE、DEVELOPMENT、DEBUG、SECRETなど)に依存する[要出典]。
iBootのコマンドプロンプトを使用する場合、含まれるコマンドは、ブート引数(NVRAMで内部的に「boot-args」と呼ばれる)や、iBootが自動的にロードされたときにスタートアップコマンド(fsboot)を使用するかどうか(自動ブートとして知られている)などの動作を管理するために使用される[14][15]。
メモリ安全性
ソースコード漏洩事件
履歴

iBootの最も古いバージョンはiBoot-87.1で、2006年から2007年にかけ製造された、最初期のプロトタイプiPhoneに搭載されたものである[18]。このバージョンは、iBootの最初のバージョン(iBoot-99)と同じ機能を持っていたが、最終リリース前の機能は持っていなかった。このバージョンのiBootは、iBootの「最初期ベータ版」と考えられる。初代iPhoneとiPhone OS 1のリリースに伴い、最初にリリースされたiBootのバージョンはiBoot-159だった。