りんけーじ - blog

ℹ️本記事は古いコンテンツを変換して表示しています。

表示が崩れたり、リンクが正しくない可能性があります。ご了承ください。

2016/07/31 03:07 : カーネルデバッグに手を染めてみる(1)

もたもたしてたらFreeBSD 11.0-BETA2が出てしまった。この前から続けて、最後に試したFreeBSD 11.0-BETA1なシステムでiSCSI+zfsがハマる原因を調べる。(一応書いておくと、9.3-RELEASE, 10.1-RELEASE, 10.3-RELEASEのいずれでも発生している。)

もたもたしてたらFreeBSD 11.0-BETA2が出てしまった。この前から続けて、最後に試したFreeBSD 11.0-BETA1なシステムでiSCSI+zfsがハマる原因を調べる。(一応書いておくと、9.3-RELEASE, 10.1-RELEASE, 10.3-RELEASEのいずれでも発生している。)

参考資料

  1. カーネルをビルドする。

# cd /usr/src
# cp sys/amd64/conf/GENERIC sys/amd64/conf/DEBUG
# emacs sys/amd64/conf/DEBUG
<ここでoptions DDBを追加>
# make kernel-toolchain
# make buildkernel KERNCONF=DEBUG
# make installkernel KERNCONF=DEBUG
# reboot

/usr/srcにソースがない人はftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/11.0-BETA1/src.txzあたりから持ってくる。持ってくるときはカーネルのバージョンに気をつけないとひどい目に遭う。(遭った。)

  • デバッガに入れるか確認する。sysctlでenterしてみる。

  • # sysctl debug.kdb.enter=1

    ここでdebug.kdb.enter: 0 -> 0と出る場合はカーネルが正しくビルド、もしくはインストールできていない。無事にddbに入れたらcontで脱出。

  • シリアルケーブルをつなぐ。テスト用機(デバッグされる側)と適当なマシン(デバッグ作業をする側)をシリアルケーブルでつなぐ。接続できたかはcuでチェックする。双方でcu -l /dev/cuau0を実行して、あとは適当にキーを叩いて他方に出ればOK。
  • /boot.config/boot/loader.confを書く。後者はいらないかも。/boot.config:

  • -h

    /boot/loader.conf:

    hint.uart.0.flags="0x90"

    これで、通常は画面に出るメッセージの類がすべてシリアルコンソールに向いた。

  • デバッグ作業マシンでcuを叩いておいて、テスト用機を再起動する。無事に起動時のメッセージが見えればOK。出ないときは……知らない。
  • デバッグ作業マシンからデバッガに入る。cu越しに叩いてみる。

  • # sysctl debug.kdb.enter=1

    無事にローカル上での実行と同じようにddbのコンソールに移ればOK。途中で途切れたりキー入力を受け付けない場合は、きっと/boot/loader.confの設定あたりが怪しい。うまくいったらcontで脱出。

    長くなったので次に続く。