VIAのデュアルコア Nano X2 U4025搭載 ZBOX nano VD01 (2)
2012/01/20(金) 23:52 NetBSD はてブ情報 はてブに登録 はてブ数

さて、ZBOX nano VD01の起動しない問題、続きです。

IMG_20111226_023902.jpg

によると、pci_make_tagでbad requestだから /src/sys/arch/x86/pci/pci_machdep.cあたりでpanicしているということまではわかります。

では、どういうルートで呼び出されているのか、といえば、デバッガのプロンプトにtraceと打ち込めばよいのですが、USBだからなのかキーボードが使えません。

そんなときには、kernelのconfigファイルに次のような設定をすることで、デバッガに落ちたときに自動的に指定したコマンドを実行することができます。
options DDB_COMMANDONENTER="trace"
で、設定してみました。が、関数呼び出しのネストが深すぎて、一番読みたいpanicする直前の呼び出し関係が流れていってしまいます。

そういうときには、デバッガのコマンドとして trace ,8 と与えると直前の8回分の呼び出しが表示されます。

よーし、というわけで、options DDB_COMMANDONENTER="trace ,8" と設定してkernelをコンパイルしたところ、sys/ddb/db_command.cのdb_cmd_on_enterの___STRING(x)マクロで引数が二つでダメですよ、っていうエラーで進めません。

セミコロンで区切った二つのコマンドは対応しているようなのですが、どうもカンマが入るとダメなようです。

では、”trace \,8"とか"trace \\,8" とかエスケープしたらいいのかと思ったのですが、いずれもうまくコンパイルが通りません。

しかたがないので、先の部分に直接書き込むことにしました。
char db_cmd_on_enter[DB_LINE_MAXLEN + 1] = "trace ,8";
あたりまえですがコンパイルが通り、さて実行です。

IMG_20120108_030437.jpg

src/sys/dev/acpi/acpica/OsdHardware.cのAcpiOsReadPciConfigurationから呼び出しているpci_make_tagで起こっているみたいですね。

あれ? おかしいな。traceはAcpiOsReadPciConfigurationからpci_decompose_tagを呼び出しているように見えます。うーん、pci_decompose_tagにはpanic時に出力しているようなメッセージを出す処理がありません。

デバッガのtraceを表示させてみて、わかったこともありましたが謎も深まりました。

ここまでで2日目。

1: thatsdone 2012年01月20日(金) 深夜0時08分

NetBSDの linkage ってどうなってんでしたっけ? linux とかだと、http://thatsdone.blogspot.com/2007/04/linux-kernel-linkage.html に書いたような理由で stack trace にゴミが出るのですが、似た感じかしら?呼び出し元が見つからなければ、さらに戻って探してみてもないすかね?

2: tokuda 2012年01月21日(土) 午後9時15分

英語嫌い! なんか、この写真ではそうなってますけど、ちゃんとpci_make_tagで出力されたりもしてます。全体としてはうまくいったので気にしないことにした!


名前:  非公開コメント   

  • TB-URL  http://www.tokuda.net/diary/0763/tb/