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

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起動時にメモリの初期化コマンドを追加する必要がある。
その方法は調査中。

2013年3月31日日曜日

Flyswatter2 - OpenOCD 0.6.1

TincanTools Flyswatter2 とOpenOCD 0.6.1 によるJTAGデバッグについて

起動コマンドは以下になる
openocd -f scripts/interface/flyswatter2.cfg -f scripts/board/ti_beagleboard.cfg

だが、これはうまく起動できない場合が多い。
実行すると以下のようなエラーメッセージが表示される。


Open On-Chip Debugger 0.6.1 (2012-10-07-10:34)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
RCLK - adaptive
Warn : omap3530.dsp: huge IR length 38
RCLK - adaptive
trst_only separate trst_push_pull
Info : max TCK change to: 30000 kHz
Info : RCLK (adaptive clock speed)
Error: couldn't read enough bytes from FT2232 device (0 < 81)
Error: couldn't read from FT2232
in procedure 'runtest'
Error: JTAG scan chain interrogation failed: all ones
Error: Check JTAG interface, timings, target power, etc.
Error: Trying to use configured scan chain anyway...
Error: couldn't read enough bytes from FT2232 device (0 < 2)
Error: couldn't read from FT2232
Warn : Bypassing JTAG setup events due to errors
RCLK - adaptive
Error: couldn't read enough bytes from FT2232 device (0 < 81)
Error: couldn't read from FT2232


これはJTAG adaptive clockという仕組みがうまくbeagleboardとかみ合わない場合に発生するらしい。
詳しくはTincanToolsの説明を参照

エラーが発生してしまう場合はTincanToolsが公開しているadaptive clockを無効にした設定ファイルomap3530_norclk.cfgを用いる。
ダウンロードした設定ファイルは OpenOCDフォルダ/scripts/target/omap3530_norclk.cfgに保存

この設定ファイルを使って以下のコマンドで起動する
openocd -f scripts/interface/flyswatter2.cfg -f scripts/target/omap3530_norclk.cfg -c "init" -c "reset init"


以下のようなメッセージが表示されたら無事に起動


Open On-Chip Debugger 0.6.1 (2012-10-07-10:34)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
DEPRECATED! use 'adapter_khz' not 'jtag_khz'
adapter speed: 1000 kHz
Warn : omap3530.dsp: huge IR length 38
trst_only separate trst_push_pull
Info : max TCK change to: 30000 kHz
Info : clock speed 1000 kHz
Info : JTAG tap: omap3530.jrc tap/device found: 0x0b7ae02f (mfg: 0x017, part: 0xb7ae, ver: 0x0)
Info : JTAG tap: omap3530.dap enabled
Info : omap3530.cpu: hardware has 6 breakpoints, 2 watchpoints
Error: JTAG-DP STICKY ERROR
Error: MEM_AP_CSW 0x80000042, MEM_AP_TAR 0x54011140
Error: JTAG-DP STICKY ERROR
Error: MEM_AP_CSW 0x80000042, MEM_AP_TAR 0x54011140
Error: JTAG-DP STICKY ERROR
Error: MEM_AP_CSW 0x80000042, MEM_AP_TAR 0x54011140
Error: JTAG-DP STICKY ERROR
Error: MEM_AP_CSW 0x80000042, MEM_AP_TAR 0x54011140
Error: JTAG-DP STICKY ERROR
Error: MEM_AP_CSW 0x80000042, MEM_AP_TAR 0x54011150
Error: JTAG-DP STICKY ERROR
Error: MEM_AP_CSW 0x80000042, MEM_AP_TAR 0x54011150
Error: JTAG-DP STICKY ERROR
Error: MEM_AP_CSW 0x80000042, MEM_AP_TAR 0x540111c0
Error: JTAG-DP STICKY ERROR
Error: MEM_AP_CSW 0x80000042, MEM_AP_TAR 0x540111c0
DEPRECATED! use 'adapter_khz' not 'jtag_khz'
adapter speed: 1000 kHz
Info : JTAG tap: omap3530.jrc tap/device found: 0x0b7ae02f (mfg: 0x017, part: 0xb7ae, ver: 0x0)
Info : JTAG tap: omap3530.dap enabled
Error: cortex_a8_mmu: target not halted
Runtime Error: embedded:startup.tcl:20:
in procedure 'omap3530.cpu'
in procedure 'ocd_bouncer'
at file "embedded:startup.tcl", line 20

Warn : omap3530.cpu: ran after reset and before halt ...
Info : number of cache level 2
Error: cache l2 present :not supported
Error: mpdir not in multiprocessor format
target state: halted
target halted in ARM state due to debug-request, current mode: Supervisor
cpsr: 0xa00001d3 pc: 0x80e88508
MMU: disabled, D-Cache: disabled, I-Cache: enabled



2012年3月27日火曜日

デバッグ実行

作成したwhileループするだけのアプリケーションをEclipseからデバッグ実行する

