APC8750にNetBSD/evbarmを移植するための記録 8/16
NetBSDのバナーが表示されたので、その後もごそごそと作業を続け、comドライバがtimerドライバを読んでpanicするという事象にぶち当たりました。
これはcomドライバがdeleyを呼び、それがtimerドライバにあるのですが、その時点ではtimerドライバが初期化されておらず、softcがnullであることからKASSERTでpanicするというものでした。
それを解決するために、Twitterで教えを乞いながら、delayでsoftcがnullだったらすぐにreturnするようにして、なんとかroot deviceを聞いてくるところまで進みました。
ところが、シリアルコンソールから入力ができない状況です。
なぜかなぁと思い、起動時のメッセージを見てみると、割り込みコントローラよりも先にcomドライバが先にattachされています。root deviceを聞いてくるところでは割り込みモードでcomドライバが動いているはずなので、comドライバの初期化と割り込みコントローラの初期化の順番がまずいんじゃないかと思い、割り込みコントローラ、comドライバ、タイマの順にattachされるようにすればいいんじゃないかと考えました。
実は、これはいろんな意味で間違っていて、ずいぶん後に気付くのですが、そんなことも知らず、ドライバのattachの順番を変えるためにオンボードI/O (obio) ドライバでobio_attach_criticalなどという関数を作って頑張ってしまいました。
その時の様子は、http://www.tokuda.net/diary/0799に書いたとおりです。
まぁ、勘違いしているので当たり前なのですが、頑張って思いどおりのデバイスのattach順序になったものの、comドライバからの入力はまるで動かなかったのでした。
しかしまぁ、そういうところを読んだり実際に動かしたおかげで勉強になったこともたくさんあったので良しとしましょう。
これはcomドライバがdeleyを呼び、それがtimerドライバにあるのですが、その時点ではtimerドライバが初期化されておらず、softcがnullであることからKASSERTでpanicするというものでした。
それを解決するために、Twitterで教えを乞いながら、delayでsoftcがnullだったらすぐにreturnするようにして、なんとかroot deviceを聞いてくるところまで進みました。
ところが、シリアルコンソールから入力ができない状況です。
なぜかなぁと思い、起動時のメッセージを見てみると、割り込みコントローラよりも先にcomドライバが先にattachされています。root deviceを聞いてくるところでは割り込みモードでcomドライバが動いているはずなので、comドライバの初期化と割り込みコントローラの初期化の順番がまずいんじゃないかと思い、割り込みコントローラ、comドライバ、タイマの順にattachされるようにすればいいんじゃないかと考えました。
実は、これはいろんな意味で間違っていて、ずいぶん後に気付くのですが、そんなことも知らず、ドライバのattachの順番を変えるためにオンボードI/O (obio) ドライバでobio_attach_criticalなどという関数を作って頑張ってしまいました。
その時の様子は、http://www.tokuda.net/diary/0799に書いたとおりです。
まぁ、勘違いしているので当たり前なのですが、頑張って思いどおりのデバイスのattach順序になったものの、comドライバからの入力はまるで動かなかったのでした。
しかしまぁ、そういうところを読んだり実際に動かしたおかげで勉強になったこともたくさんあったので良しとしましょう。
コメント(0件)
- TB-URL http://www.tokuda.net/diary/0824/tb/