蟹さんのJTAG

RTL8196Cでopenocd 0.10.0を試してみた。

bootのGPIOの処理はすべて外してJTAGが使えるようにしてあります。

ターゲットの某有線ルーターV2はR366からR341の0ΩでGPIOの接続になっているので、これを全て外しました。

0.10.0のソースにはLexraのコメントもあるので、対応は入っていて、まったく動いていないわけではないが、pcが拾えないなど不完全な様です。

```
bash-3.2$ ./openocd -f ft232h.cfg -f rlx4181.cfg 
Open On-Chip Debugger 0.10.0
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
adapter speed: 15000 kHz
adapter_nsrst_delay: 100
Info : auto-selecting first available session transport "jtag". To override use 
'transport select <transport>'.
jtag_ntrst_delay: 100
trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain connect_de
assert_srst
rlx4181.cpu
Info : ftdi: if you experience problems at higher adapter clocks, try the comman
d "ftdi_tdo_sample_edge falling"
Info : clock speed 15000 kHz
Info : JTAG tap: rlx4181.cpu tap/device found: 0x1438000d (mfg: 0x006 (Harris), 
part: 0x4380, ver: 0x1)
Info : accepting 'telnet' connection on tcp/4444
target halted in MIPS32 mode due to debug-request, pc: 0x00000000
===== mips32 registers
(0) r0 (/32): 0x00000000
(1) r1 (/32): 0x1000FC01
(2) r2 (/32): 0x00000060
(3) r3 (/32): 0xB8002014
(4) r4 (/32): 0x80420E9C
(5) r5 (/32): 0x00000080
(6) r6 (/32): 0x00000001
(7) r7 (/32): 0x00000000
(8) r8 (/32): 0x00000000
(9) r9 (/32): 0x80410000
(10) r10 (/32): 0x80410000
(11) r11 (/32): 0x0000009C
(12) r12 (/32): 0x1FFFFFFF
(13) r13 (/32): 0xFFFF9000
(14) r14 (/32): 0x00000000
(15) r15 (/32): 0x8040E71C
(16) r16 (/32): 0x00000005
(17) r17 (/32): 0x00000005
(18) r18 (/32): 0x00000000
(19) r19 (/32): 0x80420E9C
(20) r20 (/32): 0x00000001
(21) r21 (/32): 0x00000008
(22) r22 (/32): 0x00000020
(23) r23 (/32): 0x00000080
(24) r24 (/32): 0x00000004
(25) r25 (/32): 0x00000000
(26) r26 (/32): 0x80402EAC
(27) r27 (/32): 0x80420E54
(28) r28 (/32): 0x8041F014
(29) r29 (/32): 0x80420E54
(30) r30 (/32): 0xFFFFFFFF
(31) r31 (/32): 0x80403610
(32) status (/32): 0x1000FC01
(33) lo (/32): 0x00000002
(34) hi (/32): 0x00000008
(35) badvaddr (/32): 0x00000000
(36) cause (/32): 0x00001000
(37) pc (/32): 0x00000000
(38) f0 (/32): 0x00000000
(39) f1 (/32): 0x00000000
(40) f2 (/32): 0x00000000
(41) f3 (/32): 0x00000000
(42) f4 (/32): 0x00000000
(43) f5 (/32): 0x00000000
(44) f6 (/32): 0x00000000
(45) f7 (/32): 0x00000000
(46) f8 (/32): 0x00000000
(47) f9 (/32): 0x00000000
(48) f10 (/32): 0x00000000
(49) f11 (/32): 0x00000000
(50) f12 (/32): 0x00000000
(51) f13 (/32): 0x00000000
(52) f14 (/32): 0x00000000
(53) f15 (/32): 0x00000000
(54) f16 (/32): 0x00000000
(55) f17 (/32): 0x00000000
(56) f18 (/32): 0x00000000
(57) f19 (/32): 0x00000000
(58) f20 (/32): 0x00000000
(59) f21 (/32): 0x00000000
(60) f22 (/32): 0x00000000
(61) f23 (/32): 0x00000000
(62) f24 (/32): 0x00000000
(63) f25 (/32): 0x00000000
(64) f26 (/32): 0x00000000
(65) f27 (/32): 0x00000000
(66) f28 (/32): 0x00000000
(67) f29 (/32): 0x00000000
(68) f30 (/32): 0x00000000
(69) f31 (/32): 0x00000000
(70) fcsr (/32): 0x00000000
(71) fir (/32): 0x00000000
```

