OSXで破壊したFTDI VCP環境を修復する

FTDIのチップ(例: FT232H、FT232RL)にはシリアルUSBデバイスとして見せるVCPモードと、bitbang転送などで使うD2XXの2つのモードがある。
OSXでは両者は共存できない。

双方のドライバをインストールしたあと
http://d.hatena.ne.jp/seinzumtode/20160714/1468472593
のプロセスを実行してVCPを無効にするとD2XXが有効になるが、
VCP環境に戻せなくなっていた。

FTDIの人に聞いたらマニュアル読めといわれた
http://www.ftdichip.com/Support/Documents/AppNotes/AN_134_FTDI_Drivers_Installation_Guide_for_MAC_OSX.pdf

マニュアル見て気づいたが、自分の環境ではAppleUSBFTDI.kextの場所がおかしい。
このドライバの場所をマニュアルと同じ場所へ移してみた

(command+Rでリカバリーモード起動)
# csrutil disable
(再起動)
$ cd /System/Library/Extensions
$ sudo mv AppleUSBFTDI.kext IOUSBFamily.kext/Contents/PlugIns
(再起動)
(command+Rでリカバリーモード起動)
# csrutil enable
(再起動)

なおった

てことはこれをunloadすればD2XXを有効化できる?

$ sudo kextunload /System/Library/Extensions
$ sudo kextunload FTDIUSBSerialDriver.kext

おお、今度はAppleのFTDIドライバがロードされた。

じゃあそもそもFTDIのドライバはdisableしとこう。

$ sudo mv FTDIUSBSerialDriver.kext FTDIUSBSerialDriver.disabled

で、appleのドライバもアンロードする

$ cd /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns
$ sudo kextunload AppleUSBFTDI.kext

そうするとD2XXプログラムが動いた!

そしてAppleのUSBーFTDIをロードするとシリアルが復旧した。修復完了。

sudo kextload AppleUSBFTDI.kext

その後いろいろやったらシリアルが復旧しなくなった
回復手順は

1. D2XXHelper.kextをdisable
2. csrutil disable@リカバリーモード
3. load FTDI VCP
4. csrutil enable@リカバリーモード
5 再起動

っぽい。