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再起動

2013年1月26日土曜日

[番外編] メールサーバ構築

■postfixによるSMTPサーバ(CentOS)
(1)インストール
   yum install postfix

(2)動作設定
    /etc/postfix/main.cf

設定項目 内容
ホスト名 myhostname = [自分のホスト名]
ドメイン名設定 mydomain = [自分のドメイン名]
メール送信先 myorigin = $myhostname
メール受信設定 inet_interfaces = all
メールの最終目的地 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
リレー許可ドメイン relay_domains = $mydestination
メール保存先 home_mailbox = Maildir/

(3)ポート設定
   25番ポート空ける

(4)alias設定
 postmaster, webmaster等の特別アカウントへのメールは通常rootに転送される
 これを本来のwebmasterユーザーで受信したい場合の設定

  /etc/aliases の以下の記述をコメントアウト
     webmaster: root

  newaliases コマンドで反映

(5)MTA(Message Transfer Agent)確認&切り替え
 複数のメール配信ソフトがインストールされている場合に行う。
  確認: alternatives --display mta
  変更: alternatives --config mta

(6)起動
   /etc/init.d/postfix start

■dovecotによるPOP3、IMAPサーバ構築
(1)インストール
   yum install dovecot

(2)動作設定
    /etc/dovecot/conf.d/10-main.cf
    /etc/dovecot/conf.d/auth-system.cf

(3)ポート設定
   110番ポート空ける

(4)起動
   /etc/init.d/dovecot start

2012年8月10日金曜日

ターミナル入力・・・・UART+MMU+割り込み(2)

続き。

■仮想メモリ割り当て
設計したメモリマップにしたがって固定のページテーブルを作成する


■割り込み初期化手順
(1)CPUのIRQ割り込みハンドラを登録
(2)CPUの割り込み有効化
 asm ("cpsie i"); でIRQ有効化

(3)UARTにクロック供給
(4)UARTのIRQハンドラを登録
(5)UARTのIRQ出力有効化
 受信割り込みのみ有効化する。
  OMAP3530仕様書の2693ページ 17.6.1 UART/IrDA/CIRレジスタ IER_REGを参照
  IER_REGに1(RHR_ITビット)を書き込み

■割り込みハンドラ
IRQハンドラだけ作成
IRQ以外の割り込みは使用しないのでnop
ハンドラではレジスタをスタックに保存してIRQ処理に飛ぶ

.extern interruptHandler
.global interruptVector

_irq_entry:
    stmfd sp!, {r0 - r12, lr};

    mov r0, #6;
    bl interruptHandler;

    ldmfd sp!, {r0 - r12, lr};
    subs pc, lr, #4;

interruptVector:
    nop;    // Reset
    nop;    // Invalid code
    nop;     // Software Service.
    nop;     // Prefetch Abort
    nop;    // Data Abort
    nop;
    ldr pc, =_irq_entry;
    nop;    // Fast IRQ

■UART割り込みハンドラ
 UARTドライバの割り込みハンドラでは割り込み時にRHRから1文字読み取ってバッファに記録

■サンプル
ソースコード