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 再起動
っぽい。