Tethered boot macos host
title: テザーブート: macOS ホストマシン¶
2025/3/9時点のtethered-boot-macos-hostの翻訳
訳注:原文のスペルミスやリンクミスは正しいものに修正
macOSホストでのテザーブートセットアップ¶
この案内では、macOS ホストでのテザーブートで前もって必要なセットアップについて、より詳しく説明します。
macOS ホスト¶
ホストの要件:
- 最新版の MacOS が動作する Apple のコンピュータ
- ホスト上にソフトウェアのインストールやコンパイルに十分なディスクスペース
- ホストに空き USB ポート
- USB-A/USB-C または USB-C/USB-C ケーブル
- 前提条件となるソフトウェアのインストール
テスト環境:
- macOs Big Sur 11.7(20G817)を実行するiMac 27インチ後期2015
シリアルポートを設定¶
macOs の m1n1 UART デバイス名は、Linux ホストのもの (Linux では /dev/m1n1
と /dev/m1n1-sec
) とは違います。一般的には以下のようなデバイス名です:
/dev/cu.usbmodemP_01
は m1n1 propy クライアントが使用するプライマリ UART デバイス/dev/cu.usbmodemP_03
はテザリングされたマシンが起動した直後に、m1n1ハイパーバイザーに接続するためのセカンダリUARTデバイス
デバイス名は機器や設定によって変わる可能性があるので注意してください。不明な場合は実際のデバイス名の検索で確認してください。
m1n1 バックドアを起動¶
シャットダウン(電源オフ状態)して、対象機器に USB ケーブルを接続し、ホスト上で以下のコマンドを実行します:
~/asahi/m1n1/proxyclient/tools/picocom-sec.sh
ここで、テザリングされた機器を起動します。picocom-sec.sh
スクリプトはデバイスを待ち、デバイスが現れると接続します。
そしてm1n1ハイパーバイザーのバックドアをトリガーし、ターミナルに出力が表示されるでしょう。
picocom v3.1
port is : /dev/cu.usbmodemP_03
flowcontrol : none
baudrate is : 500000
:
:
これで、m1n1ハイパーバイザーはm1n1プロキシクライアントツールからコマンドを受け付けることができるようになりました:
$ python3 ~/asahi/m1n1/proxyclient/tools/shell.py
:
:
TTY> Waiting for proxy connection... . Connected!
Fetching ADT (0x00058000 bytes)...
m1n1 base: 0x802848000
Have fun!
>>>
実際のデバイス名の検索¶
pyserial
をインストールし、以下のコマンドを実行します (ターゲットマシンがホストに接続されていることを確認):
while : ; do pyserial-ports ; sleep 1 ; done
テザリングされた機器を(電源オフの状態から)コールドブートして、新しいデバイスが現れるのを待ちます。デバイス名を メモしてください(番号の小さい方がメインのm1n1 UARTデバイス、もう一方がm1n1のはず)。
前提条件となるソフトウェアのインストール¶
Homebrewをインストール¶
macOS ホストにソフトウェアをインストールする好ましい方法はhomebrew
パッケージマネージャを使用することで、単純な shell コマンドを
実行することです。
ターミナルウィンドウを開き ([Cmd]
+[Space]
キーを押し、iterm
と入力して [Enter]
を押す)、以下のコマンドを入力してください
(不明な場合は Homebrewウェブサイト を参照してください)。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Python >= 3.9 をインストール¶
macOS は Python 3.8 をバンドルしていますが、ホスト上で動作する m1n1 スクリプト部分と、テザリングされたマシン上の m1n1 ハイパーバイザーを 操作するために、Python 3.9 以降が必要です。
brew install python3
目的の python 実行ファイルにアクセスできることと、必要最小限のバージョンを取得できることを確認します。
$ type python3
python3 is /usr/local/bin/python3
$ python3 --version
Python 3.10.8
LLVMをインストール¶
m1n1とその依存関係、およびカーネルのビルドにはCコンパイラが必要です。LLVMは(私が思う?)Asahiの推奨コンパイラです:
brew install llvm
pyserialをインストール¶
pyserial は m1n1 に必要です。m1n1 の起動時に macOS から公開されるシリアルポートデバイスの名前を特定するのに役立ちます。
pip3 install pyserial construct serial.tool
pyserial-ports` がインストールされていることを確認します:
$ type pyserial-ports
pyserial-ports is /usr/local/bin/pyserial-ports
picocomをインストール¶
m1n1プロキシとの通信を確立するには、シリアルポート通信ソフトウェアが必要です。シリアルターミナルとして使用するために、
homebrewで利用可能な picocom
のインストールをおすすめします:
brew install picocom
img4tool をインストール (オプション)¶
Homebrew Tap を使うか、手動でインストールしてください。
Homebrew tapを使用¶
Homebrewでのインストールを容易にするためにtapを作成しました。tapを追加してインストールするだけです。
brew tap aderuelle/homebrew-tap
brew install img4tool
手動でインストール¶
macOS の純正カーネルを起動する予定なら、対象機器上にインストールされた macOS の kernlecache から実際のカーネルファイルを 抽出するためにこれらのツールが必要になります。macOS 用のプリコンパイルバージョンがない場合は、コンパイルする必要があります。
この手順では、ホームディレクトリに asahi
フォルダを作成し、そこにすべてをクローンします。さらに、システムの残りの部分を
ぐちゃぐちゃにさせないために、すべてを ~/asahi/deps
フォルダにインストールします。
まず、libgeneral
をクローンし、ビルドしてインストールします:
cd ~/asahi
git clone https://github.com/tihmstar/libgeneral.git
cd libgeneral
./autogen.sh
./configure --prefix=/Users/alexis/asahi/deps
make && make install
次に、img4tool
をクローンし、ビルドしてインストールします:
cd ~/asahi
git clone https://github.com/tihmstar/img4tool.git
cd img4tool
./autogen.sh
PKG_CONFIG_PATH=~/asahi/deps/lib/pkgconfig ./configure --prefix=~/asahi/deps
make && make install
img4toolのバイナリにアクセスできるように
PATH` 変数を更新します。
export PATH=~/asahi/deps/bin:$PATH