M1 vs. PC Boot - asfdrwe/asahi-linux-translations GitHub Wiki

2021/12/30時点のM1-vs.-PC-Bootの翻訳


M1マシンでは通常のPCや古いIntel Macの起動方法とは全く異なる起動プロセスを採用しています。しかし変なのには理屈があるのです。この文書ではApple Siliconマシンでどのように動作するかをより良くイメージするための考え方を紹介します。

SSD

M1マシンのSSDにはブートコンポーネントとマシンにインストールされたOSの両方が入っています。これはUEFIマシンとは異なります。Apple SiliconのSSDは、UEFIファームウェアのフラッシュメモリ(特にコンフィグレーションはSSDに格納されている)の部分と、OSローダーを含むそこから起動させるメインOSのNVMeデバイスの部分の両方を合わせたものだと考えてください。Android端末をご存知ならばこれらは同様のモデルを使用しているのです。

SSDはGPTを使用しており、ほとんどのUEFIシステムのディスクと同様です。最初のパーティションは、ブート関連や設定やUEFIの可変ファームウェアボリュームのようなものとそれ以外のものに使用されます。OS は、OS のブートローダやいくつかのファームウェアやOS カーネルが含まれるボリュームを含むコンテナにインストールされます。これはEFIシステムパーティション(ESP)に類似していると考えてください。

iBootはAPFSしか理解できず、GPTディスク上の3つのパーティションはすべて複数のAPFSボリュームを含むAPFSコンテナそのものです。

NORフラッシュ

また、NORフラッシュと呼ばれる別のフラッシュチップがあります。これは、パソコンのUEFIファームウェアが入っているのと同じ種類のチップです。ここには製品情報とiBootの最初の段階のみ入っています。これはUEFIファームウェアの最初の部分と考えることができます。内部ストレージからOSのブートローダを起動するのに十分ですが、UEFIのように膨大な量のドライバを含みません

SecureROM

これはM1に組み込まれたROMで、まさに最初に実行されるコードです。その仕事はiBootの第一段階をNORからロードして実行することです。

Intel/AMDのPCも様々なROMを搭載し複雑なブートプロセスを行っていますが、それらの部分はプロプライエタリなため、私たちが耳にすることはありません。最近のIntel PCが初期化なしでFlash内のファームウェアから直接コードを実行し始めるというのは幻想ですが、私たちは今でもそういう仕組みになっていると思いたいです。

iBoot

iBootはM1マシンのメインブートローダです。これは小さいです。外部記憶装置を理解できません。USBに対応していません。UI もありません。できることといえば、内部ストレージからの起動と、アップルロゴや一部のエラーメッセージの表示だけです。

iBootはPCのUEFIファームウェアの下位コンポーネントのようなものです。内蔵のNVMeから起動するには十分ですが、USBドライバーは持っていません。

iBootには2つのステージがあります。そのうちの1つはNORフラッシュに格納されており、APFSを理解してSSDから第2ステージをロードするのが仕事です。これはシステムファームウェアのようなもので永続的なものです。第2ステージは実質的にmacOSのブートローダであり、macOSのカーネルを起動します。これは Intel Mac の boot.efi のようなものです。

リカバリーモード

リカバリーモードは独立したパーティションに組み込まれたmacOSのインスタンスです。リカバリーモードは、起動するOSを選択したり、リカバリーシェル/環境に入ったりできる安全な環境です。Apple Siliconマシンで電源ボタンを長押しすると実際にmacOSが起動します。起動時のオプション画面はすでにmacOSのフルスクリーンアプリケーションになっています。リカバリーモードに入ると、ターミナルを立ち上げて、rootシェルが使えるようになります。インストールされているネットワーク、curl、sh、perlなどのツールを使うことができます。任意のスクリプトを実行することができますしブートの設定に便利なコマンドが用意されています。独自のアドホック署名付きバイナリを実行することができます(11.2の時点)。しかし、SIP と AMFI (entitlement) の制限が適用されるため、ブートポリシー・SEP と対話する許可などを独自のバイナリに与えることはできません。

リカバリモードは、UEFI シェルと UEFI セットアップメニューを一つにまとめたようなものです。これは、Linux インストーラを構築するのに十分な力を持っています。UEFIファームウェアの残りの部分とそれ以上のものと考えてください。

macOS

macOSはGPTの2番目のパーティションから起動します。これが本当のOSです。Darwinカーネルから始まりそこから進んでいきます。

Asahi LinuxはmacOSを置き換えたり補完したりします。ここが何か置き換えたり独自のコードを起動したりすることが許される箇所です。

Apple Silicon macの『OS』の概念には、OSローダー(iBootの2段目)とDarwinカーネルとファイルシステムの両方が含まれています。我々はカーネルを置き換えることができますが、iBootの第2段階は置き換えできません。カーネルがブートプロセスの中でAppleがセキュリティをダウングレードして独自のコードを実行する機能を開発した箇所です。また、全体の構造をmacOSに似せておく必要があります。つまり、事実上、LinuxはmacOSの『シェル』、つまりiBootとAppleのブートインフラに起動可能な正当なOSであることを納得させるためのいくつかのファイルだけが入ったボリュームからブートストラップすることになります。この全体像はやや複雑なEFIシステムパーティションと考えてください。

macOSに代わる最初のブートステージのインストール方法には特別な要件があるため、Linuxからのアップデートには不便です。そのため、この時点で独自のブートローダチェーンを挿入することになります。これは、Microsoftのsecurebootキーを使用しているUEFI環境にLinuxをインストールする際に使用するUEFI securebootの『shim』と考えることができます。署名は異なっています。我々はAppleの開発者証明書をこのために必要としたり使用したりはしません。代わりに、インストールプロセスが1 台のマシンでのみ使用するための第 1 段階に『署名』しますが、コンセプトは似ています。このステージの後、ext4やFAT32など、Linuxの標準的なファイルシステムから望むものにチェーンロードすることができます。

DFU

DFUはM1のSecureROMに内蔵されたリカバリーモードで、iBootやリカバリーモードが使えない場合にデバイスを最初からフラッシュすることができます。DFUはNORフラッシュ内のデータが失われていても動作します。

DFUはほとんどのPCには存在しません。UEFIフラッシュが破損した場合PCは文鎮化してしまいます。DFUモードはApple Siliconデバイスに特有の機能です。

一部のPCマザーボードでは、同様の機能を別チップの一部として実装しており、実際にマザーボードの電源を普通に入れることなく、USBメモリからUEFIファームウェアをフラッシュすることができますが、これはハイエンドのスタンドアローンマザーボードでのみ一般的です。

DFUモードのおかげで、Apple Siiconマシンを外部から復元できないように文鎮化することはほぼ不可能になりました。最悪の場合NORの製品情報(シリアルナンバー、キャリブレーションなど)が消去されてしまいます。その場合に理論上DFUプロセスは復旧作業でのサーバーとの通信により(訳注:phone-home steps)Appleからそれら製品情報を得る必要が あります。とはいえ、このようなことが偶然に起こる可能性は限りなく低いです。