2009/05/17 からのアクセス回数 12886 Mac OS Xユーザ固有の悩み †他でもコメントしていますが、 Eclipse/ARMプロセッサによる組み込み開発は、 EclipseとOpenOCDを使ってARMの組み込み開発を説明したすばらしい本ですが、 Mac OS X では、以下の理由でFT2232ベースのJTAGではOpenOCDを使えません。
そこで、何とかMac OS XでOpenOCDを使えないものかと探したのが、OpenOCDのUSB Blaster版でした。 その前にOpenOCDについて簡単に説明します。
以下に、EclipseからOpenOCDを使ってolimexのSAM7SP256ボードをデバッグしている画面を示します。 Eclipse上で、ブレークポイントの設定、ソースのトレース、変数の値の表示、スタックトレースができます。 こちらが、デバッグしているターゲットボードSAM7P256とUSB Blasterです。 USB Blaster対応のOpenOCDの作成 †Usb Blaster対応のOpneOCDの記事は、kawk: USB JTAG adapter を参考にします。 ファイルのダウンロード †必要なファイルは、openocdのパッチファイルとコンフィグファイルです。
openocdのmake †readmeを参考に、OpenOCDのSVNサイトからRevision 753をチェックアウトします。 $ 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します。*2 $ patch -p1 < ../openocd.patch $ ./bootstrap $ ./configure --enable-usb_blaster_libftdi $ make $ sudo make install openocdは、
にインストールされ、openocdの設定ファイルは、
にインストールされます。 動作確認 †最後に、できあがったopenocdの動作を確認します。
$ $ 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の作り方 †通常、openocd.cfgは、 $ cat 使用するJTAGインタフェース.cfg ターゲットボード.cfg > openocd.cfg のようにJTAGインタフェースのcfgファイルとターゲットボードのcfgファイルを結合して使用します。 例)JTagKeyとSAM7S256ボードの場合、 $ cat /usr/local/lib/openocd/interface/jtagkey.cfg \ /usr/local/lib/openocd/target/sam7s256.cfg >openocd.cfg 今回のUSB Blasterのcfgファイルは、以下の通りです。 telnet_port 4444 interface usb_blaster usb_blaster_vid_pid 0x09fb 0x6001 コメント †この記事は、 皆様のご意見、ご希望をお待ちしております。
Tweet |