2016年10月15日土曜日

OS XでVAIO Xの内蔵3Gモデムを使う

VAIO X (の非WiMAX構成)にはQualcommのGobi 2000という3Gモデムが内蔵されています。Windowsでは手軽に使えるのですが、OS Xではそうも行かないのでドライバを作る必要があります。作ると言っても、基本的には引用元のrubel氏の成果ほぼそのままです。

前提条件として、VAIO X内蔵のGobi 2000はベンダIDが〝0x05C6〟・プロダクトIDが〝0x9225〟です(引用元とは異なります)。また、ソースコードのビルドのためにXcodeをインストールする必要があります。筆者はXcode 3.2.6を使っています。

Windows側からファームウェアを持ってくる必要がありますが、これは Program Files\QUALCOMM\Images\Sony\ の中にあるどれかの番号が目的のNTTドコモのものです。しかし、番号だけじゃさっぱりわからないので UMTS\ フォルダの中身を持ってきました(※動いていますが本筋ではありません)。

// 検証してないのでよくわからないんですが、SIMロックとかないんじゃないですかね……

ここから持ってきた amss.mbn と apps.mbn を、 /Library/Application Support/USBNotificationExample/ に入れましょう。

ファームウェア・アップローダの作成

では、以下を参考にファームウェア・アップローダを作ります。

ここにあるアップローダがそのまま使えればいいのですが、そういうわけには行かないので USBNotificationExample.zip を落としてきて main.c のベンダID (77行目)とプロダクトID (78〜9行目)を変更します。あとはXcodeでビルドするだけです。

最初のままなら build/Debug/ の中に USBNotificationExample が出来上がっていると思います。これをTerminalから実行するだけです。

Looking for devices matching vendor ID=1478 and product ID=37413
Raw device added.
found device i didn't want (vendor = 1478, product = 37413)
Bulk test device added.
found device i didn't want (vendor = 1478, product = 37413)

……というようなメッセージが出て、どうもうまく動いてるのかいないのかよくわかりませんが、control-Cで中断してしまって結構です。

次は、ドライバを作ります。

ドライバの作成

ドライバは、64ビット版であれば引用元にzipファイルがあるのですが、我々が求めているものは悲しいかな32ビット版です。ないものは作りましょう。

とりあえず、以下から qualcomm-gobi.patch をもらってきます。

で、悩んだのが、これが最終的に AppleUSBCDCACMData.kext を作ることを目的としていることはわかるのですが、patch対象のソースが何であるかどこにも書かれていないことです。

とりあえず、Mac OS X 10.6.8に導入されている同名kextのバージョンは4.0.5、opensource.apple.comを探してみて、最も近いバージョン(のような気がするの)は以下です。これで行ってみましょう。

これ、なんとまとめて引っ張ってくる方法がどこにもなくて、おい死ねよアップルと思ったんですが、全然別のところからtarballを引っ張れました。せめて git とかにしてほしい。

上から AppleUSBCDCDriver-4005.4.2.tar.gz を引っ張ってきて展開します。同じフォルダに qualcomm-gobi.patch も入れましょう。Terminalで AppleUSBCDCDriver-4005.4.2/ へ移動して以下のようにpatchコマンドを。

$ patch -p0 < ./qualcomm-gobi.patch

これでたぶんパッチされているはずなので、ビルドしましょう。今度はXcodeからでなくて大丈夫。

$ make

これでxcodebuildコマンドを使って勝手にビルドしてくれるはずです。

ビルドが終わったら build/Default/ の中に AppleCDCACMData.kext が出来上がっていると思うので、右クリックからパッケージの内容を表示して Contents/Info.plist を開きます。AppleUSBCDCACMData3 というキーを探して、その中の idVendor と idProduct を書き換えます。今度は10進数なので、それぞれ 1478 と 37413 です。これだけ書き換えて保存すればOKです。

ドライバの導入

いよいよドライバの導入です。 /System/Library/Extensions/ の中に IOUSBFamily.kext があると思いますので、その中の Contents/Plugins/ の中の AppleCDCACMData.kext を置き換えます(バックアップはお忘れなく!)。

Kext Utilityなどで、これらのkextsのパーミッションを直してキャッシュを作り直させれば(つまりKext Utility起動時のダイアログでパスワード入力すれば) OKです。再起動後に有効になります ……と言いたいところなのですが、筆者の環境ではキャッシュの作成途中でデバイスが見つかりました。

3Gモデムの設定方法

これはMac OSの基本なので特に説明する必要もないとは思うのですが、システム環境設定から以下のように設定します。

まず、『ネットワーク』で検出された〝Qualcomm Gobi 2000〟の項を [詳細...] で開きます。製造元は〝一般〟・機種は〝GPRS (GSM/3G)〟です。APNに利用したい接続先のAPNを入力します。

[OK] で保存してネットワークの画面に戻り、構成より構成を追加して適切な名前を付け、電話番号に〝*99#1〟・アカウント名とパスワードは接続先から指定されたものを入力します。これで [接続] ボタンで接続して、問題なければ終了です。

なお、再起動などしてもファームウェア・アップローダを再度走らせる必要はないですが、もしモデムの動きがおかしかったらもう一度アップローダを走らせてみるといいと思います。

まとめ

この稿を参考にkextまで作って3Gモデムを使いたい人が、いったい世の中にどれだけいるのか知りませんが、目の前にあるものは使うべきだと思ったので書きました。 ライセンス周りがよくわからないので、バイナリの直接的な頒布は行いません。ビルドするのそんな難しくないので、チャレンジしてみてください。