はじめに
安価な USB Wi-Fi 子機の中には、Linux では普通に動くのに、macOS 用のドライバが存在しないものがたくさんあります。MediaTek の MT7601U(USB ID は 148f:7601)を積んだ小型の子機も、その一つです。
この記事で紹介するのは、MT7601U の子機を macOS で使えるようにした自作ドライバです。Linux 本家の mt7601u ドライバを、書き換えずに近い形で、macOS のユーザー空間で動かしています。
- 2.4GHz の Wi-Fi(802.11n)に接続できます
- WPA2-PSK(一般的な家庭用ルーターの設定)と、パスワードなしのネットワークに対応しています
- IPv4(DHCP)と IPv6 のアドレスを取得できます
- メニューバーのアプリから、接続状況の確認、ネットワークの一覧表示、接続ができます
- ダブルクリックで入れられる GUI インストーラー(
.pkg)があります
最初に、できないことも書いておきます。
- macOS 標準の「システム設定 > Wi-Fi」には表示されません。 専用のメニューバーアプリから操作します
- 5GHz には対応していません(チップが 2.4GHz 専用です)
- WPA3 には対応していません
- 通信は専用のネットワークインターフェース(
utun)経由です。macOS のデフォルトの経路は変えません(後述)
実験的なプロジェクトで、無保証です。 自己責任でお試しください。
動作環境
| 項目 | 内容 |
|---|---|
| OS | macOS 26(Tahoe) |
| CPU | Intel(x86_64) |
| 子機 | MediaTek MT7601U(USB 148f:7601)搭載のもの |
| 動作確認した環境 | Hackintosh の Mac Pro(MacPro7,1)、家庭用ルーター 1 台(2.4GHz、WPA2) |
動作確認は、上の 1 つの環境だけです。Apple Silicon の Mac や、ほかの macOS のバージョンは確認していません。
子機を挿したときに、USB の情報が 802.11 n WLAN、ベンダー ID 0x148f、製品 ID 0x7601 になっていれば対象です。
「このMacについて > システムレポート > USB」で確認できます。
インストール方法(GUI)

- GitHub の Releases から、
MT7601U-WiFi-0.1.pkgをダウンロードします - ダウンロードしたファイルを、右クリック →「開く」 で開きます。署名のないインストーラーなので、ダブルクリックだけでは警告が出て開けないことがあります
- 画面の案内に従って、インストールします。管理者のパスワードを聞かれます
- インストール後に「アプリのバックグラウンドでのアクティビティ」という通知が出ます。これは、メニューバーアプリとデーモンが、バックグラウンドで動く設定を登録したという意味です。許可してください
- MT7601U を USB に挿します
- 少し待つと、メニューバーに Wi-Fi のアイコンが出ます
インストールされるものは、次のとおりです。
| 場所 | 内容 |
|---|---|
/usr/local/libexec/mt7601u/mt7601ud | ドライバ本体(常駐デーモン) |
/usr/local/share/mt7601u/mt7601u.bin | チップのファームウェア |
/Applications/MT7601U Wi-Fi.app | メニューバーアプリ |
/usr/local/bin/mt7601u-wifi | コマンドラインのランチャー |
/Library/LaunchDaemons/local.mt7601ud.plist | デーモンを自動起動する設定 |
/Library/LaunchAgents/local.mt7601u.wifi.plist | ログイン時にメニューバーアプリを起動する設定 |
使い方
メニューバーアプリ

