ラベル BeagleBone の投稿を表示しています。 すべての投稿を表示
ラベル BeagleBone の投稿を表示しています。 すべての投稿を表示

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でデバイスと通信が可能である。

2014年6月15日日曜日

Beagle Boneのデバッグ

■openocd 0.7.0
openocd -f scripts/board/ti_beaglebone.cfg -c "init" -c "reset init" -c "arm core_state arm"

上記コマンドでopenocdが接続できる。
最後のコマンドはThumbモードからARMモードにするだけなので無くてもいい。

接続できない場合はopenocd ドライバフォルダにあるftdi2232ドライバのインストールをまず行う。
ドライバは自動認識しないので手動インストールでopenocdドライバフォルダにあるinfファイルを選択し、texas instrument xds100v2を選択してインストールする。

上記の方法でgdbからデバッグできるが、それには前提がある。
それはBeagleBone付属のSDカードからブートした後である。
ただしLinuxは起動してはいけない。

U-Bootが起動してLinuxロードの前にキー操作をしてU-Bootコンソールの状態に止めておく。


■gdb
Eclipseでgdbを使ってHardware Debuggingを行う際の注意。
Window-Preference-Run/Debug-Launching-Default Launchers-GDB Hardware Debuggingの設定
Eclipseのバージョンによってはこの設定がGDB(DSF) Hardware Debugging Launcherになっている。
しかしOpenOCD-gdbでデバッグする場合はLegacy GDB Hardware Debugging Launcherの設定でないとうまく動作しない。

■おまけ
U-Bootコンソールの起動を待ってからデバッグする理由
最初はDDRの初期化が行われていない。
したがってデバッグするプログラムをメモリにロードできないからである。
それでもロードしようとすると jtag-dap sticky error が発生する。

SDカードでのブートなしにロードしようとする場合はopenocd起動時にメモリの初期化コマンドを追加する必要がある。
その方法は調査中。