[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: reboot without WinCE



こばやしです

 > > kernel から取得してデフォルト値にできると便利だと思うのですが、どこかに保存
 > > されていますでしょうか?
 >
 >bootinfo 自体はカーネルのメモリの中に残っていますが、hpcmips では
 >bootinfo の他に文字列としてオプションも渡しているので、そのへんは
 >のこっていないかも知れません。

arch/hpmips/hpcmips/machdep.c 内の bootinfo を見ればいいんですね。

 >コピーして保存しておくようにするのは簡単なのですが、問題はそれを
 >どのような I/F でユーザランドから取り出すかですね。
 >NetBSD 的には全ての port で共通の仕組みを定義するのが正しいアプローチ
 >だと思いますが、あまり手を広げるといつまでたっても完成しなくなって
 >しまう(これも NetBSD 的にはありがち(;_;)ので、この件はとりあえず
 >置いときましょう。
 >(もしかしたら、既にそういう I/F があるとすればそれを使えばいいですが)

argv[0] だけなら sysctl の CPU_BOOTED_KERNEL で参照できるみたいですが、他は
良くわかりませんでした。

 >なんにせよ、とりあえず、プログラムをどこか皆から見えるところに置いて
 >みてくれませんか?

http://www.bb.wakwak.com/~gimy/reboot2.tar.gz

に置いておきました。作業しているうちに /dev/mem の ioctl でなくてもいいよう
な気がしてきたので、とりあえず、sysctl の拡張にしてみました。(NetBSD/mmeye
と同じ方針です。) 内容は
arch/mips/include/cpu.h
arch/hpcmips/hpcmips/machdep.c
arch/mips/mips/locore_mips3.S
への patch と、userland から呼び出すためのプログラム reboot2.c および、それを
コンパイルするための /usr/include/mips/cpu.h への patch です。

arch/mips と arch/hpcmips への変更が混在しているので、このままでは良くないと
思いますが、とりあえずということで。また reboot2.c には Makefile もないので、
直接 gcc -o reboot2 reboot2.c として下さい。(すみません、なるべく早くちゃん
とします)

reboot2 の使い方は、argv[1] に新しい kernel を指定して、argv[2] 以降にその
kernel に渡す引数を書きます。例えば、/netbsd を NFS でブートするためには、

# reboot2 /netbsd -b=nfs

とします。とりあえず、bootinfo は現在の kernel 内のものを使用するようにして
あります。また sysctl を呼び出すので root 権限で実行する必要があります。

注意として、現状では reboot2 は signal の通知や umount 等は一切せずに、いき
なり新しい kernel に飛んでいるので、かなり危険です。md root や NFS root なら
多少ましかも。この辺をきちんとするには、shutdown や reboot のやり方を真似す
ればいいのかな?
-- 
KOBAYASHI Yoshiaki