■手順
(1)OpenOCDを起動
 以前にセットアップしたOpenOCDを起動する
 Eclipseのメニュー「Run」-[External Tools」から「openocd」を選択

(2)Eclipseデバッガ起動設定
 Eclipseのメニュー「Run」-「Debug Configurations」を選択
 左のリストから「GDB Hardware Debugging」を選択して新規作成する

 Application には作成したアプリケーションkernel.elf を選択する


 DebuggerにはG++LiteをインストールしたフォルダにあるGDBを選択する
 OpenOCDはTCPポート3333で動作しているのでPort numberは3333にしておく


 Startupはデフォルトの設定に加えて「monitor reset halt」の記述を追加
 

 以上でデバッグ実行の設定は終わり


(3)ブレークポイントの設定
 ちゃんとブレークするかどうかMain.cpp#main_start()のwhileループにEclipse上からブレークを張る

(4)デバッグ実行
 (2)で設定したデバッグ設定でデバッグ実行を開始





 実行を開始するとブレークした状態で始まる。Debugウィンドウの再生ボタンぽいのを押して実行を継続するとMain.cppのwhileループに張ったブレークポイントまで実行して再度ブレークする

 とりあえずEclipseでソース編集、デバッグ実行するところまで環境が整った

2012年3月14日水曜日

デバッグ準備 - OpenOCD起動

いよいよデバッガを起動させる。
デバッグにはOpenOCDとCode Sourcery G++Liteが必要。

まずEclipseからOpenOCDを起動させる設定を行う
Eclipseメニューの[Run]-[External Tools]-[External Tools Configurations] を選択
Programとして新規項目を作成する







LocationにOpenOCDの実行ファイルを指定する
Working Directoryは適当に。
ArgumentはFlyswatterとBeagleBoardの組み合わせで使用するので以下のようにする

-f interface/flyswatter.cfg -f board/ti_beagleboard.cfg

[Run]ボタンを押して実行したら以下のようなコンソール表示が出たらOK


Open On-Chip Debugger 0.4.0 (2010-02-22-19:05)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.berlios.de/doc/doxygen/bugs.html
RCLK - adaptive
Warn : omap3530.dsp: huge IR length 38
RCLK - adaptive
trst_only separate trst_push_pull
Info : RCLK (adaptive clock speed) not supported - fallback to 1000 kHz
Info : JTAG tap: omap3530.jrc tap/device found: 0x0b7ae02f (mfg: 0x017, part: 0xb7ae, ver: 0x0)
Info : JTAG tap: omap3530.dap enabled
Info : omap3530.cpu: hardware has 6 breakpoints, 2 watchpoints
Error: JTAG-DP STICKY ERROR
Error: MEM_AP_CSW 0x2800042, MEM_AP_TAR 0x54011140
Error: JTAG-DP STICKY ERROR
Error: MEM_AP_CSW 0x2800042, MEM_AP_TAR 0x54011140
Error: JTAG-DP STICKY ERROR
Error: MEM_AP_CSW 0x2800042, MEM_AP_TAR 0x54011140
Error: JTAG-DP STICKY ERROR
Error: MEM_AP_CSW 0x2800042, MEM_AP_TAR 0x54011140
Error: JTAG-DP STICKY ERROR
Error: MEM_AP_CSW 0x2800042, MEM_AP_TAR 0x54011150
Error: JTAG-DP STICKY ERROR
Error: MEM_AP_CSW 0x2800042, MEM_AP_TAR 0x54011150
Error: JTAG-DP STICKY ERROR
Error: MEM_AP_CSW 0x2800042, MEM_AP_TAR 0x540111c0
Error: JTAG-DP STICKY ERROR
Error: MEM_AP_CSW 0x2800042, MEM_AP_TAR 0x540111c0

2012年3月10日土曜日

ドライバのインストール

FlyswatterはPCとUSBで接続。その際にドライバをインストールする必要がある。
ドライバはOpenOCDをインストールしたフォルダにある

C:/Program Files/OpenOCDにインストールしたとすると
C:/Program Files/OpenOCD/0.4.0/drivers/libusb-win32_ft2232_driver-***.zipというのがある。これがドライバ。
これを解凍してドライバインストール画面から選択すればOK

インストールするとデバイスマネージャーで2つのデバイスとして認識される。
USB Serial Converter AとB
このうちUSB Serial Converter Aのドライバを手動で変更する

デバイスマネージャーでUSB Serial Converter Aを選択して「ドライバの更新」→「ドライバを手動で検索してインストール」→「一覧から選択」

ここで、一覧の中から「TinCanTools Flyswatter (Channel A)」を選択してインストールする。

・・・WindowsXPはこれで素直にインストールできるのだがWindows7では出来ない
ドライバに署名がないといわれて怒られる。
仕方ないのでWindows7はテストモードにして署名を回避する。ただし、セキュリティ的に問題ありなのかもしれない・・・

テストモードへはコマンドプロンプト(管理者権限で実行)からのコマンド実行で入れる
bcdedit /set TESTSIGNING ON

テストモードから抜ける場合は
bcdedit /set TESTSIGNING OFF