RTL8198でも試してみた。カーネルがJTAGピンをGPIOかUARTにしているようで、とりあえずbootで止めてアクセスしてみた。こちらも同様です。

```
bash-3.2$ ./openocd -f ft232h.cfg -f rtl8198.cfg 
Open On-Chip Debugger 0.10.0
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
adapter speed: 15000 kHz
adapter_nsrst_delay: 100
Info : auto-selecting first available session transport "jtag". To override use 
'transport select <transport>'.
jtag_ntrst_delay: 100
trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain connect_de
assert_srst
rtl8198.cpu
Info : ftdi: if you experience problems at higher adapter clocks, try the comman
d "ftdi_tdo_sample_edge falling"
Info : clock speed 15000 kHz
Info : JTAG tap: rtl8198.cpu tap/device found: 0x1528100d (mfg: 0x006 (Harris), 
part: 0x5281, ver: 0x1)
Info : accepting 'telnet' connection on tcp/4444
target halted in MIPS32 mode due to debug-request, pc: 0x00000000
===== mips32 registers
(0) r0 (/32): 0x00000000
(1) r1 (/32): 0x1000FC01
(2) r2 (/32): 0x00000060
(3) r3 (/32): 0xB8002014
(4) r4 (/32): 0x00000000
(5) r5 (/32): 0xB8002014
(6) r6 (/32): 0x00000001
(7) r7 (/32): 0x80424F2C
(8) r8 (/32): 0x00000000
(9) r9 (/32): 0x1FFFFFFF
(10) r10 (/32): 0x80410000
(11) r11 (/32): 0x1FFFFFFF
(12) r12 (/32): 0x80410000
(13) r13 (/32): 0x804126E0
(14) r14 (/32): 0x804126E0
(15) r15 (/32): 0x804126F8
(16) r16 (/32): 0x80424EAF
(17) r17 (/32): 0x00000000
(18) r18 (/32): 0x00000003
(19) r19 (/32): 0x80411870
(20) r20 (/32): 0x00000001
(21) r21 (/32): 0x00000080
(22) r22 (/32): 0x80424EAC
(23) r23 (/32): 0xFFFFFFFF
(24) r24 (/32): 0x00000004
(25) r25 (/32): 0x1FFFFFFF
(26) r26 (/32): 0x804031F4
(27) r27 (/32): 0x80424E6C
(28) r28 (/32): 0x80423004
(29) r29 (/32): 0x80424E6C
(30) r30 (/32): 0xFFFFFFFF
(31) r31 (/32): 0x80403708
(32) status (/32): 0x1000FC01
(33) lo (/32): 0x00000681
(34) hi (/32): 0x00000000
(35) badvaddr (/32): 0x00000000
(36) cause (/32): 0x00001000
(37) pc (/32): 0x00000000
(38) f0 (/32): 0x00000000
(39) f1 (/32): 0x00000000
(40) f2 (/32): 0x00000000
(41) f3 (/32): 0x00000000
(42) f4 (/32): 0x00000000
(43) f5 (/32): 0x00000000
(44) f6 (/32): 0x00000000
(45) f7 (/32): 0x00000000
(46) f8 (/32): 0x00000000
(47) f9 (/32): 0x00000000
(48) f10 (/32): 0x00000000
(49) f11 (/32): 0x00000000
(50) f12 (/32): 0x00000000
(51) f13 (/32): 0x00000000
(52) f14 (/32): 0x00000000
(53) f15 (/32): 0x00000000
(54) f16 (/32): 0x00000000
(55) f17 (/32): 0x00000000
(56) f18 (/32): 0x00000000
(57) f19 (/32): 0x00000000
(58) f20 (/32): 0x00000000
(59) f21 (/32): 0x00000000
(60) f22 (/32): 0x00000000
(61) f23 (/32): 0x00000000
(62) f24 (/32): 0x00000000
(63) f25 (/32): 0x00000000
(64) f26 (/32): 0x00000000
(65) f27 (/32): 0x00000000
(66) f28 (/32): 0x00000000
(67) f29 (/32): 0x00000000
(68) f30 (/32): 0x00000000
(69) f31 (/32): 0x00000000
(70) fcsr (/32): 0x00000000
(71) fir (/32): 0x00000000
```

ちょっと直せば使えるようになるような気もします。

openocdはarmのサポートがメインでmipsはおまけくらいな感じなので、他力本願で待っていても直らないかもしれません。