明日のために。。。
(メモだったりする)
[条件と課題]
ramdisk boot のため、ramdisk driver が満たさなければいけない必須条件。
1-1 /dev/disk 以下で正常にマウントできる必要がある。
tracker の右クリックマウントメニューに出てくる程度にしないと駄目かも。
1-2 boot 時に、tar-fs から自動ロードされ、有効になる必要がある。
1-3 ramdisk のパーティションを2つにして、システム(cdからコピー)と、
それ以外に分けた方がシステムロードが短くて済むなぁ
ramdisk boot のための Haiku loader の改造。
2-1 boot-cd の 1st-volume に含まれる tar-fs 内に入れる必要がある。
2-2 ramdisk 用メモリを確保し、cd の 2nd-volume(bfs) を読込む。
2-3 ramdisk 用メモリ管理の引き継ぎ
2-4 メモリ管理が始まり、ramdisk driver がロードされ、
root-fs にブートボリュームがマウントされる時に、
代わりにramdiskをマウントするように変更する必要がある。
(cd はマウントしないので、イジェクトも他のcdをマウントすることも可能になる)

[現状](ほんとに書いてある通りに動作するかは未確認)
1-1 未解決。
ブロックデバイスにしないといけないのかなぁ???
1-2 未解決。
もしかして、tar-fs に入れておくだけで自動でロードしてくれるかも。
device_manager.c の device_manager_rescan_bus() で有効に(rescan)されるために、
アトリビュート B_DRIVER_BUS が必要? (ramdiskなので、rescan自体不要な気もする)
1-3 とりあえず後回し。。。
2-1 スクリプト makehaikufloppy に追加記述すればok。
2-2 memory の確保に付いては、stage2 では、8MBしかマッピングされないようなので、
それ以降を使っても問題ないはず。
system/boot/platform/bios_ia32 の init_page_directory() で、マッピングを追加する。
。。。上、間違いっぽい気がしてきたので、やりなおし。。。
ramdisk用memory への読込と、初期(stage2)の ramdisk-driver 代わりとして、
ちょっとずるいやりかたではあるが、
system/boot/platform/bios_ia32/devices.cpp の BIOSDrive::ReadAt() を改造。
2-3 物理アドレス(mmuの設定)の方は未解決。再設定しているはずなんだが。。。
仮想アドレスの方は、
system/kernel/vm/vm.cpp の vm_init()内で他と同様に行えばいいはず。
(stage2 で 読み込んだイメージを create_area() を使って確保している)
2-4 未解決。
system/kernel/fs/vfs_boot.cpp の vfs_mount_boot_file_system で ブートボリュームを
/boot に mount しているので、この部分を ramdisk にmount するように変更する必要がある。
(ramdisk 用に確保したメモリは find_area() で調べる)