Asahi Linux 7.1 進捗レポート

Asahi Linux 7.1 進捗レポート

Asahi Linux 7.1 の概要

Asahi Linux 7.1 は、M3 シリーズへのハードウェアサポートの拡大、macOS 27 デベロッパーベータによって導入された重大なブートおよび電源の問題の解決、そしてハードウェアビデオデコーディングのためのカスタムファームウェア手法の実装に焦点を当てています。

macOS 27 との互換性とブートの修正

macOS 27 では APFS メタデータに変更が加えられ、Asahi Linux のインストールがブートピッカーに表示されなくなりました。

Apple のブートツールは、起動可能なボリュームを認識するために、APFS コンテナ内に「有効な」macOS インストールが必要となります。Asahi Linux は、Apple のツールを欺くために、m1n1 をカーネルとして含む小さな 2.5 GB の APFS コンテナを使用しています。macOS 27 では、Apple が APFS メタデータ内で特定のブート可能フラグを強制し始めました。このフラグが設定されていない場合、ボリュームは Startup Disk アプリケーションやブートピッカーから隠されてしまいます。

これを解決するために、Asahi インストーラーは、新しいインストールに対してこのフラグを自動的に設定するようになりました。macOS 27 ベータの影響を受けた既存のインストールについては、以下の方法が可能です:

  1. Asahi インストーラーを再度実行し、「Fix macOS 27 boot picker compatibility」オプションを選択する。
  2. chaos_princess によって開発されたスタンドアロンツール(GitHub の AsahiLinux/asahi-fix27 で入手可能)を使用して、Linux 内から問題を修正する。ただし、これは macOS 27 にアップグレードする前に実行する必要があります。

SMC ファームウェアと緊急シャットダウン

macOS 27 における System Management Controller (SMC) ファームウェアの変更により、Asahi Linux 上で緊急シャットダウンが発生します。

macOS 27 は SMC ファームウェアを更新し、バッテリー管理インターフェースの戻り値を 32 ビット整数から単一のバイトに変更しました。この ABI の変更により、Linux の電源供給ドライバがバッテリーの状態を故障と誤認し、システムを保護するために緊急シャットダウンをトリガーしてしまいます。これは、両方のファームウェア ABI をサポートするバージョン 7.0.12 以降のダウンストリームカーネルでパッチが適用されています。

M3 シリーズのハードウェアサポート

Asahi Linux は、M3、M3 Pro、M3 Max、および M3 Ultra SoC において大きな進展を遂げ、いくつかのコアコンポーネントが機能するようになりました。

Apple が M1 以降、いくつかのハードウェアブロックにおいて一貫性を維持しているため、M3 サポートの多くは Devicetree の追加と設定ファイルを通じて実装されました。主な成果は以下の通りです:

  • 高品質オーディオ: 前世代で使用されているものと同じ I2S コントローラ、Numerically Controlled Oscillator (NCO)、およびアンプチップを使用しているため、M3 マシンではスピーカーとヘッドフォンジャックのサポートが機能しています。
  • CPU 管理: CPU 周波数の切り替えと big.LITTLE タスクスケジューリングのサポートが有効になり、エネルギー効率とパフォーマンスの両方が向上しました。
  • ハードウェアセンサー: Devicetree の変更により、SMC ハードウェアセンサーが機能するようになりました。
  • コア SoC ブロック: M3 シリーズのマシンにおいて、PCIe、WiFi、Bluetooth、NVMe、キーボード、およびトラックパッドのドライバが動作しています。

Apple Video Decoder (AVD) とカスタムファームウェア

Asahi Linux は、Apple のプロプライエタリな kext に対する依存を避けるため、Apple Video Decoder (AVD) 用のカスタムファームウェアソリューションを実装しています。

AVD は、AVC (H.264)、HEVC (H.265)、VP9、および AV1 をデコードするための固定機能ハードウェアを管理する ARM Cortex-M3 コアです。Apple は、SoC ごとに異なるファームウェアと設定データを AVD カーネル拡張 (kext) 内に同梱しています。すべての SoC リビジョンに対して kext からファームウェアを抽出して更新するというロジスティックな負担を避けるため、Asahi チームは独自のファームウェアを記述しています。

Cortex-M3 は実行するファームウェアを検証せず、そのためチームは、割り込みハンドラをインストールし、各 AVD リビジョンに必要な調整を行うカスタム blob を開発しました。このアプローチにより、AVC ハードウェア用の V4L2 ドライバが動作し、最大 4K までの 10 ビット AVC エンコードビデオのサポートが可能になりました。今後の作業には、VP9、HEVC、および AV1 のサポート実装が含まれます。

m1n1 バージョン 1.6.0 のリリース

m1n1 v1.6.0 は、ステージ 2 ビルドに Rust の要件を導入し、GPU 初期化をブートローダーに移動したメジャーリリースです。

m1n1 1.6.0 における主な変更点は以下の通りです:

  • Rust の統合: ステージ 2 ビルドには Rust が必要になります。Apple Device Tree のパースコードは Rust に移植され、ブートローダーは aarch64-none-softfloat をターゲットとする no_std Rust を使用します。
  • GPU 初期化: GPU 初期化は、カーネルドライバではなく m1n1 によって処理されるようになりました。これにより、 Devicetree バインディングが簡微化され、Apple のハードウェア初期化データから浮動小数点数を扱う必要がカーネルネルドライバがなくなるためです。
  • M3 および将来のサポート: このリリースでは、M3 シリーズのマシン向けに SPMI コントローラと PCIe 初期化が追加され、非 macOS ブートモードと電源ドメインメタデータの処理を改善することで、M4 および A18 Pro (MacBook Neo) のサポートに向けた基礎を築いています。

Sources