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年5月14日火曜日

ビルド環境移行 - clang準備

CodeSourcery のgcc環境からclangへ乗り換えを検討する。


■Clangダウンロード
  LLVMのClangサイトから最新版Ver. 3.2のダウンロード
 Experimental Clang Binaries for Mingw32/x86が対象ファイル


■準備
  まずClangを動作させるのに必要なMinGWをインストールする。

 注意すべきは必ずC:/MinGWにインストールすること。
 現状のMinGW版Clangは上記フォルダにMinGWがあることがハードコードされている。

  次にClangが使うgccのライブラリの準備
 現状Clang Ver. 3.2のWindowsビルドがサポートしているgccライブラリのバージョンは以下の通り
 4.3.0, 4.4.0, 4.5.0, 4.5.2, 4.6.1, 4.6.2
 
 これはclangのソースコード /clang/lib/Frontend/InitHeaderSearch.cpp L400あたりにハードコードされている。
  そこでMsysプロンプトから以下のコマンドを実行して該当バージョンのgccインストール

 mingw-get install gcc=4.6.2-1
 mingw-get install g++=4.6.2-1

 既に4.7.0とかがインストールされていてエラーになってしまった場合は下記

 mingw-get upgrade gcc=4.6.2-1
 mingw-get upgrade g++=4.6.2-1


■インストール

 ダウンロードしたClangのファイル一式を適当な場所に展開するだけ。
 /binフォルダにパスを通しておく

 以下コマンドで動作確認

  clang --version

clang version 3.2 (tags/RELEASE_32/final)
Target: i686-w64-mingw32
Thread model: posix

と出たらインストール成功

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



2013年1月29日火曜日

[番外編] Tomcat SSL通信

■Tomcat7でSSL通信
(1)SSLサーバ証明書要求
  ・秘密鍵生成
  openssl genrsa -des3 -out [秘密鍵ファイル名] 4096

 ・CSR生成
  openssl req -new -key [秘密鍵ファイル名] -out [出力CSRファイル名.csr]

(2)サーバ証明書発行依頼
 ・エンジョイSSLを使用。
   http://www.e-ssldirect.com/product/rapidssl.php

 ・CSRをテキスト表示して申込フォームに貼り付け
    openssl req -noout -text -in [CSRファイル名]

(3)証明書受取
   指定した管理者メールアドレス(例えば webmaster@ホスト名)でメールを受け取れるようにする
 一時的にでOK

 受け取ったメールアドレスに発行するためのURLが書いてあるのでそのページを見る
 そうすると審査が完了して証明書が発行される。

 見に行ったページにサーバ証明書、中間CA証明書が書いてあるのでコピーして保存

(4)証明書ファイル作成
  サーバ証明書、中間CA証明書、秘密鍵を1つにまとめたPKCS12形式ファイルを作成
 openssl pkcs12 -export -in [サーバ証明書ファイル] -inkey [秘密鍵] -certfile [中間CA証明書] -out [出力ファイル]

  PEM形式にしたい場合
  openssl pkcs12 -in [上記出力ファイル] -out [ファイル名.pem]

(5)Tomcat設定
   [Tomcat Dir]/conf/server.xml

   <Connector
       port="443"
       protocol="HTTP/1.1"
       scheme="https"
       secure="true"
       keystoreFile="[PKCS12形式のキーストアファイル]"
       keystorePass="[キーストアパスワード]"
       keystoreType="PKCS12"
   />

(6) 443ポート空け

(7)Tomcat再起動