LinuxがApple Silicon M1 Mac miniに移植された経緯

LinuxがApple Silicon M1 Mac miniに移植された経緯

ウェズリー・ヒリアードのプロフィール写真ウェズリー・ヒリアード

· 2分で読めます

Linux Ubuntuで動作するFirefox

LinuxはM1プロセッサ搭載のMac miniで動作するようになりましたが、Appleはカスタムファームウェアと独自のデータパスを持つOSの移植を容易にしませんでした。Corelliumがどのようにしてそれを実現したのか、以下にご紹介します。

Linux が M1 プロセッサを搭載した Mac で完全に使用可能になったため、Corellium のチームが OS の移植プロセスを詳細に説明しました。

木曜日の投稿で、Corelliumは2014年に発売されたiPhone 6以来、Appleのカスタムプロセッサを研究してきたと述べています。同社はいくつかのエクスプロイトと以前の研究を利用して、2020年初頭にA10プロセッサへのカーネルポートを構築しました。

Appleは2020年11月にM1プロセッサを搭載したMacをリリースしました。その後のOSアップデートにより、ユーザーはカスタムカーネルをインストールできるようになりました。この機能の追加を受けて、CorelliumチームはLinuxへの移植に着手しました。

Corelliumによると、M1はAppleのAシリーズプロセッサと多くのコンポーネントを共有しているという。しかし、Appleが他のARMメーカーが定めた標準を採用していないという点においては、これは大きなメリットとなる。

Corellium チームは、Linux を移植する際に直面した課題を詳しく説明しました。

技術的な詳細

Corelliumチームによると、AppleはCPUを従来の方法で起動していないという。まず、ブートローダーはMachオブジェクトファイル形式(Mach-O)と呼ばれる実行ファイルをIMG4と呼ばれる署名付きラッパー形式でラップして実行する。起動するCPUコアが増えるにつれて、メモリマップドI/O(MMIO)レジスタで指定されたアドレスからカーネルの実行を開始するため、ブートローダーの動作はさらに複雑になる。

Appleは、ARMの一般的な汎用割り込みコントローラ(GIC)標準規格に当てはまらない独自のコントローラを設計しました。タイマー割り込みは高速割り込み要求(FIQ)にルーティングされますが、これは標準規格ではなく、古い32ビットARMシステムを反映しています。Appleの開発チームによると、複数のプロセッサ間で通信を行うには、プロセッサ間割り込み(IPI)のセットを用意する必要があるとのことです。

CorelliumチームはFIQサポートの経験があり、Appleの非標準的なアプローチのほとんどに対応できる準備ができていました。最終的に、チームはLinuxのラッパーとして機能するプリローダーを追加し、M1プロセッサ上でOSを起動できるようにしました。

チームはM1 Mac用のインターフェースケーブルを持っていなかったため、代替の入力経路を見つける必要がありました。Bluetooth、USBホスト、PCIe経由のxHCI USBホストという3つの選択肢から、USBホストを選択し、I2C経由でチップと通信する必要がありました。

適切なUSB接続が確立されると、キーボード、マウス、フラッシュドライブを接続できるようになりました。これにより、通常のデスクトップLinuxディストリビューションを実行できるようになりました。