#freeze
[[FrontPage]]

2009/05/17 からのアクセス回数 &counter;

#contents

** Mac OS Xユーザ固有の悩み [#ge727660]
他でもコメントしていますが、
[[Eclipse/ARMプロセッサによる組み込み開発>http://www.amazon.co.jp/dp/4798115843/]]は、
EclipseとOpenOCDを使ってARMの組み込み開発を説明したすばらしい本ですが、
Mac OS X では、以下の理由でFT2232ベースのJTAGではOpenOCDを使えません。
- LeopardではD2XXドライバとVCP(仮想COMポート)ドライバは同時に使用できないため、FT2232を使ったUSBケーブルはそのままでは正常に動作しません。((動作したというレポートもありますが、手元のUSB2232では動作しませんでした。おそらく VCPを入れていないのではないかと思われます))

そこで、何とかMac OS XでOpenOCDを使えないものかと探したのが、OpenOCDのUSB Blaster版でした。

その前にOpenOCDについて簡単に説明します。

- ARMではJTAGデバッグの方式を公開しており、この情報を使ってすべてのARMプロセッサに共通して使えるOn Chip Debuggerをオープンソースで公開しているのが、OpenOCDです。
- OpenOCDを使ってEclipseからソースレベルでのデバッグができるようになります。

以下に、EclipseからOpenOCDを使ってolimexのSAM7SP256ボードをデバッグしている画面を示します。

&ref(openocd.jpg);

Eclipse上で、ブレークポイントの設定、ソースのトレース、変数の値の表示、スタックトレースができます。

&ref(Usb_Blaster.jpg);

こちらが、デバッグしているターゲットボードSAM7P256とUSB Blasterです。

** USB Blaster対応のOpenOCDの作成 [#fad1af61]
Usb Blaster対応のOpneOCDの記事は、[[kawk: USB JTAG adapter>http://www.ixo.de/info/usb_jtag/]]
を参考にします。

*** ファイルのダウンロード [#b50e4f0a]
必要なファイルは、openocdのパッチファイルとコンフィグファイルです。

- [[kawk: USB JTAG adapter>http://www.ixo.de/info/usb_jtag/]]から、usb_jtag-20080705-1200.zipをダウンロードし、解凍します。
- usb_jtag/host/openocd/&ref(openocd.cfg);, usb_jtag/host/openocd/&ref(openocd.patch);を取り出す

*** openocdのmake [#zabcfcf6]
readmeを参考に、OpenOCDのSVNサイトからRevision 753をチェックアウトします。

#pre{{
$ mkdir ~/local/arm/openocd
$ cd ~/local/arm/openocd
$ svn co -r 753 svn://svn.berlios.de/openocd/trunk openocd-r753
$ cd openocd-r753
}}

次にパッチを適応し、bootstrap, configureを実行した後、makeします。((もし、libftdiライブラリがない旨のエラーがでたら、MacPortでlibftdiをインストールしてください。))

#pre{{
$ patch -p1 < ../openocd.patch
$ ./bootstrap 
$ ./configure  --enable-usb_blaster_libftdi
$ make
$ sudo make install
}}

openocdは、
- /usr/local/bin/openocd

にインストールされ、openocdの設定ファイルは、
- /usr/local/lib/openocd

にインストールされます。

** 動作確認 [#t2880f20]
最後に、できあがったopenocdの動作を確認します。

- USB Blasterをターゲットボードに接続
- USB BlasterをPCに接続
- ターミナル以下のコマンドを実行(コンフィグファイルは直上のディレクトリ置きます)

#pre{{
$ $ openocd -f ../openocd.cfg 
Open On-Chip Debugger 1.0 (2009-04-13-07:33) svn:753M
$URL: svn://svn.berlios.de/openocd/trunk/src/openocd.c $
Debug:   8 0 command.c:438 command_run_line_internal_op(): telnet_port 4444
Debug:   10 0 command.c:438 command_run_line_internal_op(): telnet_port 4444
Debug:   12 0 command.c:438 command_run_line_internal_op(): interface usb_blaster
Debug:   14 0 command.c:438 command_run_line_internal_op(): interface usb_blaster
Debug:   16 0 command.c:438 command_run_line_internal_op(): usb_blaster_vid_pid 0x09fb 0x6001
Debug:   18 0 command.c:438 command_run_line_internal_op(): usb_blaster_vid_pid 0x09fb 0x6001
Debug:   20 0 command.c:438 command_run_line_internal_op(): jtag_device 10 0x155 0x3FF 6
Debug:   22 0 command.c:438 command_run_line_internal_op(): jtag_device 10 0x155 0x3FF 6
Debug:   24 0 command.c:438 command_run_line_internal_op(): init
Debug:   26 0 command.c:438 command_run_line_internal_op(): init
Debug:   27 0 openocd.c:106 handle_init_command(): target init complete
Debug:   28 0 usb_blaster.c:528 usb_blaster_init(): 'usb_blaster' interface using libftdi
Debug:   29 692 usb_blaster.c:633 usb_blaster_init(): current latency timer: 2
Debug:   30 693 usb_blaster.c:254 usb_blaster_speed(): TODO: usb_blaster_speed() isn't optimally 
implemented!
Debug:   31 693 openocd.c:113 handle_init_command(): jtag interface init complete
Debug:   32 693 jtag.c:1551 jtag_init_inner(): Init JTAG chain
Debug:   33 693 jtag.c:340 jtag_call_event_callbacks(): jtag event: JTAG controller reset (TLR or TRST)
Debug:   34 693 jtag.c:1309 jtag_reset_callback(): -
Debug:   35 693 usb_blaster.c:662 usb_blaster_blink(): TODO: usb_blaster_blink() isn't implemented!
Debug:   36 697 jtag.c:340 jtag_call_event_callbacks(): jtag event: JTAG controller reset (TLR or TRST)
Debug:   37 697 jtag.c:1309 jtag_reset_callback(): -
Debug:   38 697 usb_blaster.c:662 usb_blaster_blink(): TODO: usb_blaster_blink() isn't implemented!
Info:    39 1977 jtag.c:1403 jtag_examine_chain(): JTAG device found: 0x3f0f0f0f (Manufacturer: 0x787,
 Part: 0xf0f0, Version: 0x3)
Debug:   40 1977 jtag.c:340 jtag_call_event_callbacks(): jtag event: JTAG controller reset (TLR or TRST)
Debug:   41 1977 jtag.c:1309 jtag_reset_callback(): -
Debug:   42 1977 usb_blaster.c:662 usb_blaster_blink(): TODO: usb_blaster_blink() isn't implemented!
Debug:   43 2010 openocd.c:120 handle_init_command(): jtag init complete
Debug:   44 2010 openocd.c:123 handle_init_command(): jtag examine complete
Debug:   45 2010 openocd.c:130 handle_init_command(): flash init complete
Debug:   46 2010 openocd.c:134 handle_init_command(): NAND init complete
Debug:   47 2010 openocd.c:138 handle_init_command(): pld init complete
Warning: 48 2010 gdb_server.c:2015 gdb_init(): no gdb ports allocated as no target has been specified
}}
ここで、止まります。
 Info:    39 1977 jtag.c:1403 jtag_examine_chain(): JTAG device found: 0x3f0f0f0f (Manufacturer: 0x787,
 Part: 0xf0f0, Version: 0x3)
のようにデバイスを正しく認識できればOKです。

'''残念ながら、USB Blaster対応opneocdでは、デバイスの認識が最初うまくいきません。何度か起動し直してデバイスが認識できるまで繰り返してください。'''

** openocd.cfgの作り方 [#z4e2a531]
通常、openocd.cfgは、

#pre{{
$ cat 使用するJTAGインタフェース.cfg ターゲットボード.cfg > openocd.cfg
}}
のようにJTAGインタフェースのcfgファイルとターゲットボードのcfgファイルを結合して使用します。

例)JTagKeyとSAM7S256ボードの場合、

#pre{{
$ cat /usr/local/lib/openocd/interface/jtagkey.cfg \
   /usr/local/lib/openocd/target/sam7s256.cfg >openocd.cfg
}}

今回のUSB Blasterのcfgファイルは、以下の通りです。

#pre{{
telnet_port 4444
interface usb_blaster
usb_blaster_vid_pid 0x09fb 0x6001
}}

** コメント [#r49fcb44]
この記事は、

#vote(おもしろかった[11],そうでもない[0],わかりずらい[0])

皆様のご意見、ご希望をお待ちしております。
- この方法は、非常に遅いので、[[arm/MacOSXでJTagKey(互換)を使う]]または[[arm/Versaloon対応OpenOCDの作成]]を参考にするとよいです。 -- [[竹本 浩]] &new{2012-04-01 (日) 06:06:37};

#comment_kcaptcha


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc