2017年1月1日日曜日

Mackbook Pro(Late 2016, macOS Sierra 10.12.2)でOpenOCD

新しく今年発売のMacbook Proを購入したのでBeagleBoneをOpenOCDでデバッグする環境を構築

■必要なソフトのインストール
・Xcode, gcc command line tool
 AppStore経由でXcodeのインストール
 command line toolはXcodeのメニューからインストール

・Homebrew
  http://brew.sh/index_ja.html
  上記サイトを見ながらhomebrewをインストールする

・OpenOCD
  ターミナルから brew install openocd
  で依存関係まで含めてインストールされる

■Kernel Extension設定変更
  BeagleBone搭載のデバッガはTI XDS100v2
  これはMacに接続するとUSBデバイス FT2232(vendor id: 0x403, product id: 0x6010)と認識される

   macOS SierraにはFTDIのドライバが標準で入っているらしく接続すると以下4つのTTYデバイスが/dev に作成される

cu.usbserial-TIWD9YJWA
cu.usbserial-TIWD9YJWB
tty.usbserial-TIWD9YJWA
tty.usbserial-TIWD9YJWB

  ただ、この状態だとOpenOCDが接続できない。
  OpenOCDはlibftdi->libusb経由でUSB interface0のXDS100v2に接続しようとするが既にTIWD9YJWAというTTYデバイスとして使用してしまっているからである。

  そこでmacOS Sierraの標準FTDIドライバがinterface0にドライバを適用しないようにする

/System/Library/Extensions/AppleUSBFTDI.kext/Contents/Info.plist の以下の部分を削除する

                <key>AppleUSBEFTDI-6010-0</key>
                <dict>
                        <key>CFBundleIdentifier</key>
                        <string>com.apple.driver.AppleUSBFTDI</string>
                        <key>IOClass</key>
                        <string>AppleUSBFTDI</string>
                        <key>IOProviderClass</key>
                        <string>IOUSBHostInterface</string>
                        <key>InputBuffers</key>
                        <integer>8</integer>
                        <key>OutputBuffers</key>
                        <integer>16</integer>
                        <key>bConfigurationValue</key>
                        <integer>1</integer>
                        <key>bInterfaceNumber</key>
                        <integer>0</integer>
                        <key>idProduct</key>
                        <integer>24592</integer>
                        <key>idVendor</key>
                        <integer>1027</integer>

                </dict>



削除する前に一応 cp Info.plist Info.plist.org とでもしてバックアップを取っておくと良い

ちなみに/System/以下のファイルはSIPを無効にしないとchmodで書き込み権限を付与しても編集できない。
SIPを無効にするにはcommand+Rを押しながら起動または再起動してリカバリーモードから行う
リカバリーモードで起動したらメニューから[ユティリティ]-[ターミナル]を選択し、ターミナルからcsruti disableとする
Info.plist の編集が終わったら再びリカバリーモードから csrutil enableとして保護機能を有効化するのを忘れずに。

■OpenOCD起動
 AppleUSBFTDIのInfo.plistを編集した後に再起動するか、モジュールのunload, loadをするとinterface0のTIWD9YJWAが作成されなくなる。
 この状態でOpenOCDが接続可能となる

 openocd -f board/ti_beaglebone.cfg

 で接続することができる。さらに

 screen /dev/tty.usbserial-TIWD9YJWB 115200

 とすることでinterface1はシリアルUARTでデバイスと通信が可能である。