(toppers-users 2712) Re: JSPシミュレーション環境へのパッチ

ykominami ykominami @ nifty.com
2008年 1月 15日 (火) 13:16:25 JST


センヒョウさんこんにちは

小南と申します.
私も以前Linuxシミュレータをコンパイルしようとして、センヒョウさん
と同じ問題に遭遇しました.

その時は、タスクのスタック領域を指定回数分のダミー関数の再帰呼び出しと
setjump関数により確保し、longjmp関数でタスクスイッチするようにしました。
シグナル処理の関数もJIS X3030-1994(ISO/IEC 9945-1:1990)で規定されてい
る範囲しか用いないようにしました.
このようなやり方のため、カーネル初期化処理の順序を強引に変えざるを得なかっ
た(タスクのスタック領域の確保をディスパッチの直前にもってきています)
のですが、Fedora Core 6でコンパイルが通り、sample1.c程度のプログラム
であればエラーを出さずに実行できました。
#要はあまりあれこれ試していないということです.

先ほどその時のソースを引っ張り出し、現在でも(私の環境はFedora 7です)
sample1.cがコンパイル可能で、エラー無しで実行できることが確認できました
ので、以下に差分ファイルとして置いておきました.

パッチの在り処
http://www.northern-cross.info/download.html

センヒョウさんがLinuxシミュレーションの内部構造を知ることが目的ではなく、
Linuxシミュレータでアプリケーションを実行させることが主眼であるならば
とりあえずは、お役に立てるのではないかと思います.


ここで話題に出ていたsoftware_term_hookはstart.cにダミー関数として中身が
空の関数として定義しました.
また、実行させるマシンによって、タイマティックの値を調整する必要がある
と思います.
これはsample1.cのmainタスクの処理の冒頭でのループ回数の設定において、
ループを回してもカーネル内部での時刻が進まず、0除算が発生してしまうこと
があるからです。
config/linux/cpu_def.hのマクロTIC_NUME, TIC_DENOの値を調整してください。

パッチを当てると、バナーに"linux(posix-base)"と出るようになります.
posix-baseといっていますが、linux上で動作する、linuxシミュレータ
であり、他のPOSIX互換環境で動作するわけではありません.

#差分を見返してみて、シグナルスタックを指定する関数を使えば、カーネル初期化
#処理の枠組みを崩さずに済むかも知れないとは思いましたが、それは今後の課題
#にさせてください.

-- 
ykominami @ nifty.com