進んではいる

zbsdmodのlinux 2.6.26用バイナリはできたが起動しないというところから。

日曜編。

  • とりあえずzbsdmodにprintf()ならぬprintk()を大量投入し、どこまで動作できているのか確認
  • NetBSDカーネルをメモリに配置している途中でフリーズしていることが判明、つまり原因はzbsdmod側
  • 何度か試すとどうも大体同じようなアドレスにコピーするとことで固まる
  • Linux側が使用中のメモリアドレスにぶち込んだから? と予想しモジュールを取っぱらって再挑戦
  • 目論見通りさっきまでフリーズを起こしていた付近のアドレスも無事にコピーされるように、ただししばらく進んだところで結局固まる
  • ところでNetBSDカーネルPA/VAがそれぞれ0xa0200000/0xc0200000と中途半端なアドレスなのはLinuxカーネル側との衝突を避けるため?
  • ただし元々C3000系の純正カーネルは2.4.20だから2.6.26相手だと不足になっているとか?
  • …じゃPA/VAを0xa0400000/0xc0400000にずらしてみよう
  • お、さらにコピーがすすんだ、けどまだ止まる
  • じゃあ再度モジュール全開放で
  • コピー完了できた!
  • でもなにも起きねぇ! NetBSD側に制御が移ったんならシリアルに反応くらいあってもよさそうなのになぁ

本日。

  • NetBSD側に制御が移っているか確認してみよう
  • 一番最初に実行されるのはstart_zaurus.Sみたいなので、ここにシリアル側へ落書きするコードを入れる
  • お、落書きがシリアルに出力された。ということはzbsdmodは正しく制御を移すことに成功しているわけだ
  • ということでNetBSD側のロジックを追いかけてみる
  • げ、initarm()がPA=0xa0200000前提のコードになってやがる orz