玄箱でNetBSDを動かす NetBSD-evbppc

NetBSD/evbppc化計画(仮)

(このページの最終更新日: 2007-10-21)

まだ中身はあまり有りません。

目標

  • NetBSD/sandpointの存続自体が危うい?らしいので、NetBSD/evbppcへ早期に移行する。
  • sandpointとのコード分離をはかり、独立性を高めることでcommitをしやすくする。

作業手順

  1. NetBSD/sandpointをNetBSD/evbppc配下にする。(arch/evbppc/sandpoint/*)
  2. arch/evbppc/sandpointを基にarch/evbppc/kuroboxを作成する。NetBSD/sandpointに当てたパッチも当てなおす。
  3. コンパイル、リンク、テストする。
  4. "#ifdef KUROBOX"を出来るだけ排除する。arch/evbppc/kurobox以下からは全て排除する。
  5. コンパイル、リンク、テストする。

課題

  1. MDな一部のユーザランドプログラムの扱い(fdisk,disklabel他)
  2. disklabel周辺の問題(配置、DOS MBR) → "COMPAT_DOS_MBR"(仮称)で分ける
  3. LKMが無効になっている → とりあえず追加してみる。

現状のパッチ

このあたりにまとめてあります。

sandpointからの移行の際の注意

  • 各デバイスのMajor番号が変わっているため、/devの下を作り変える必要がある。
    • USBメモリやお試しパックを使ってブートしてから sh MAKEDEV allを行うことになる。
    • evbppc用のMAKEDEVはここ
  • その他ユーザランドに変更は無いので、sandpointのものをそのまま使用可能。

雑記

  • ISA関連は排除する。
  • MBRとdisklabelはUSBなデバイスが使えるarchが増えてきていることから、機器依存では無く、より汎用的な手段を模索する。
    • USBメモリを挿して認識してもこれが原因で使えないのは情けないので。

作業経過

  • 一通り移動。sandpoint/SANDPOINTの名前も関数や変数、defineから排除。
  • コンパイル&リンク終了。
  • ブートしたところ、PCIのDMAアロケートでパニック。
  • オブジェクト簡易比較法(*)によりオブジェクト比較。違いが有ったのは以下の7つ。
    • autoconf.o
    • bus_dma.o
    • extintr.o
    • locore.o
    • openpic.o
    • machdep.o
    • subr_autoconf.o
  • (* 簡易比較法: 通常比較が難しい*.o同士を比較するために良く使っている方法。比較したい双方をディスアセンブルし、その結果を*.sとして比較する。タイムスタンプ等、コンパイル時の情報が含まれる場合でもそれを排除できる利点が有る。関数が増減した場合等、全体のアドレスがずれる場合の比較には問題が有る。)

  • 構造体のメンバ(関数ポインタ)の初期化漏れ有り。evbppcに移行した時の見落とし。
    • struct powerpc_bus_dma_tag中の_dma_phys_to_bus_memと_dma_bus_mem_to_phys。
    • 各々、_bus_dma_phys_to_bus_mem_generic, _bus_dma_bus_mem_to_phys_genericを入れる。
    • 対象はkurobox/pci/pci_machdep.c, sandpoint/pci/pci_machdep.c, sandpoint/isa/isadma_machdep.cの3ファイル。

  • 修正してブートしたが、PCIの割り込みが正常に入らず。
    • extintrとopenpicが問題。OPENPIC_SRC_VECTORの定義が読まれていなかった。
      • evbppc/include/openpic.hに小細工。

  • ブートしたが、ディスク(wd0)が正常にマウント出来ず。
    • これはたぶんsandpoint用に作ったデバイスノードがevbppcと合わないため。あとで変更してチェックする。

  • (カーネルは(たぶん)作業終了)
    • 一つ残っていた。ブートフラグの受け渡しが失敗している。
    • と思ったけれど、これもデバイスノードのmajorが異なるためのようだ。
      • evbppcではwdはblock 10。一方sandpointではblock 0。
      • sdは両方とも4なので、sdで誤魔化してテストする。
MYBOX# uname -a
NetBSD MYBOX 3.0 NetBSD 3.0 (KUROBOX) #3: Mon Jul 24 22:37:58 JST 2006  root@KU
RO-BOX:/mnt/move/usr/src/sys/arch/evbppc/compile/KUROBOX evbppc
MYBOX#
  • 一応OK。

パッチ整理

  • sandpoint用パッチ(20060417.NetBSD-3.diff.bz2)の中身は以下のとおり。
sys/arch/powerpc/oea/cpu_subr.c
sys/arch/sandpoint/conf/GENERIC.KUROBOX
sys/arch/sandpoint/conf/files.kurobox
sys/arch/sandpoint/conf/majors.sandpoint
sys/arch/sandpoint/conf/std.kurobox
sys/arch/sandpoint/include/disklabel.h
sys/arch/sandpoint/include/intr.h
sys/arch/sandpoint/include/openpicreg.h
sys/arch/sandpoint/kurobox/dev/com_eumb.c
sys/arch/sandpoint/kurobox/dev/eumb.c
sys/arch/sandpoint/kurobox/dev/eumbvar.h
sys/arch/sandpoint/kurobox/dev/ociic_eumb.c
sys/arch/sandpoint/kurobox/dev/ociicreg.h
sys/arch/sandpoint/pci/pchb.c
sys/arch/sandpoint/pci/pci_machdep.c
sys/arch/sandpoint/sandpoint/autoconf.c
sys/arch/sandpoint/sandpoint/disksubr.c
sys/arch/sandpoint/sandpoint/extintr.c
sys/arch/sandpoint/sandpoint/locore.S
sys/arch/sandpoint/sandpoint/machdep.c
sys/arch/sandpoint/sandpoint/mainbus.c
sys/dev/i2c/files.i2c
sys/dev/i2c/rs5c372.c
sys/dev/i2c/rs5c372reg.h
sys/dev/ic/rtl8169.c
sys/dev/pci/if_re_pci.c
sys/dev/scsipi/sd.c
(sys/dev/usb/files.usb)
(sys/dev/usb/if_ural.c)
(sys/dev/usb/if_uralreg.h)
(sys/dev/usb/if_uralvar.h)
(sys/dev/usb/usbdevs)
(sys/dev/usb/usbdevs.h)
(sys/dev/usb/usbdevs_data.h)
sys/ufs/ext2fs/ext2fs_vfsops.c
  • 上記の中で共用しているものは以下のとおり。(*)を付けたものは必須では無い。
sys/arch/powerpc/oea/cpu_subr.c
sys/dev/i2c/files.i2c
sys/dev/i2c/rs5c372.c
sys/dev/i2c/rs5c372reg.h
sys/dev/ic/rtl8169.c
sys/dev/pci/if_re_pci.c
sys/dev/scsipi/sd.c (*)
sys/ufs/ext2fs/ext2fs_vfsops.c (*)
  • sandpointオリジナルをevbppcに移動するパッチ(sandpoint-evbppc.3_0.diff.bz2)の中身は以下のとおり。(@)はkuroboxパッチと共用する予定のもの。
sys/arch/evbppc/conf/Makefile.sandpoint.inc
sys/arch/evbppc/conf/SANDPOINT
sys/arch/evbppc/conf/SANDPOINT.X2
sys/arch/evbppc/conf/SANDPOINT.generic
sys/arch/evbppc/conf/files.sandpoint
sys/arch/evbppc/conf/std.sandpoint
sys/arch/evbppc/include/bootinfo.h (@)
sys/arch/evbppc/include/cpu.h (@)
sys/arch/evbppc/include/darwin_machdep.h (@)
sys/arch/evbppc/include/isa_machdep.h
sys/arch/evbppc/include/isapnp_machdep.h
sys/arch/evbppc/include/kgdb.h (@)
sys/arch/evbppc/include/openpicreg.h (@)
sys/arch/evbppc/include/sandpoint.h
sys/arch/evbppc/include/spkr.h
sys/arch/evbppc/sandpoint/autoconf.c
sys/arch/evbppc/sandpoint/clock.c
sys/arch/evbppc/sandpoint/disksubr.c
sys/arch/evbppc/sandpoint/extintr.c
sys/arch/evbppc/sandpoint/isa/icu.h
sys/arch/evbppc/sandpoint/isa/isa_machdep.c
sys/arch/evbppc/sandpoint/isa/isaclock.c
sys/arch/evbppc/sandpoint/isa/isadma_machdep.c
sys/arch/evbppc/sandpoint/isa/nvram.h
sys/arch/evbppc/sandpoint/isa/spkrreg.h
sys/arch/evbppc/sandpoint/kgdb_glue.c
sys/arch/evbppc/sandpoint/locore.S
sys/arch/evbppc/sandpoint/machdep.c
sys/arch/evbppc/sandpoint/mainbus.c
sys/arch/evbppc/sandpoint/pci/pchb.c
sys/arch/evbppc/sandpoint/pci/pci_machdep.c
sys/arch/evbppc/sandpoint/pci/pci_machdep.h
sys/arch/evbppc/sandpoint/pci/pcib.c
sys/arch/evbppc/sandpoint/sandpoint_intr.h
  • 追加で修正が必要だったものは以下。
sys/dev/isa/fd.c
  • 現状のsys/arch/evbppc/kurobox以下は次のとおり。
sys/arch/evbppc/kurobox/pci/pchb.c
sys/arch/evbppc/kurobox/pci/pci_machdep.c
sys/arch/evbppc/kurobox/pci/pci_machdep.h
sys/arch/evbppc/kurobox/disksubr.c
sys/arch/evbppc/kurobox/extintr.c
sys/arch/evbppc/kurobox/kgdb_glue.c
sys/arch/evbppc/kurobox/locore.S
sys/arch/evbppc/kurobox/machdep.c
sys/arch/evbppc/kurobox/mainbus.c
sys/arch/evbppc/kurobox/autoconf.c
sys/arch/evbppc/kurobox/dev/com_eumb.c
sys/arch/evbppc/kurobox/dev/eumb.c
sys/arch/evbppc/kurobox/dev/eumbvar.h
sys/arch/evbppc/kurobox/dev/ociic_eumb.c
sys/arch/evbppc/kurobox/dev/ociicreg.h
sys/arch/evbppc/kurobox/clock.c
sys/arch/evbppc/kurobox/kurobox_intr.h
  • evbppc/include以下でkurobox関係として追加したのは以下。
sys/arch/evbppc/include/kurobox.h
  • evbppc/include以下で修正したのは以下。
sys/arch/evbppc/include/disklabel.h
  • evbppc/conf以下でkurobox関係として追加したのは以下。
sys/arch/evbppc/conf/KUROBOX
sys/arch/evbppc/conf/Makefile.kurobox.inc
sys/arch/evbppc/conf/files.kurobox
sys/arch/evbppc/conf/std.kurobox
  • これらを合わせ、次のファイルが含まれるパッチが出来ればよい。
sys/arch/evbppc/conf/KUROBOX
sys/arch/evbppc/conf/Makefile.kurobox.inc
sys/arch/evbppc/conf/files.kurobox
sys/arch/evbppc/conf/std.kurobox
sys/arch/evbppc/include/bootinfo.h (@)
sys/arch/evbppc/include/cpu.h (@)
sys/arch/evbppc/include/darwin_machdep.h (@)
sys/arch/evbppc/include/disklabel.h
sys/arch/evbppc/include/kgdb.h (@)
sys/arch/evbppc/include/kurobox.h
sys/arch/evbppc/include/openpicreg.h (@)
sys/arch/evbppc/kurobox/pci/pchb.c
sys/arch/evbppc/kurobox/pci/pci_machdep.c
sys/arch/evbppc/kurobox/pci/pci_machdep.h
sys/arch/evbppc/kurobox/disksubr.c
sys/arch/evbppc/kurobox/extintr.c
sys/arch/evbppc/kurobox/kgdb_glue.c
sys/arch/evbppc/kurobox/locore.S
sys/arch/evbppc/kurobox/machdep.c
sys/arch/evbppc/kurobox/mainbus.c
sys/arch/evbppc/kurobox/autoconf.c
sys/arch/evbppc/kurobox/dev/com_eumb.c
sys/arch/evbppc/kurobox/dev/eumb.c
sys/arch/evbppc/kurobox/dev/eumbvar.h
sys/arch/evbppc/kurobox/dev/ociic_eumb.c
sys/arch/evbppc/kurobox/dev/ociicreg.h
sys/arch/evbppc/kurobox/clock.c
sys/arch/evbppc/kurobox/kurobox_intr.h
sys/arch/powerpc/oea/cpu_subr.c
sys/dev/i2c/files.i2c
sys/dev/i2c/rs5c372.c
sys/dev/i2c/rs5c372reg.h
sys/dev/ic/rtl8169.c
sys/dev/pci/if_re_pci.c
sys/dev/scsipi/sd.c (*)
sys/ufs/ext2fs/ext2fs_vfsops.c (*)
  • sandpointのevbppc化を含んだ形だと、追加として以下のものが含まれる。
sys/arch/evbppc/conf/Makefile.sandpoint.inc
sys/arch/evbppc/conf/SANDPOINT
sys/arch/evbppc/conf/SANDPOINT.X2
sys/arch/evbppc/conf/SANDPOINT.generic
sys/arch/evbppc/conf/files.sandpoint
sys/arch/evbppc/conf/std.sandpoint
sys/arch/evbppc/include/isa_machdep.h
sys/arch/evbppc/include/isapnp_machdep.h
sys/arch/evbppc/include/sandpoint.h
sys/arch/evbppc/sandpoint/autoconf.c
sys/arch/evbppc/sandpoint/clock.c
sys/arch/evbppc/sandpoint/disksubr.c
sys/arch/evbppc/sandpoint/extintr.c
sys/arch/evbppc/sandpoint/isa/icu.h
sys/arch/evbppc/sandpoint/isa/isa_machdep.c
sys/arch/evbppc/sandpoint/isa/isaclock.c
sys/arch/evbppc/sandpoint/isa/isadma_machdep.c
sys/arch/evbppc/sandpoint/isa/nvram.h
sys/arch/evbppc/sandpoint/isa/spkrreg.h
sys/arch/evbppc/sandpoint/kgdb_glue.c
sys/arch/evbppc/sandpoint/locore.S
sys/arch/evbppc/sandpoint/machdep.c
sys/arch/evbppc/sandpoint/mainbus.c
sys/arch/evbppc/sandpoint/pci/pchb.c
sys/arch/evbppc/sandpoint/pci/pci_machdep.c
sys/arch/evbppc/sandpoint/pci/pci_machdep.h
sys/arch/evbppc/sandpoint/pci/pcib.c
sys/arch/evbppc/sandpoint/sandpoint_intr.h
sys/dev/isa/fd.c
  • ...どこまで作ればよいのやら...
    • (案1)NetBSD/sandpointのNetBSD/evbppc/sandpoint化パッチ + 追加でNetBSD/evbppc/kuroboxパッチ
    • (案2)NetBSD/evbppc/kuroboxパッチのみ
    • (案3)NetBSD/evbppc/kuroboxパッチ + 追加でNetBSD/evbppc/sandpoint化パッチ
    • 悩むのも疲れたので全部作った。(無意味な物も含む)

current用パッチ作成の検討

  • 各ソースはほとんどの場合オリジナルを有しているため、オリジナルをコピーした上でそれに対してパッチを当てる形を取ることにする。
    • オリジナル側の変更に対して若干強くなるのと、パッチサイズ自体を小さく出来る利点が考えられる。
    • 欠点は「面倒くさい」
  • ファイルのリスト(整理中)
    • rs5c372はcurrentが対象ということもあって外してある。
新ファイル 元ファイル
sys/arch/evbppc/conf/KUROBOX 新規
sys/arch/evbppc/conf/Makefile.kurobox.inc sys/arch/evbppc/conf/Makefile.walnut.inc
sys/arch/evbppc/conf/Makefile.sandpoint.inc sys/arch/evbppc/conf/Makefile.walnut.inc
sys/arch/evbppc/conf/SANDPOINT sys/arch/sandpoint/conf/GENERIC
sys/arch/evbppc/conf/SANDPOINT.X2 sys/arch/sandpoint/conf/GENERIC.X2
sys/arch/evbppc/conf/SANDPOINT.generic sys/arch/sandpoint/conf/GENERIC.sandpoint
sys/arch/evbppc/conf/files.kurobox sys/arch/sandpoint/conf/files.sandpoint
sys/arch/evbppc/conf/files.sandpoint sys/arch/sandpoint/conf/files.sandpoint
sys/arch/evbppc/conf/std.kurobox sys/arch/sandpoint/conf/std.sandpoint
sys/arch/evbppc/conf/std.sandpoint sys/arch/sandpoint/conf/std.sandpoint
sys/arch/evbppc/include/bootinfo.h sys/arch/sandpoint/include/bootinfo.h
sys/arch/evbppc/include/cpu.h 既存
sys/arch/evbppc/include/darwin_machdep.h sys/arch/sandpoint/include/darwin_machdep.h
sys/arch/evbppc/include/disklabel.h sys/arch/sandpoint/include/disklabel.h
sys/arch/evbppc/include/isa_machdep.h sys/arch/sandpoint/include/isa_machdep.h
sys/arch/evbppc/include/isapnp_machdep.h sys/arch/sandpoint/include/isapnp_machdep.h
sys/arch/evbppc/include/kgdb.h sys/arch/sandpoint/include/kgdb.h
sys/arch/evbppc/include/kurobox.h sys/arch/sandpoint/include/openpicreg.h
sys/arch/evbppc/include/openpicreg.h 新規
sys/arch/evbppc/include/sandpoint.h sys/arch/sandpoint/include/openpicreg.h
sys/arch/evbppc/kurobox/autoconf.c sys/arch/sandpoint/sandpoint/autoconf.c
sys/arch/evbppc/kurobox/clock.c sys/arch/sandpoint/sandpoint/clock.c
sys/arch/evbppc/kurobox/dev/com_eumb.c 新規
sys/arch/evbppc/kurobox/dev/eumb.c 新規
sys/arch/evbppc/kurobox/dev/eumbvar.h 新規
sys/arch/evbppc/kurobox/dev/ociic_eumb.c 新規
sys/arch/evbppc/kurobox/dev/ociicreg.h 新規
sys/arch/evbppc/kurobox/disksubr.c sys/arch/sandpoint/sandpoint/disksubr.c
sys/arch/evbppc/kurobox/extintr.c sys/arch/sandpoint/sandpoint/extintr.c
sys/arch/evbppc/kurobox/kgdb_glue.c sys/arch/sandpoint/sandpoint/kgdb_glue.c
sys/arch/evbppc/kurobox/kurobox_intr.h sys/arch/sandpoint/include/intr.h
sys/arch/evbppc/kurobox/locore.S sys/arch/sandpoint/sandpoint/locore.S
sys/arch/evbppc/kurobox/machdep.c sys/arch/sandpoint/sandpoint/machdep.c
sys/arch/evbppc/kurobox/mainbus.c sys/arch/sandpoint/sandpoint/mainbus.c
sys/arch/evbppc/kurobox/pci/pchb.c sys/arch/sandpoint/pci/pchb.c
sys/arch/evbppc/kurobox/pci/pci_machdep.c sys/arch/sandpoint/pci/pci_machdep.c
sys/arch/evbppc/kurobox/pci/pci_machdep.h sys/arch/sandpoint/include/pci_machdep.h
sys/arch/evbppc/sandpoint/autoconf.c sys/arch/sandpoint/sandpoint/autoconf.c
sys/arch/evbppc/sandpoint/clock.c sys/arch/sandpoint/sandpoint/clock.c
sys/arch/evbppc/sandpoint/disksubr.c sys/arch/sandpoint/sandpoint/disksubr.c
sys/arch/evbppc/sandpoint/extintr.c sys/arch/sandpoint/sandpoint/extintr.c
sys/arch/evbppc/sandpoint/isa/icu.h sys/arch/sandpoint/isa/icu.h
sys/arch/evbppc/sandpoint/isa/isa_machdep.c sys/arch/sandpoint/isa/isa_machdep.c
sys/arch/evbppc/sandpoint/isa/isaclock.c sys/arch/sandpoint/isa/isaclock.c
sys/arch/evbppc/sandpoint/isa/isadma_machdep.c sys/arch/sandpoint/isa/isadma_machdep.c
sys/arch/evbppc/sandpoint/isa/nvram.h sys/arch/sandpoint/isa/nvram.h
sys/arch/evbppc/sandpoint/isa/spkrreg.h sys/arch/sandpoint/isa/spkrreg.h
sys/arch/evbppc/sandpoint/kgdb_glue.c sys/arch/sandpoint/sandpoint/kgdb_glue.c
sys/arch/evbppc/sandpoint/locore.S sys/arch/sandpoint/sandpoint/locore.S
sys/arch/evbppc/sandpoint/machdep.c sys/arch/sandpoint/sandpoint/machdep.c
sys/arch/evbppc/sandpoint/mainbus.c sys/arch/sandpoint/sandpoint/mainbus.c
sys/arch/evbppc/sandpoint/pci/pchb.c sys/arch/sandpoint/pci/pchb.c
sys/arch/evbppc/sandpoint/pci/pci_machdep.c sys/arch/sandpoint/pci/pci_machdep.c
sys/arch/evbppc/sandpoint/pci/pci_machdep.h sys/arch/sandpoint/include/pci_machdep.h
sys/arch/evbppc/sandpoint/pci/pcib.c sys/arch/sandpoint/pci/pcib.c
sys/arch/evbppc/sandpoint/sandpoint_intr.h sys/arch/sandpoint/include/intr.h
sys/arch/powerpc/oea/cpu_subr.c 既存
sys/dev/ic/rtl8169.c 既存
sys/dev/isa/fd.c 既存
sys/dev/pci/if_re_pci.c 既存

  • シェルスクリプト中身(予定)
    • コピー先ディレクトリを漏れなく作成する。
    • コピー元ファイルをコピー先ディレクトリへコピーする。たまに名前が違うので注意。
    • 全体のdiffをHEREドキュメント形式で納め、パッチとして適用する。

current作業(2006-08-01~06)

  • 3.0のパッチをcurrent(checkoutしたもの)に当てた。
  • 当然ながらrejectが出た。これらは手で当てなおす。
KURO-BOX# find . -name "*.rej" -print
./arch/evbppc/conf/Makefile.kurobox.inc.rej
./arch/evbppc/conf/Makefile.sandpoint.inc.rej
./arch/evbppc/conf/SANDPOINT.generic.rej
./arch/evbppc/conf/std.kurobox.rej
./arch/evbppc/conf/std.sandpoint.rej
./arch/evbppc/include/disklabel.h.rej
KURO-BOX# 
  • 下記ファイルは直接置き換えたほうが良さそう。コピー無しへ変更。
    • Makefile.kurobox.inc
    • Makefile.sandpoint.inc
  • 下記ファイルはコピー元を代えたほうが良さそう。
    • std.kurobox.rej
    • std.sandpoint.rej
  • "EVBPPC_HAS_MBR"は使われなくなったらしい。削除。
  • softintr系の関数のプロトタイプが見つからない?warningが出る。
    • softintr系のプロトタイプはintr.hに書く必要があるっぽい。
  • eumb.cはsandpoint-currentから持ってきたほうが早そう。
    • 一箇所をintに変更するだけでOKだった。
  • com_eumb.cはev64260/com_obio.cを横目で見つつ書き直し。
  • ociic_eumb.cはconfig_found_ia()に書き換え。
  • リンクエラー。softintr_*が全滅。
    • files.kurobox, files.sandpointにarch/powerpc/powerpc/softintr.cを追加。
    • include/kurobox/kurobox_intr.hに#include "powerpc/softintr.h"を追加。sandpointも同様。
  • リンクエラー。softnetが見つからない。
    • pc532/machdep.cを参考に softnet()をでっち上げてmachdep.cへ収めた。
  • やっとリンクOK。
    • ociic_eumb.cでassert()で引っかかる。config_found_ia()の引数を修正してOK。
    • com_eumb.cでpanic。調査中。
  • 一旦中断してsandpoint側でcurrentを動作させてみる。
    • iicやcomの変更が影響している...?
    • sandpoint側は起動してきた(NetBSD 3.99.23)。evbppcが起動しないのは単純な修正ミスの疑いが濃くなった。
  • panic時のログ。
com0 at eumb0 addr 0xfc004600 irq 14: ns16550a, working fifo
com0: console
panic: pool_get: pool 0x38047c: pr_itemsperpage is zero, pool not initialized?
Stopped in pid 0.1 (swapper) at netbsd:cpu_Debugger+0x10:       lwz     r0, r1,
0
x14
db> trace
0x0038ab60: at panic+0x1a4
0x0038abf0: at pool_get+0x254
0x0038ac10: at softintr_establish+0x64
0x0038ac40: at com_attach_subr+0x1e0
0x0038ac60: at com_eumb_attach+0xa4
0x0038ac80: at config_attach_loc+0x300
0x0038ace0: at config_found_sm_loc+0x64
0x0038ad00: at eumb_attach+0x108
0x0038ad40: at config_attach_loc+0x300
0x0038ada0: at config_found_sm_loc+0x64
0x0038adc0: at mainbus_attach+0xb4
0x0038ae30: at config_attach_loc+0x300
0x0038ae90: at config_rootfound+0x44
0x0038aeb0: at cpu_configure+0x1c
0x0038aec0: at configure+0x3c
0x0038aee0: at main+0xd8
0x0038af30: at 0x900dc
db>
  • softintrが怪しいのは一目瞭然。
    • 追加したsoftnet()を元に戻す。
    • arch/evbppc/include/types.hに小細工。
#define __HAVE_NWSCONS
#define __HAVE_DEVICE_REGISTER

#if !defined(__kurobox__) && !defined(__sandpoint__)
#define __HAVE_GENERIC_SOFT_INTERRUPTS
#endif
  • これでとりあえずブートした。
    • 正しい対応とは思えないが...
    • macppc/macppc/extintr.cが参考になるかも。
    • do_pending_intr()を書き換え(置き換え?)るのが本道らしい。
  • 一旦パッチを作成する。
    • 最初なのでごちゃ混ぜパッチになるが...
    • disklabel.hの変更が必要だった。3.xでは無くなったはずの"EVBPPC_HAS_MBR"。currentには残っていた。

currentカーネルコンパイルのメモ

  • 2.xや3.xでcurrentのカーネルを(とりあえず)コンパイルするには以下の準備が必要。
    • /etc/mk.confに"HAVE_GCC=3"を追加
    • 以下のコマンドをcurrent側から持ってきてこちら側が優先するようにパスを通しておく。
      • config
      • genassym
      • mkdep

nbloader使用時の注意

  • "wd"のメジャー番号が10になっている。("sd"はsandpointと同じで4)
  • "bootdev="の下2桁がメジャー番号。16進数指定なので"0a"とする。
  • 続く2桁(実質1桁)がパーティション番号。aが0, bが1, ... pがf。これはsandpointと同じ。
    • wd0aからブートするには、"bootdev=0xa000000a"とする。
    • wd0pからブートするには、"bootdev=0xa0000f0a"とする。

current化作業続き(2006-09-07)

  • "__HAVE_GENERIC_SOFT_INTERRUPTS"が問題となっていたが、一応対応した。
    • 以前のarch/evbppc/include/types.hの小細工を元に戻した。
    • arch/evbppc/kurobox/extintr.cのdo_pending_int()を書き直した。
    • arch/evbppc/kurobox/machdep.cのcpu_startup()にsoftintr__init()を追加した。
  • これで様子を見ている所。今の所大丈夫そうに思える。
    • (KASSERTはsoftnetのタイミングで発生していた)

current化作業続き(2006-09-09)

  • 一応大丈夫そうなのでパッチを作成。
    • 問題を見つけた方はご連絡下さい。

追加作業(2006-10-12)

  • current, netbsd-3共に修正と動作確認を完了したのでパッチを作成。
  • 修正はsandpoint側と同様


17585