Xen対応iTRON

2006年11月9日版

現在の動作環境
HST対応CPUにFredoraCore5ベース、Xen3.02
iTRONはTOPPERS/JSP Version1.4.(patchlevel 2)

スナップショット

[root@localhost xen]# xm create -c itron.conf
Using config file "itron.conf".
Started domain iTRON
Xen iTRON! start_info: c0042000
nr_pages: 32768 shared_inf: 001f8000
pt_base: c0045000 mod_start: 0x0
mod_len: 0 flags: 0x0
cmd_line:
MM: Init
_text: c0000000
_etext: c000aef7
_edata: c000ca00
stack start: c001c7c0
_end: c00210c0
start_pfn: 4a
max_pfn: 8000
Mapping memory range 0xc0400000 - 0xc8000000
MM: Initialise page allocator for c0069000(69000)-c8000000(8000000)
MM: done
Initialising timer interface
Initialising console ... done.
Initialising scheduler, idle_thread 00000000
Thread "Idle": pointer: 0xc006a00c, stack: 0xc006c000
JSP Kernel Release 1.4 (patchlevel = 2) for i386(PC/AT) (Nov 9 2006, 22:01:46) Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory Toyohashi Univ. of Technology, JAPAN
System logging task is started on port 1.
Sample program starts (exinf = 0).
task1 is running (001). |
task1 is running (002). |
task1 is running (003). |
task1 is running (004). |
task1 is running (005). |
task1 is running (006). |
task1 is running (007). |
task1 is running (008). |
1
task1 is running (009). |
task1 is running (010). |
task1 is running (011). |
s
#1#slp_tsk()
task2 is running (001). +
task2 is running (002). +
task2 is running (003). +
2
task2 is running (004). +
task2 is running (005). +
task2 is running (006). +
s
#2#slp_tsk()
task3 is running (001). *
task3 is running (002). *
task3 is running (003). *
3
task3 is running (004). *
task3 is running (005). *
s
#3#slp_tsk()
1
w
#wup_tsk(1)
task1 is running (012). |
task1 is running (013). |
task1 is running (014). |
task1 is running (015). |
task1 is running (016). |
[root@localhost xen]#
性能評価はこれからですが、そこそこのリアルタイム性能は確保できそうです。今回はlinuxのゲストOSとして動作させましたが、Xen対応Windowsのリリースもはじまりそうですから、windowsでは処理しきれないリアルタイム処理を実行させる環境として、面白いのではないかと思います。

動作環境の構築
1)ホスト環境の構築
 省略

2)Xen版iTRON作成環境
必要なソース

a)Xen3.02
 下記サイトよりダウンロードしてください。
   http://www.xensource.com

b)jsp1.4
下記サイトよりダウンロードしてください。
   http://www.toppers.jp

c)xen061109.tgz
このサイトよりダウンロードしてください。
ファイルのセット
a)jsp1.4の展開
 作業しやすい場所に展開してください。
b)jspのxen依存部分のセット
 jspフォルダー内のconfigにxenのフォルダーを作り、xen061109.tgzを展開します。
c)Xenのヘッダーファイルのセット
 ソースファイルの中にmini-osと言うサンプルOSが入っているホルダーがあります。ここのincludeの内容をjsp/config/xen/xen_hにコピーします。
コンフィグレーション
詳細はjspのドキュメントを参照してください。
具体例
jspの下にxenと言うフォルダーを作ります。
そこに移動して
../configure -C xen -S pcat
make depend
make
これで、問題がなければjspと言う名称でXen対応のiTRONが完成します。



現状の問題点とJSP共通部のパッチ
jsp/kernel/check.h
この中に、CHECK_INTCTX_UNLという、コンテキストとCPUのロック状態をチェックするマクロが旨く動いていません。
かなり確信犯的不具合なのですが、、、、
パッチファイルーーーcheck.h.diff
jsp/xen/sample1.c
jsp1.4.2のサンプルプログラムはそのままでは動作ないので修正。
修正内容
1)タスク作成時にIDが引数として通知されないので、タスクの先頭でget_tid()でidを獲得。
2)vxget_tim()をサポートしていないのですが、OMIT_VGET_TIMのデファインが反映されいので、実力行使でコメントアウト。
3)メインタスクが一度dispatchしないとget_tim()を呼んでも時刻が更新されない。
以上3点の修正をしています。
パッチファイルーーーsample1.diff
動かし方

xm create -c itron.conf

itron.confのサンプル
# -*- mode: python; -*-
# Kernel image file.
kernel = "jsp"

# Initial memory allocation (in megabytes) for the new domain.
memory = 128

# A name for your domain. All domains must have different names.
name = "iTRON"

on_crash = 'destroy'

止め方
xmコマンドで動作しているiTRONのIDを確認してその後、shutdownするかdestroyします。shutdownはオプションの指定が旨く動作していないようで、2分くらいかかります。一見乱暴みたいですが、destroyがおすすめです。

具体例
xm list     <−−iTRONのID確認
xm destroy <ID>

とりあえず動かしてみたい人のために!
Xen対応iTRON  jsp.zip  unzipすると実行モジュールになります。
動作確認に用いたXenとLinuxのバージョン
Xen---- xen.gz-2.6.17-1.2187_FC5
Linux--- vmlinuz-2.6.17.1.2187_FC5xen0