[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: reboot without WinCE
> > Windows CE 用のブートローダと似たような仕組みで実現できるとは
> > 思います。バーチャルメモリを確保して、新しいカーネルをロードしてから、
> > 古いカーネルを停止させ、新しいカーネルを物理メモリーにコピーして
> > 起動するのです。
>
> 最近は使っていないので今でも機能しているのかわかりませんが、0.9の頃の
> amigaでは
>
> # cat new_kernel > /dev/reload
> arch/amiga/amiga/mem.c
> arch/amiga/amiga/amiga_init.c
ちょっと見てみました。kernel_reload と kernel_reload_write ですね。
Windows CE 用のブートローダでもやっていることも似たようなものです。
amiga のカーネルは a.out 形式ですか?
hpcmips のカーネルは ELF なので、seek しないで読み込むのは
難しいのではないでしょうか。
どうせ古いカーネルを破壊するようなことが起こるのですから、
ユーザプログラムを信用して、ほとんどの処理をユーザランドで
やった方が、カーネルも太らなくて良いと思います。
/dev/mem に物理メモリを確保する I/O control をつけて、確保したメモリを
mmap し、そこに新しいカーネルや配置を記述したマップを書き込み、
あとはそのマップを起動する I/O control に渡す。
arch/mips/mips/mem.c に I/O control を 2 個追加すれば OK !?
これならカーネルのコードサイズは 1,2KB 程度しか増加しないでしょう。
誰かやりませんか〜?楽しそうですよ〜?
Takemura