NetBSD/luna68k ブートローダー 実装作業日記
というわけでコンソール入出力が動くようになったところで今日はここまで。ふぅ。 http://t.co/2cWK6COW
2013-01-02 04:45:22世界で3人どころか自分ですら必要かどうかわからないコードだけど、4.4BSDの作業をされた藤田さんには何かを感じてもらえるかもしれないな、などとKOF2011での会話を思い出す
2013-01-02 04:49:04知る人ぞ知る 4.4BSD-Alpha/luna68k のブートローダー。 http://t.co/ybDMI2O5
2013-01-02 06:08:024.4BSD-Alpha の段階では Phase-29 で、今作業中のベースの Lite2 では Phase-31。どこが変わったのかはソース中の日付でしか知る術はありませんが
2013-01-02 06:09:25SCSIのドライバを元のまま使うか hp300 のと置き換えるかが微妙に悩ましいところ。MI loadfile() とくっつけるとしたらどっちが楽か
2013-01-02 06:10:273日目
NetBSDのlibsaでブートローダーを書くときMDで必要なもの ・devopen() ・struct devsw devsw[] と int ndevs ・struct fs_ops file_system[] と int nfsys ・putchar() getchar()
2013-01-03 01:30:50struct fs_ops はファイルシステムレベルでのopen/read/seek等の関数。だいたい sys/lib/libsa 以下にすでにある。 http://t.co/QNmyEjXu
2013-01-03 01:35:44struct fs_ops file_system[] という配列になっているのは複数のファイルシステムをサポートするため。前から順にopenして成功したものが選択される。nfsys は配列の要素数というかサポートするファイルシステム数。
2013-01-03 01:37:07struct devsw は wd とか sd とかデバイスレベルでのアクセス関数。open/close/strategyとか。これはほぼMDで自前で用意する。BIOSコールだったりデバイス叩くところからフルスクラッチだったり http://t.co/pNdKLKT4
2013-01-03 01:39:40struct devsw devsw[] と配列になってるのはこれも複数のデバイスをサポートするためで、 ndevs はデバイス数。ただしこちらは総当たりではなく dv_name のデバイス名で選択される。
2013-01-03 01:41:42devopen() は、BIOSおよびブートローダープロンプトで指定された デバイス名+ファイル名 の全体のパス名称から fs_ops に渡すべきパス名と devsw のアクセス関数で必要な情報をそれぞれ設定する。このへんはかなり実装依存。
2013-01-03 01:45:58sd.c の中に sdread() ってあるんだけどどこからも参照されてない。謎。 strategy のREAD側だけ先に書いたというだけかしらん
2013-01-03 01:51:46あー、libsaリンクしようと思ったら <machine/loadfile_machdep.h> が必要か。これまた説明がめんどいファイルだ
2013-01-03 02:32:28sys/lib/libsa の loadfile.c や loadfile_elf32.c の中の関数や定義をフックするためのヘッダ定義なので arch/cobalt/include/loadfile_machdep.h とか見てください、としか言いようがないな(´・ω・`)
2013-01-03 02:38:14APIだけ決まってて中身は implementation dependent です、っていう場合、使う人に対する説明はそれでいいけど中身を書く人いじる人にとっては「なぜその implementation を選んだのか」がたいてい説明されてないので困る
2013-01-03 02:50:03単に 一番手抜きで書ける方法を選んだ場合でも 各種の実装を比較検討した結果最適なものを選んだという場合でも 結果のコードだけ見たんじゃすぐにはわからないし(わかる場合もあるけど)
2013-01-03 02:52:06とりあえず動けばOKで作ったAPIの関数を なんでその実装になったのかよくわからないAPIに変換する作業(´・ω・`)
2013-01-03 03:18:59io->i_boff = lp->d_partitions[io->i_boff].p_offset; これどう見ても間違ってると思うんですけど(´・ω・`)
2013-01-03 03:22:42