source: anotherchoice/tags/jsp-1.4.4-full-UTF8/doc/linux.txt@ 26

Last change on this file since 26 was 26, checked in by ykominami, 10 years ago

initial

File size: 13.6 KB
Line 
1
2 = TOPPERS/JSPカーネル ユーザズマニュアル =
3 (Linux シュミレーション環境)
4
5 (Release 1.4対応,最終更新: 1-Dec-2003)
6
7------------------------------------------------------------------------
8 TOPPERS/JSP Kernel
9 Toyohashi Open Platform for Embedded Real-Time Systems/
10 Just Standard Profile Kernel
11
12 Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
13 Toyohashi Univ. of Technology, JAPAN
14
15 上記著作権者
16は,以下の (1)〜(4) の条件か,Free Software Foundation
17 によってå…
18¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
19 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
20 を改変したものを含む.以下同じ)を使用・複製・改変・再é…
21å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
22 利用と呼ぶ)することを無償で許諾する.
23 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
24 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
25 スコード中に含まれていること.
26 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
27 用できる形で再é…
28å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
29å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
30 者
31マニュアルなど)に,上記の著作権表示,この利用条件および下記
32 の無保証規定を掲載すること.
33 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
34 用できない形で再é…
35å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
36 と.
37 (a) 再é…
38å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
39マニュアルなど)に,上記の著
40 作権表示,この利用条件および下記の無保証規定を掲載すること.
41 (b) 再é…
42å¸ƒã®å½¢æ…
43‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
44 報告すること.
45 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
46 害からも,上記著作権者
47およびTOPPERSプロジェクトをå…
48è²¬ã™ã‚‹ã“と.
49
50 本ソフトウェアは,無保証で提供されているものである.上記著作権者
51お
52 よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
53 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
54 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
55
56 @(#) $Id: linux.txt,v 1.12 2003/12/11 09:57:01 honda Exp $
57------------------------------------------------------------------------
58
59
601.Linux 上での動作環境の概要
61
62TOPPERS/JSP のシミュレーション環境として、Linux 上で動作する設定を用意
63している。このシミュレーション環境は、Linux の 1つのプロセスの中で複数
64のタスクを切り替えて動作させる。
65
66
671.1. サポートしていない機能
68
69Linux 上のシミュレーション環境では、TOPPERS/JSP が持っている機能の内
70、
71以下の機能はサポートしていない。
72
73・CPU例外ハンドラ
74・def_int システムコール
75・性能評価用システム時刻参ç…
76§æ©Ÿèƒ½
77
78CPU例外ハンドラについては,CPU例外ハンドラ自体の登録は可能であるが,
79CPU例外ハンドラ内
80で,CPU例外が発生したコントキストや状æ…
81‹ã‚’参ç…
82§ã§ãã‚‹
83vxsns_XXX はCPU例外ハンドラにラッパーをかぶせることで実現できると思わ
84れるが現在のところはサポートしていない.
85
86
871.2. 動作環境
88
89TOPPERS/JSP Linux のシュミレーション環境は、シグナルスタックの機能を使
90用するため、次のバージョン Linux カーネルとglibcが必
91要となる.
92
93 ・カーネル : 2.2 以上
94 ・glibc : 2.1 以上
95
96次のディストリビューションでの動作を確認してる.
97
98 ・Vine Linux 2.5,2.6
99 ・Debian GNU/Linux 3.0
100
101
102
1031.3. 割込み
104
105Linux 上のシミュレーション環境では、シグナルが割込みに対応する.シグナ
106ルハンドラは割込みハンドラとして扱われ、シグナルマスクが割込みマスクに
107対応する。ユーザがシグナルハンドラを定義することも可能であるが、一定の
108ルールに従うことが必
109要である。
110
111Linux のシグナルの内
112、SIGUSR1 起動時処理、タスクディスパッチ処理のため
113に用いているため、ユーザが利用することはできない。また、SIGALRM はカー
114ネル内
115のタイマ割込みとして用いている.設定によっては,SIGIO のハンドラ
116もカーネル内
117で定義される(SIGIO の扱いについては3章を参ç…
118§ï¼‰ã€‚
119
120
121
1221.4. 時間管理
123
124周期割込みの間隔は 10ミリ秒を標準としているが、ターゲット依存のタイマ
125モジュールのみの修正で変更できる。シミュレーション環境å…
126¨ä½“が 1つのプロ
127セスとして実行されるため,シミュレーション環境å…
128¨ä½“に割り当てられる CPU
129時間が UNIX のスケジューラによって決められる。そのため、高い時間精度を
130期待
131することはできない。
132
133
134
135
1362.システムコール仕様の違い
137
138以下では,BSD UNIX上でのシミュレーション環境での,各システムコールの仕
139様の違いについて述べる.
140
141(1) loc_cpu 割込みとディスパッチの禁止
142
143・loc_cpu は,すべてのシグナルをマスクした状æ…
144‹ã«è¨­å®šã™ã‚‹ï¼Ž
145
146(2) unl_cpu 割込みとディスパッチの許可
147
148・unl_cpu は,すべてのシグナルマスクを解除した状æ…
149‹ã«è¨­å®šã™ã‚‹ï¼Ž
150
151(3) chg_iXX 割込みマスク変更
152
153・名称は chg_ims としている。chg_ims をサポートするかどうかを、
154SUPPRT_CHG_IMS を定義するかどうかで変更できる。chg_ims は、シグナルマ
155スクを指定した値に設定する。タスクコンテキストでは、ディスパッチャを呼
156び出す SIGUSR1 シグナルのマスクを設定することはできない。(設定しようと
157すると E_PAR エラーになる)。また、非タスクコンテキストでは SIGUSR1 を
158解除することはできない。(解除しようとすると E_PAR エラーになる)。タス
159クコンテキストでchg_ims により設定した値はディスパッチが発生しても他の
160タスクに引き継がれる。非タスクコンテキストで設定した場合は、その非タス
161クコンテキストの中でのみ有効である。
162
163(4) get_iXX 割込みマスク参ç…
164§
165
166・名称は get_ims としている。ref_ims は、シグナルマスクの現在値を読み
167出すシステムコールである。
168
169
170(5) vget_tim 性能評価用システム時刻参ç…
171§
172
173・サポートしていない.
174
175
176
1773.ノンブロッキングI/O
178
1793.1. ノンブロッキングI/O の必
180要性
181
182TOPPERS/JSP のシミュレーション環境å…
183¨ä½“が 1つのプロセスとして動作してい
184るため、TOPPERS/JSP のタスクから UNIX カーネル内
185でブロックするシステム
186コールを呼び出した場合、シミュレーション環境å…
187¨ä½“がブロックされ、他のタ
188スクを実行することができなくなる(厳密には,ブロック中にシグナルを受け
189取った場合には,ブロックが解除されて実行を継続できる)。そのため,UNIX
190カーネル内
191でのブロックが起こらないように、低速の I/Oアクセスは、ノンブ
192ロッキングモードで行う必
193要がある。
194
195Linux のノンブロッキングI/Oモードでは、通常であればカーネル中でブロッ
196クされるような read/writeシステムコールからもすぐにリターンしてくる
197(この時,これらのシステムコールは EWOULDBLOCK エラーを報告する).さ
198らに非同期I/Oモードを併用すると、それらのシステムコールを呼び出しても
199ブロックされない状況になった時に、UNIXカーネルは SIGIO シグナルを使っ
200てそのことをプロセスに知らせる。
201
202
2033.2. TOPPERS/JSP におけるサポート
204
205Linux のノンブロッキングI/O を TOPPERS/JSP のタスクから利用するために
206は、SIGIO を捕まえるシグナルハンドラを定義し、捕まえたシグナルを何らか
207の形でタスクに通知する必
208要がある。そのための手段として、TOPPERS/JSP で
209は、SIGIO シグナルの発生により呼び出されるコールバック関数を登録する機
210能を用意している。
211
212å…
213·ä½“的には、SIGIO シグナルによりコールバック関数を実行させたい場合には、
214SIGIO 通知イベントブロック(SIGIOEB)を用意し、その callback フィール
215ドにコールバック関数へのポインタ、arg フィールドにコールバック関数へ渡
216す引数を設定し、eneuque_sigioeb を用いて SIGIO 通知イベントキューに登
217録する。SIGIO シグナルが発生すると、登録したコールバック関数がすべて呼
218び出される。コールバック関数が 0 を返すと、関連する SIGIO 通知イベント
219ブロックはキューに登録されたままとなり、続く SIGIO シグナルで再び同じ
220コールバック関数が呼び出される。コールバック関数が 0 以外を返すと、
221SIGIO 通知イベントブロックはキューから削除され、コールバック関数はそれ
222以降呼び出されなくなる(include/linux_sigio.h,systask/linux_sigio.c)。
223なお、SIGIO 通知イベントキューに登録する eneuque_sigioeb はセマフォを
224使用するために、非タスクコンテキストから呼べないため、システム起動時の
225初期化ルーチン等からは、enqueue_sigioeb_initialize を用いる。
226
227ノンブロッキングI/O サポートモジュールは、コールバック関数を呼び出すた
228めに、内
229部でタスクを 1つ(tskid = TSK_LINUX_SIGIO)と、SIGIO 通知イベ
230ントキューに対する排他アクセスのためにセマフォを 1つ(semid =
231SEM_LINUX_SIGIO)を用いている。ノンブロッキングI/O サポートモジュール
232を用いるためには、システム構成設定ファイルで、内
233部で用いるタスクおよび
234セマフォが使えるように設定しなければならない。
235
236
2373.5. 疑似シリアルドライバ
238
239Linux 上のシミュレーション環境を、ネイティブ環境となるべく近いものとす
240るために、ネイティブ環境のシリアルインタフェースドライバと同等の機能を
241持つ疑似シリアルドライバを用意している(systask/linux_serial.c)。疑似
242シリアルドライバは、上で述べたノンブロッキングI/O の機能を用いて、シリ
243アルポートに対するå…
244¥å‡ºåŠ›ã‚’、標準å…
245¥å‡ºåŠ›ã«å¯¾ã—て行うものである。
246
247
2484.インストール・その他
249
2504.1. インストール
251
252Linux 上のシミュレーション環境をインストールするには、TOPPERS/JSP の標
253準リリースに含まれる以外に、以下のツールが必
254要である。
255
256 GNU Cコンパイラ
257 BINUTILS アセンブラ,リンカなど
258 perl 5(動作確認は 5.005_03)
259 GNU Make(動作確認は 3.78.1)
260
261
2624.2. 疑似シリアルドライバ使用上の注意
263
264疑似シリアルドライバは、標準å…
265¥åŠ›ã‚’ノンブロッキングの RAWモードに設定す
266る。標準å…
267¥åŠ›ã‚’ノンブロッキングの RAWモードに設定したままの状æ…
268‹ã§ãƒ—ログ
269ラムを終了すると、シェルが正しく動作しなくなる。そのため,TOPPERS/JSP
270を終了する前に必
271ず標準å…
272¥åŠ›ã‚’å…
273ƒã®çŠ¶æ…
274‹ã«æˆ»ã™å¿…
275要があるが、プロセスを終了
276させるシグナルは数多くあり、そのすべてには対処していない。また、ユーザ
277プログラムで捕まえることのできないシグナルもあり、完å…
278¨ã«å¯¾å‡¦ã™ã‚‹ã“とは
279不可能である。
280
281
2824.3. デバッガ使用上のヒント
283
284Linux上のシミュレーション環境は、UNIX上のシンボリックデバッガと組み合
285わせて使うことで、TOPPERS/JSP を用いたシステムのデバッグに力を発揮する
286わけだが、デバッガと組み合わせて使う上で、TOPPERS/JSP がタスク切り替え
287に SIGUSR1シグナルを使っているために、タスク切り替えの度にデバッガに制
288御が戻ってしまうという問題がある。GNU シンボリックデバッガ(GDB)の場
289合には、次のコマンドによりデバッガが SIGUSR1 を捕まえないように設定す
290ることができる。
291
292 (gdb) handle SIGUSR1 nostop noprint
293
294このコマンドを、.gdbinit に設定しておくと便利である。
295
296また、条件付ブレークポイントをサポートしているデバッガの場合は、特定の
297タスクが特定のアドレスを実行した場合に限って実行を停止させることができ
298る(停止するのは、システムå…
299¨ä½“で、特定のタスクだけではない)。例えば、
300GDB の場合には、次のコマンドにより、ID が TSKID のタスクが関数 FUNC を
301呼び出した場合にのみ実行を停止させることができる(厳密には、この指定方
302法では、ID が TSKID のタスクが実行中に起動された割込みハンドラが FUNC
303を呼び出した場合にも停止する)。
304
305 (gdb) break FUNC if _kernel_runtsk == &_kernel_tcb_table[TSKID-1]
306
307
308
309
310
311
Note: See TracBrowser for help on using the repository browser.