2012年11月21日

NetBSD/x68k開発用 X68030 ブートストラップ起動動作仕様

世界で5人くらい残存しているNetBSD/x68k開発者向けの、X68030ブートストラップ起動時動作仕様の調査結果その他の備忘録です。 NetBSD/x68k用ブートローダーやOSインストール済みLiveImageビルドツール開発に役立つ日が来るかも……
2
Izumi Tsutsui @tsutsuii

重い腰を上げてクロスで build.sh -m x68k live-image するための情報を調べてみたけど140字では足りないのでつぶやくと http://t.co/TbXEL88T が更新されるメソッドとかないですか

2012-11-13 22:05:53
isaki @isaki68k

@tsutsuii どのトピックを更新したらいいすか。(´・ω・`)

2012-11-13 22:07:13
Izumi Tsutsui @tsutsuii

@isaki68k たくさんありますが、まず「起動デバイスがSCSIの場合、指定SCSI IDのHDの先頭からオフセット1024バイトにあるセクタから1024バイト(=512バイト/セクタのデバイスならLBA=2,3)を$002000に読み込み$002000に実行を移します」とか

2012-11-13 22:11:30
isaki @isaki68k

ここから140字ずつ改訂文が送られてくるのを整形すればいいわけか…(違

2012-11-13 22:12:52
Izumi Tsutsui @tsutsuii

「SCSI IDのHDの先頭からオフセット1024バイトにあるセクタから1024バイト」にはHuman68kでフォーマットした場合にはIPL MENUが入る。NetBSD/x68kの標準インストールをした場合には /usr/mdec/mboot が入る。

2012-11-13 22:13:25
Izumi Tsutsui @tsutsuii

ただし、Human68kのパーティションテーブルを持たないSCSI HDの場合、boot_ufsを「SCSI IDのHDの先頭からオフセット1024バイトにあるセクタから8192バイト」に書いて起動することも可能と思われる。(ただし boot_ufs をまだちゃんと読んでない)

2012-11-13 22:16:21
isaki @isaki68k

@tsutsuii boot_ufs は1024バイト以降にある自分をロードする機能は持ってたような気が。

2012-11-13 22:17:33
Izumi Tsutsui @tsutsuii

@isaki68k 1024バイト以降にある自分を読むというより、再度自分自身全体を 0x0f0000 に読み直しているという気が。で、Human68kパーティションがない場合に先頭1024バイトから読むようになっているのかどうかまだ見てません。

2012-11-13 22:20:22
isaki @isaki68k

@tsutsuii おおう、そうだったんですか…(←読んでない人

2012-11-13 22:21:53
Izumi Tsutsui @tsutsuii

SCSI HDの場合、 (1)IPLROMがディスクの先頭から1024バイトの位置から1024バイトに書かれたmbootを$002000に読む (2)mbootがHuman68kパーティションを解釈して起動可能パーティションの先頭1024バイトを$002400に読む

2012-11-13 22:22:32
Izumi Tsutsui @tsutsuii

(3)パーティション先頭にはboot_ufsが書かれていて、その先頭1024バイトは再度起動パーティションの先頭8192バイトを$0f0000に読み直して bootufs() の /boot 読み出しルーチンに飛ぶ (4)/boot はファイルシステムを解釈するのでなんでもあり

2012-11-13 22:25:09
Izumi Tsutsui @tsutsuii

SCSI HDの先頭から1024バイト(512バイト/セクタなら先頭の2バイト)のうち、意味のあるデータは先頭16バイトのマーカーとサイズの値だけ。で、NetBSD/x68kは残りの領域のうちオフセット64バイトからディスクラベルを置いている。

2012-11-13 22:29:20
Izumi Tsutsui @tsutsuii

その先頭セクタの空き領域を他のOSやブートローダーが別の用途に使ってたら困るけどたぶん誰も使ってない?

2012-11-13 22:29:43
isaki @isaki68k

へー、そういう構造なのかー。(ぉ

2012-11-13 22:30:47
Izumi Tsutsui @tsutsuii

NetBSD/x68k標準インストールだと、BSD disklabelそのものはSCSI HD上には書かれず、Human68kパーティションテーブルにNetBSDパーティションの情報を書いてて disksubr.cでBSD disklabel形式に読み替えてる。mac68kと同じ

2012-11-13 22:31:31
Y.Sugahara @moveccr

@tsutsuii OS-9はどうなんですかねえ。見たこと無いんですけど

2012-11-13 22:38:44
Izumi Tsutsui @tsutsuii

@moveccr x86みたいに、Human68kパーティションにはNetBSDパーティション全体を記録して、NetBSDパーティションの先頭にディスクラベルを置いた方が良かったような気もしますが、今更の話ですね。移植し初めにそこまで考えてらんないというか

2012-11-13 22:42:50
Izumi Tsutsui @tsutsuii

/usr/mdec/mboot は (1)ディスクの先頭に X68SCSI1 のマーカーとディスクサイズを書く (2)ディスクのオフセット1024バイトから mboot を書く という初期化をする。boot_ufs の書き方次第ではこれをしなくても起動はできるはず?

2012-11-13 22:34:52
Y.Sugahara @moveccr

@tsutsuii Human68kで一旦フォーマットすれば、これをしなくてもいい、という気はしますが、買ってきたまっさらディスク(そんなものはXM6iにしかない気がするけどw)の場合は誰かが $0 と $400 書かないといけないですよね。

2012-11-14 01:27:54
Izumi Tsutsui @tsutsuii

/usr/mdec/installboot は (1)フロッピーなら先頭セクタから、 (2)SCSI HDなら指定されたパーティションがディスクの先頭の場合はオフセット1024バイト位置から、それ以外ならパーティションの先頭から boot_ufs を書く

2012-11-13 22:38:15
Izumi Tsutsui @tsutsuii

@moveccr $400はinstallboot(8)でも書けるので、あとは$0のマーカーですが、IPLROMはこのマーカーを見ているのかどうかという問題。そこはかとなく見ている気はしますが…(試せと怒られる)

2012-11-14 01:53:00
Y.Sugahara @moveccr

@tsutsuii insideの記述と挙動から読んでると思います(disれと怒られる

2012-11-14 01:58:53
Izumi Tsutsui @tsutsuii

で、何がポイントかといえば、IPLROM自身はHuman68kパーティションテーブルなどの解釈はしてなくて、規定のセクタから規定のサイズを読んでいるだけ(っぽい)ということ。それさえわかればあとはmbootとboot_ufsのソース見ればなんとかなる。はず。

2012-11-13 22:45:14
Y.Sugahara @moveccr

@tsutsuii クリーンコンピュータの末裔ですからね♪

2012-11-14 01:20:28
Izumi Tsutsui @tsutsuii

クロスで build.sh -m x68k live-image するためには以下をクロス用 tools対応にする必要がある。 (1) /usr/mdec/newdisk (2) /usr/mdec/installboot (3) src/tools/disklabel

2012-11-13 22:51:04
残りを読む(233)

コメント

Izumi Tsutsui @tsutsuii 2012年11月23日
X68030実機CD起動作業分を足しました。
0