[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