NetBSD/x68k開発用 X68030 ブートストラップ起動動作仕様
重い腰を上げてクロスで build.sh -m x68k live-image するための情報を調べてみたけど140字では足りないのでつぶやくと http://t.co/TbXEL88T が更新されるメソッドとかないですか
2012-11-13 22:05:53@isaki68k たくさんありますが、まず「起動デバイスがSCSIの場合、指定SCSI IDのHDの先頭からオフセット1024バイトにあるセクタから1024バイト(=512バイト/セクタのデバイスならLBA=2,3)を$002000に読み込み$002000に実行を移します」とか
2012-11-13 22:11:30「SCSI IDのHDの先頭からオフセット1024バイトにあるセクタから1024バイト」にはHuman68kでフォーマットした場合にはIPL MENUが入る。NetBSD/x68kの標準インストールをした場合には /usr/mdec/mboot が入る。
2012-11-13 22:13:25ただし、Human68kのパーティションテーブルを持たないSCSI HDの場合、boot_ufsを「SCSI IDのHDの先頭からオフセット1024バイトにあるセクタから8192バイト」に書いて起動することも可能と思われる。(ただし boot_ufs をまだちゃんと読んでない)
2012-11-13 22:16:21@isaki68k 1024バイト以降にある自分を読むというより、再度自分自身全体を 0x0f0000 に読み直しているという気が。で、Human68kパーティションがない場合に先頭1024バイトから読むようになっているのかどうかまだ見てません。
2012-11-13 22:20:22SCSI HDの場合、 (1)IPLROMがディスクの先頭から1024バイトの位置から1024バイトに書かれたmbootを$002000に読む (2)mbootがHuman68kパーティションを解釈して起動可能パーティションの先頭1024バイトを$002400に読む
2012-11-13 22:22:32(3)パーティション先頭にはboot_ufsが書かれていて、その先頭1024バイトは再度起動パーティションの先頭8192バイトを$0f0000に読み直して bootufs() の /boot 読み出しルーチンに飛ぶ (4)/boot はファイルシステムを解釈するのでなんでもあり
2012-11-13 22:25:09SCSI HDの先頭から1024バイト(512バイト/セクタなら先頭の2バイト)のうち、意味のあるデータは先頭16バイトのマーカーとサイズの値だけ。で、NetBSD/x68kは残りの領域のうちオフセット64バイトからディスクラベルを置いている。
2012-11-13 22:29:20NetBSD/x68k標準インストールだと、BSD disklabelそのものはSCSI HD上には書かれず、Human68kパーティションテーブルにNetBSDパーティションの情報を書いてて disksubr.cでBSD disklabel形式に読み替えてる。mac68kと同じ
2012-11-13 22:31:31@moveccr x86みたいに、Human68kパーティションにはNetBSDパーティション全体を記録して、NetBSDパーティションの先頭にディスクラベルを置いた方が良かったような気もしますが、今更の話ですね。移植し初めにそこまで考えてらんないというか
2012-11-13 22:42:50/usr/mdec/mboot は (1)ディスクの先頭に X68SCSI1 のマーカーとディスクサイズを書く (2)ディスクのオフセット1024バイトから mboot を書く という初期化をする。boot_ufs の書き方次第ではこれをしなくても起動はできるはず?
2012-11-13 22:34:52@tsutsuii Human68kで一旦フォーマットすれば、これをしなくてもいい、という気はしますが、買ってきたまっさらディスク(そんなものはXM6iにしかない気がするけどw)の場合は誰かが $0 と $400 書かないといけないですよね。
2012-11-14 01:27:54/usr/mdec/installboot は (1)フロッピーなら先頭セクタから、 (2)SCSI HDなら指定されたパーティションがディスクの先頭の場合はオフセット1024バイト位置から、それ以外ならパーティションの先頭から boot_ufs を書く
2012-11-13 22:38:15@moveccr $400はinstallboot(8)でも書けるので、あとは$0のマーカーですが、IPLROMはこのマーカーを見ているのかどうかという問題。そこはかとなく見ている気はしますが…(試せと怒られる)
2012-11-14 01:53:00で、何がポイントかといえば、IPLROM自身はHuman68kパーティションテーブルなどの解釈はしてなくて、規定のセクタから規定のサイズを読んでいるだけ(っぽい)ということ。それさえわかればあとはmbootとboot_ufsのソース見ればなんとかなる。はず。
2012-11-13 22:45:14クロスで 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