アイコンをクリックすると、次のものが表示されます。
- 接続中のネットワーク名、IP アドレス、電波の強さ、チャンネル
- 周辺のネットワークの一覧(電波の強い順。鍵のマークは、パスワードが必要なもの)
- 再スキャン、切断、保存済みネットワークの削除
ネットワークを選ぶと、パスワードの入力画面が出ます。入力したパスワードは保存され、次回からは、選ぶだけで接続できます。起動後は、保存済みのネットワークに自動で再接続します。
アイコンは、状態によって変わります。電波の強さに合わせて、Wi-Fi のマークの濃さが変わります。
| 表示 | 状態 |
|---|---|
| Wi-Fi のマーク | 接続中 |
| 斜線入りのマーク | 未接続、またはアダプタが見つからない |
| ビックリマーク付き | 接続処理中、または接続に失敗 |
| 三角の警告 | デーモンが動いていない |
コマンド
ターミナルから、同じ操作ができます。
mt7601u-wifi scan # 周辺のネットワークを検索して一覧表示
mt7601u-wifi connect "SSID名" # パスワードを聞かれ、保存されて自動接続されます
mt7601u-wifi status # 接続状況(JSON)
mt7601u-wifi disconnect # 切断
mt7601u-wifi forget "SSID名" # 保存したネットワークを削除
mt7601u-wifi log # ログを表示
通信を確認する
接続できたら、次のコマンドで確認できます。utun4 の番号は、環境によって変わることがあります。ifconfig で、接続先の IP アドレスが付いたものを探してください。
ping -c 4 -b utun4 192.168.0.1 # ルーター(ゲートウェイ)に届くか
インターネットへの疎通は、次のように、取得した IP アドレスを指定して確認できます。
ping -c 4 -S 192.168.0.227 8.8.8.8
筆者の環境では、ルーターへの ping が 4〜50 ミリ秒、8.8.8.8 への ping が 50〜100 ミリ秒ほどでした。最初の数回は、1 秒前後かかることがあります。受信のレートは、HT MCS2 20MHz と表示されていました。1 本のアンテナの 20MHz 幅の接続で、理論上の最大は 72 Mbit/s ですが、実際の速度は計測していません。
デフォルトの経路は変えません
このドライバは、接続しても、macOS のデフォルトの経路(インターネットへの出口)を変えません。有線の LAN などがあれば、そちらが使われます。有線がないときに、この Wi-Fi が使われます。
Wi-Fi を、標準のネットワークとして使いたい場合は、設定の変更が必要です。この記事では扱いません。
アンインストール
sudo /usr/local/libexec/mt7601u/uninstall.sh
デーモン、アプリ、ファームウェアなど、インストールしたものを削除します。保存したネットワーク(パスワードを含む)は、/var/db/mt7601ud に残ります。完全に消したい場合は、このフォルダも削除してください。
仕組み
Linux には、MT7601U 用の mt7601u ドライバが入っています。これを、macOS のユーザー空間で動かしています。
メニューバーアプリ(Swift)/ mt7601u-wifi コマンド
│ 制御ソケット(/var/run/mt7601ud.sock)
mt7601ud(root で動く常駐デーモン)
├─ mt7601u(Linux 本家のソース、ほぼ無改変)
├─ Linux カーネル API の互換層、簡易 mac80211、MLME、WPA2 の supplicant
├─ IOKit USB ── MT7601U の子機
└─ utun(DHCP・ARP・IPv6 をデーモンが処理)
macOS には、Wi-Fi ドライバを作るための公開された仕組みがありません。そのため、次のように割り切っています。
- ドライバ(
mt7601u)は、Linux のものをそのまま使う。 チップの制御は、これに任せます - Linux のカーネルの機能を、ユーザー空間で再現する。
skbなどの Linux の部品を、互換層として用意しました - Wi-Fi の「接続」の手順(認証、アソシエーション、4-way ハンドシェイク)は、自前で書く。 Linux では mac80211 と wpa_supplicant が担当している部分です
- 通信は、
utunに載せる。 暗号化は、チップのハードウェアが行います
この方式は、先に作った TP-Link Archer TX20U Nano(RTL8852B)用のドライバ(rtw89-macos)と同じです。今回は、その土台を使って、別のチップに対応させました。
苦労した点
動かすまでに、次のような問題がありました。
- チップが固まる。 ファームウェアが動いたままのチップを、もう一度初期化すると、受信がでたらめになることがありました。起動時に USB のポートをリセットして、解決しました
- AP のチャンネルを取り違える。 このチップは、ファームウェアがスキャンしてくれないため、受信したときのチャンネルで AP の場所を判断していました。隣のチャンネルで拾った電波を、AP のチャンネルと取り違えて、接続できなくなることがありました。AP が自分で申告するチャンネル番号(ビーコンの DS Parameter Set)を使うように直しました
- 暗号化ヘッダ(IV)が二重になる。 このチップは、暗号化のヘッダ(IV)をハードウェアが付けます。ソフトウェア側で付けると二重になり、AP に捨てられていました。Linux の mac80211 と同じ規則に合わせました
- スキャンのあとにチャンネルを戻さない。 スキャンしたままのチャンネルに、無線が残ってしまい、接続中の通信が止まっていました。スキャンのあとに、接続中のチャンネルへ戻すようにしました
困ったとき
- 一覧が空のまま、または接続できない。 デーモンが、チップの固まりを検知すると、自動で再起動して初期化し直します。それでも直らない場合は、USB を挿し直してください
- 「パスワードが違う」と出る。 まず、打ち間違いを疑ってください。実際に、筆者の失敗の原因の多くが、打ち間違いでした
- 5GHz のネットワークが見えない。 このチップは、2.4GHz 専用です
- ログを見る。 メニューの「ログを開く」、または
mt7601u-wifi logで、デーモンのログ(/var/log/mt7601ud.log)が見られます
ソースからビルドする
Xcode の Command Line Tools が必要です。
git clone https://github.com/Long0823-1/mt7601u-macos.git
cd mt7601u-macos
scripts/fetch-firmware.sh # ファームウェアを取得(リポジトリには含みません)
installer/build-pkg.sh # dist/ にインストーラー(.pkg)を作成
デーモンだけ試す場合は、次のようにします。
cd port && make
RTW89_FW_DIR=../mt7601u ./mt7601ud scan
まとめ
- MT7601U の USB 子機を、macOS で使えるようにしました。2.4GHz、WPA2、IPv4 / IPv6 で動作します
- GUI のインストーラーと、メニューバーのアプリがあります
- 標準の「システム設定」には出ません。通信は専用のインターフェース経由です
- 動作確認は、筆者の環境 1 つだけです。実験的なソフトウェアなので、自己責任でお使いください
ソースコードとインストーラーは、GitHub で公開しています。
- リポジトリ: https://github.com/Long0823-1/mt7601u-macos
- インストーラー: https://github.com/Long0823-1/mt7601u-macos/releases
ライセンスは GPL-2.0 です。Linux の mt7601u ドライバ、MediaTek のファームウェアのライセンスは、リポジトリの THIRD_PARTY.md を参照してください。


コメント