/var/log/messages

Apr 21, 2014 - 1 minute read - Comments - programming

昨晩の件 (JTAG 接続なソレを書き換えてみる)

何が悪いのか、と言いつつ空き稼動で再度確認してみたところ、C で書いてる kernel_main 手続き先頭にある

void kernel_main(uint32_t r0, uint32_t r1, uint32_t atags) {
    init_gpio();

がコメントアウトされておりませんでした。そりゃ駄目だわな。

とりあえず

JTAG 初期化な bootstrap な手続きができたのでソースを綺麗にして commit を作っておこうと思ってます。

続きがあれば追記するかもしれません。

gdb で云々してみるなど

手順としては

  • openocd 起動
  • gdb に .elf なファイル名を渡して起動
  • target remote localhost:3333
  • 一度 c(ontinue) して Ctrl-c 押下
  • load
  • あとは普通に gdb

ということになっている模様。ヤッてみました。

(gdb) target remote localhost:3333
Remote debugging using localhost:3333
0x00000000 in ?? ()
(gdb) c
Continuing.
WARNING! The target is already running. All changes GDB did to registers will be discarded! Waiting for target to halt.
^C
Program received signal SIGINT, Interrupt.
0x0000809c in rpi_init () at rpi_lib/rpi_init.c:11
11              pinMode(16,OUTPUT);
(gdb) load
Loading section .text, size 0xb24 lma 0x8000
Start address 0x8000, load size 2852
Transfer rate: 22816 bits in <1 sec, 2852 bytes/write.
(gdb) 

ちょっと出力が怪しいですが。で、UNUSED なマクロの所に breakpoint 設定して c してみたのですが最適化されているようで止まらず。

Breakpoint 1, kernel_main (r0=16, r1=1735420271, atags=6402240) at main.c:30

つうか、引数の値が微妙。何が悪いのかな。