NetBSD/luna68k ブートローダー 実装作業日記

冬休み中の宿題として作業を始めた、 NetBSD/luna68k のネイティブカーネルブートローダーの実装移植作業日記です。 ほどんど自分用の備忘録ですが、 NetBSD の libsa (stand alone library) の使い方の解説としていつかまとめ直すかも?
18
前へ 1 ・・ 3 4 ・・ 27 次へ
Izumi Tsutsui @tsutsuii

というわけでコンソール入出力が動くようになったところで今日はここまで。ふぅ。 http://t.co/2cWK6COW

2013-01-02 04:45:22
拡大
Izumi Tsutsui @tsutsuii

世界で3人どころか自分ですら必要かどうかわからないコードだけど、4.4BSDの作業をされた藤田さんには何かを感じてもらえるかもしれないな、などとKOF2011での会話を思い出す

2013-01-02 04:49:04
Izumi Tsutsui @tsutsuii

知る人ぞ知る 4.4BSD-Alpha/luna68k のブートローダー。 http://t.co/ybDMI2O5

2013-01-02 06:08:02
拡大
Izumi Tsutsui @tsutsuii

4.4BSD-Alpha の段階では Phase-29 で、今作業中のベースの Lite2 では Phase-31。どこが変わったのかはソース中の日付でしか知る術はありませんが

2013-01-02 06:09:25
Izumi Tsutsui @tsutsuii

SCSIのドライバを元のまま使うか hp300 のと置き換えるかが微妙に悩ましいところ。MI loadfile() とくっつけるとしたらどっちが楽か

2013-01-02 06:10:27
Izumi Tsutsui @tsutsuii

20年前のマシン。20年前のソース。今そこにあるマシン。今のコンパイラ。という時空を感じながら寝よう

2013-01-02 06:13:59

3日目

Izumi Tsutsui @tsutsuii

NetBSDのlibsaでブートローダーを書くときMDで必要なもの ・devopen() ・struct devsw devsw[] と int ndevs ・struct fs_ops file_system[] と int nfsys ・putchar() getchar()

2013-01-03 01:30:50
Izumi Tsutsui @tsutsuii

あとまだあったっけ? ネットワーク関連はまた別にいるけど

2013-01-03 01:31:15
Izumi Tsutsui @tsutsuii

struct fs_ops はファイルシステムレベルでのopen/read/seek等の関数。だいたい sys/lib/libsa 以下にすでにある。 http://t.co/QNmyEjXu

2013-01-03 01:35:44
Izumi Tsutsui @tsutsuii

struct fs_ops file_system[] という配列になっているのは複数のファイルシステムをサポートするため。前から順にopenして成功したものが選択される。nfsys は配列の要素数というかサポートするファイルシステム数。

2013-01-03 01:37:07
Izumi Tsutsui @tsutsuii

struct devsw は wd とか sd とかデバイスレベルでのアクセス関数。open/close/strategyとか。これはほぼMDで自前で用意する。BIOSコールだったりデバイス叩くところからフルスクラッチだったり http://t.co/pNdKLKT4

2013-01-03 01:39:40
Izumi Tsutsui @tsutsuii

struct devsw devsw[] と配列になってるのはこれも複数のデバイスをサポートするためで、 ndevs はデバイス数。ただしこちらは総当たりではなく dv_name のデバイス名で選択される。

2013-01-03 01:41:42
Izumi Tsutsui @tsutsuii

devopen() は、BIOSおよびブートローダープロンプトで指定された デバイス名+ファイル名 の全体のパス名称から fs_ops に渡すべきパス名と devsw のアクセス関数で必要な情報をそれぞれ設定する。このへんはかなり実装依存。

2013-01-03 01:45:58
Izumi Tsutsui @tsutsuii

あー、devoepn は実際に devsw 使って open するところまでやらないとダメか

2013-01-03 01:47:46
Izumi Tsutsui @tsutsuii

というわけで sd.c の open/strategy のI/Fだけなんとかすればいいのか?

2013-01-03 01:50:18
Izumi Tsutsui @tsutsuii

sd.c の中に sdread() ってあるんだけどどこからも参照されてない。謎。 strategy のREAD側だけ先に書いたというだけかしらん

2013-01-03 01:51:46
Izumi Tsutsui @tsutsuii

今から作業するとまた朝になるな(´・ω・`)

2013-01-03 02:22:20
Izumi Tsutsui @tsutsuii

あー、libsaリンクしようと思ったら <machine/loadfile_machdep.h> が必要か。これまた説明がめんどいファイルだ

2013-01-03 02:32:28
Izumi Tsutsui @tsutsuii

設計書書かずにコード書いた典型例じゃないかこれ

2013-01-03 02:33:58
Izumi Tsutsui @tsutsuii

sys/lib/libsa の loadfile.c や loadfile_elf32.c の中の関数や定義をフックするためのヘッダ定義なので arch/cobalt/include/loadfile_machdep.h とか見てください、としか言いようがないな(´・ω・`)

2013-01-03 02:38:14
Izumi Tsutsui @tsutsuii

APIだけ決まってて中身は implementation dependent です、っていう場合、使う人に対する説明はそれでいいけど中身を書く人いじる人にとっては「なぜその implementation を選んだのか」がたいてい説明されてないので困る

2013-01-03 02:50:03
Izumi Tsutsui @tsutsuii

単に 一番手抜きで書ける方法を選んだ場合でも 各種の実装を比較検討した結果最適なものを選んだという場合でも 結果のコードだけ見たんじゃすぐにはわからないし(わかる場合もあるけど)

2013-01-03 02:52:06
Izumi Tsutsui @tsutsuii

とりあえず動けばOKで作ったAPIの関数を なんでその実装になったのかよくわからないAPIに変換する作業(´・ω・`)

2013-01-03 03:18:59
Izumi Tsutsui @tsutsuii

io->i_boff = lp->d_partitions[io->i_boff].p_offset; これどう見ても間違ってると思うんですけど(´・ω・`)

2013-01-03 03:22:42
前へ 1 ・・ 3 4 ・・ 27 次へ