eu-addr2lineが便利
Rolandに使い方を教えてもらったのでメモ。eu-addr2lineは、実行バイナリのアドレスを指定すると、何のソースコードで何行目だったかなどの情報を返してくれる。
$ eu-addr2line -k {addr}
・モジュール対象(オリジナルドライバとかデバッグしたいとき)
$ eu-addr2line -e {module-path.ko} {addr}
もちろん、カーネルコンパイル時にCONFIG_DEBUGINFOをつけておかねばならない。
addrには、直接アドレスを指定するだけでなくて、セクション指定と関数指定ができる。例えば
$ eu-addr2line -k vfs_read+0x13
なら、vfs_read関数から13バイトオフセットのところのコードがC言語で何行目かを教えてくれる。
セクションを指定したい時は、
$ eu-addr2line -e hoge.ko "(.text)+0x11"
とすればいいらしい。
これでBUGメッセージの解析が楽に!