source: asp3_wo_tecs/trunk/cfg/doc/cfg_user.txt@ 306

Last change on this file since 306 was 306, checked in by ertl-honda, 7 years ago

3.1.0を反映

File size: 41.8 KB
Line 
1
2 TOPPERS第3世代カーネル向け Ruby版コンフィギュレータ
3 ユーザーズマニュアル
4
5 対応バージョン: Release 1.2.1
6 最終更新: 2016年3月17日
7
8このドキュメントは,TOPPERS第3世代カーネル向けRuby版コンフィギュレータ
9を使用するために必
10要な事項
11を説明するものである.Rubyについての知識があ
12ることを前提に記述している.
13
14----------------------------------------------------------------------
15 TOPPERS Configurator by Ruby
16
17 Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN
18 Copyright (C) 2015,2016 by Embedded and Real-Time Systems Laboratory
19 Graduate School of Information Science, Nagoya Univ., JAPAN
20
21 上記著作権者
22は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
23 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
24 変・再é…
25å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
26 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
27 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
28 スコード中に含まれていること.
29 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
30 用できる形で再é…
31å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
32å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
33 者
34マニュアルなど)に,上記の著作権表示,この利用条件および下記
35 の無保証規定を掲載すること.
36 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
37 用できない形で再é…
38å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
39 と.
40 (a) 再é…
41å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
42マニュアルなど)に,上記の著
43 作権表示,この利用条件および下記の無保証規定を掲載すること.
44 (b) 再é…
45å¸ƒã®å½¢æ…
46‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
47 報告すること.
48 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
49 害からも,上記著作権者
50およびTOPPERSプロジェクトをå…
51è²¬ã™ã‚‹ã“と.
52 また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
53 由に基づく請求からも,上記著作権者
54およびTOPPERSプロジェクトを
55 å…
56è²¬ã™ã‚‹ã“と.
57
58 本ソフトウェアは,無保証で提供されているものである.上記著作権者
59お
60 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
61 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
62 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
63 の責任を負わない.
64
65 $Id: cfg_user.txt 128 2016-05-14 14:49:32Z ertl-hiro $
66----------------------------------------------------------------------
67
68○目次
69
701.Ruby版コンフィギュレータの概要
71 1.1 位置付けと概要
72 1.2 パス1の処理の概要
73 1.3 パス2の処理の概要
74 1.4 パス3の処理の概要
75 1.5 パス4の処理の概要
762.コンフィギュレータの起動
773.静的APIテーブル
78 3.1 静的APIテーブルの文法
79 3.2 静的APIテーブルの記述例
804.値取得シンボルテーブル
81 4.1 値取得シンボルテーブルの文法
82 4.2 値取得シンボルテーブルの記述例
835.生成スクリプト
84 5.1 NumStrクラス
85 5.2 コンフィギュレータから生成スクリプトに渡される変数
86 5.3 生成スクリプトからコンフィギュレータに渡す変数
87 5.4 パス間で引き渡す変数
88 5.5 エラー出力関数
89 5.6 GenFileクラス
90 5.7 その他のライブラリ
916.その他
92 6.1 オブジェクトIDの指定
93 6.2 システムサービスへの対応(パス2における処理フェーズ)
947.バージョン履歴
95
96
971.Ruby版コンフィギュレータの概要
98
991.1 位置付けと概要
100
101TOPPERS第3世代カーネル向け Ruby版コンフィギュレータ(以下,単にコンフィ
102ギュレータという)は,ユーザが記述したシステムコンフィギュレーションファ
103イルから,カーネルやシステムサービスの構成・初期化情
104報を含むファイルな
105どを生成するツールである.TOPPERS第3世代カーネルにおけるシステムコンフィ
106ギュレーション手順については,「TOPPERS第3世代カーネル(ITRON系)統合仕
107様書」の「2.12 システムコンフィギュレーション手順」の節を参ç…
108§ã™ã‚‹ã“と.
109
110コンフィギュレータは,TOPPERS第3世代カーネルに属する各種のカーネルやそ
111の上で動作するシステムサービスに適用できるように,各カーネル/システム
112サービスでå…
113±é€šã«åˆ©ç”¨ã§ãã‚‹ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚¿æœ¬ä½“と,カーネル/システム
114サービス毎の設定ファイルで構成される.生成すべきカーネルやシステムサー
115ビスの構成・初期化情
116報が,ターゲットシステムによって異なる場合には,ター
117ゲット毎の設定ファイルも用意する.このマニュアルでは,カーネル/ターゲッ
118ト毎の設定ファイルの記述方法について説明する.
119
120「TOPPERS第3世代カーネル(ITRON系)統合仕様書」の「2.12.5 コンフィギュ
121レータの処理モデル」の節に説明がある通り,コンフィギュレータは,3つない
122しは4つのパスにより処理を行う.以下では,各パスの処理概要を説明する.
123
1241.2 パス1の処理の概要
125
126コンフィギュレータのパス1は,システムコンフィギュレーションファイルを解
127釈し,そこに含まれる静的APIの整数定数式パラメータの値などをCコンパイラ
128を用いて求めるために,パラメータ計算用C言語ファイル(cfg1_out.c)を生成
129する.また,パス2に引き渡す情
130報を,パス1データファイル(cfg1_out.db)に
131出力する.
132
133パス1は,静的APIテーブル(xxx_api.def)と値取得シンボルテーブル
134(xxx_sym.def)の2つの設定ファイルを用いる.静的APIテーブルには,静的
135APIの一覧と,各静的APIのパラメータに関する情
136報を記述する.値取得シンボ
137ルテーブルには,静的APIの整数定数式パラメータ以外で,パラメータ計算用C
138言語ファイルに出力して値を求めたいシンボル(一般には式)を記述する.静
139的APIテーブルの記述方法は3章で,値取得シンボルテーブルの記述方法は4章
140で説明する.
141
142パス1が生成したパラメータ計算用C言語ファイルは,Cコンパイラおよび関連ツー
143ルを用いてコンパイルし,ロードモジュールを生成する.また,それをSレコー
144ドフォーマットの形に変換したSレコードファイル(cfg1_out.srec)と,その
145中の各シンボルとアドレスの対応表を含むシンボルファイル(cfg1_out.syms)
146を生成する.
147
1481.3 パス2の処理の概要
149
150コンフィギュレータのパス2は,パス1で生成されたロードモジュールのSレコー
151ドファイル(cfg1_out.srec)とシンボルファイル(cfg1_out.syms)から,静的
152APIの整数定数式パラメータの値と,値取得シンボルテーブルに記述したシンボ
153ル(一般には式)の値を取り出す.また,パス1データファイル(cfg1_out.db)
154を読み,パス1からの情
155報を受け取る.
156
157パス2では,これらの情
158報から,カーネル/システムサービスの構成・初期化ファ
159イル(カーネルの場合は,kernel_cfg.c)と構成・初期化ヘッダファイル(カー
160ネルの場合は,kernel_cfg.h)を生成する.また,パス3に引き渡す情
161報を,パ
162ス2データファイル(cfg2_out.db)に出力する.カーネル/システムサービス/
163ターゲットによっては,その他のファイルを生成する場合もある.å…
164·ä½“的には,
165保護機能対応カーネルでは,仮のメモリ構成・初期化ファイル(kernel_mem2.c)
166と仮のリンカスクリプト(自動メモリé…
167ç½®ã®å ´åˆã®ã¿ï¼‰ã‚’生成する.
168
169パス2におけるファイル生成の方法は,パス2の設定ファイルである生成スクリ
170プト(カーネルであれば,target_kernel.trb)に記述する.生成スクリプトの
171記述方法は5章で説明する.
172
173パス2で生成されたファイルを,他のソースファイルとあわせてコンパイルし,
174アプリケーションのロードモジュールを生成する.また,それをSレコードフォー
175マットの形に変換したSレコードファイル(ASP3カーネルの場合は,asp.srec)
176と,その中の各シンボルとアドレスの対応表を含むシンボルファイル(ASP3カー
177ネルの場合は,asp.syms)を生成する.
178
1791.4 パス3の処理の概要
180
181保護機能対応でないカーネルの場合や,保護機能対応カーネルで手動メモリé…
182
183置の場合には,コンフィギュレータのパス3では,パス2で生成されたロードモ
184ジュールのSレコードファイルとシンボルファイルから,静的APIのパラメータ
185の値などを取り出し,妥当性のチェックを行う.
186
187パス3における妥当性チェックの方法は,パス3の設定ファイルである生成スク
188リプト(カーネルであれば,target_check.trb)に記述する.生成スクリプト
189の記述方法は5章で説明する.
190
191保護機能対応カーネルで自動メモリé…
192ç½®ã®å ´åˆã«ã¯ï¼Œãƒ‘ス3は最適化のためのパ
193スで,オプションである.
194
195パス3を使用する場合,パス2で生成されたロードモジュールのSレコードファイ
196ルとシンボルファイルから,静的APIのパラメータの値やメモリオブジェクトが
197é…
198ç½®ã•ã‚ŒãŸç•ªåœ°ã‚„サイズなどを取り出し,仮のメモリ構成・初期化ファイル
199(kernel_mem3.c)を生成する.ターゲットによっては,仮のリンカスクリプト
200も生成する.また,パス4に引き渡す情
201報を,パス3データファイル
202(cfg3_out.db)に出力する.
203
2041.5 パス4の処理の概要
205
206保護機能対応カーネルで自動メモリé…
207ç½®ã®å ´åˆã«ã¯ï¼Œãƒ‘ス4において,パス3で
208生成されたロードモジュールのSレコードファイルとシンボルファイル(パス3
209を省く場合には,パス2の生成物を使う)から,メモリオブジェクトがé…
210ç½®ã•ã‚Œ
211た番地やサイズなどを取り出し,メモリ構成・初期化ファイル(kernel_mem.c)
212を生成する.ターゲットによっては,リンカスクリプトも生成する.
213
214
2152.コンフィギュレータの起動
216
217コンフィギュレータは,システムコンフィギュレーションファイル名(パス1で
218のみ有効)をパラメータに取り,以下のオプションを持つ.
219
220 -k[--kernel]<カーネル名>
221 カーネルの名称を指定する.
222
223 -p[--pass]<パス番号>
224 パス番号を指定する.1〜4のいずれか.
225
226 -I[--include-directory]<インクルードディレクトリ名>
227 INCLUDEディレクティブによりインクルードするコンフィギュレーショ
228 ンファイルを探すディレクトリ名を指定する.生成スクリプト(trbファ
229 イル)を探す場合にも用いる.
230
231 -T[--trb-file]<生成スクリプト名>
232 生成スクリプト(trbファイル)の名称を指定する.パス2以降で有効.
233 パス2において処理フェーズの機能(6.2節参ç…
234§ï¼‰ã‚’用いる場合には,
235 <生成スクリプト名>として,ファイル名に":"と処理フェーズ名を付加
236 したもの(途中に空白をå…
237¥ã‚Œã¦ã¯ãªã‚‰ãªã„)を指定する.
238
239 --api-table <静的APIテーブルファイル名>
240 静的APIテーブルのファイル名を指定する.パス1でのみ有効.
241 パス2において処理フェーズの機能(6.2節参ç…
242§ï¼‰ã‚’用いる場合には,
243 <静的APIテーブルファイル名>として,ファイル名に":"と処理フェー
244 ズ名を付加したもの(途中に空白をå…
245¥ã‚Œã¦ã¯ãªã‚‰ãªã„)を指定する.
246
247 --symval-table <値取得シンボルテーブルファイル名>
248 値取得シンボルテーブルのファイル名を指定する.パス1でのみ有効.
249
250 -r[--rom-image]<ロードモジュールのSレコードファイル名>
251 ロードモジュールをSレコードフォーマットの形に変換したファイルの
252 名称を指定する.生成スクリプトのためのBCOPY関数とPEEK関数は,こ
253 のオプションで指定したSレコードファイルを操作対象とする.パス2
254 以降で有効.
255
256 -s [--rom-symbol] <ロードモジュールのシンボルファイル名>
257 ロードモジュール中の各シンボルとアドレスの対応表を含むシンボル
258 ファイルの名称を指定する.生成スクリプトのためのSYMBOL関数は,
259 このオプションで指定したシンボルファイルを操作対象とする.パス
260 2以降で有効.
261
262 --id-output-file <ID番号出力ファイル名>
263 オブジェクトのID番号の割付け結果を,指定した名前のファイルに書
264 き出す.パス2でのみ有効.
265
266 --id-input-file <ID番号å…
267¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«å>
268 オブジェクトのID番号の割付けを,指定した名前のファイルから取り
269 込む.パス1とパス2で有効.パス1ではドメインのID番号,パス2では
270 その他のオブジェクトのID番号を用いる.
271
272 -M[--print-dependencies]<依存関係ファイル名>
273 システムコンフィギュレーションファイルの依存関係を出力する.パ
274 ス1でのみ有効.GCCの-Mオプションと異なり,-Mオプションを付けた
275 場合も,コンフィギュレータは通常の処理を行う(依存関係を出力す
276 るだけという使い方はできない).依存関係ファイル名を指定しない
277 場合,標準出力に出力する.
278
279 -O [--omit-output-db]
280 次のパスに情
281報を引き渡すためのデータファイルを作成しない.
282
283 -vï¼»--versionï¼½
284 コンフィギュレータのバージョンを表示する.
285
286 -h [--help]
287 オプションのリストと説明を表示する.
288
289
2903.静的APIテーブル
291
292静的APIテーブルは,静的APIの一覧と,各静的APIのパラメータに関する情
293報を
294記述するファイルで,コンフィギュレータのパス1で用いる.
295
2963.1 静的APIテーブルの文法
297
298静的APIテーブルの各行には,静的API名に続けて,パラメータリストを記述す
299る.静的API名と各パラメータは,空白文字で区切る.
300
301静的API名を,以下の形式で記述すると,派生静的APIは,å…
302ƒé™çš„APIとパラメー
303タリストが異なるだけの同じ静的APIであると扱われる.
304
305 <派生静的API名>[<å…
306ƒé™çš„API名>]
307
308パラメータリストには,静的APIの各パラメータの文字列記述を列挙する.また,
309"{"および"}"もパラメータと同様に扱い,パラメータリストに列挙する."{"お
310よび"}"は,静的APIの構文解析のために必
311要となる.
312
313各パラメータの文字列記述は,パラメータの種別を表す文字に続けて,パラメー
314タ名を記述する.必
315要な場合には,それに続けて,パラメータの属性を表す文
316字列(または文字)を記述する.
317
318パラメータの種別を表す文字は次の通り.
319
320 # オブジェクト識別名(定義)
321 % オブジェクト識別名(参ç…
322§ï¼‰
323 . 符号無し整数定数式パラメータ
324 + 符号付き整数定数式パラメータ
325 & 一般定数式パラメータ
326 $ 文字列パラメータ
327
328パラメータの属性を表す文字列(または文字)は次の通り.
329
330 * キーパラメータ
331 ? オプションパラメータ(パラメータが無くても良い)
332 ... リストパラメータ(パラメータが複数(0個以上)あっても良い)
333
334キーパラメータ(*属性)とは,この静的APIに関するパラメータ情
335報をコンフィ
336ギュレーションデータ($cfgData)に格納する際に,このパラメータをハッシュ
337のキーとして使用することを示す.パラメータリスト中の0または1つのパラメー
338タを,キーパラメータに指定する(複数のパラメータをキーパラメータに指定
339した場合,その中で最後のパラメータがキーパラメータとして使われる).詳
340しくは,「5.2.2 コンフィギュレーションデータ」の節を参ç…
341§ã™ã‚‹ã“と.
342
343パラメータリストに記述した"{"に"?"を付加すると(つまり,"{?"と記述する
344と),"{?"と"}"で囲まれたパラメータ群がオプションである(無くても良い)
345ことを示す.
346
3473.2 静的APIテーブルの記述例
348
349----------------------------------------
350CRE_SEM #semid* { .sematr .isemcnt .maxsem }
351CFG_INT .intno* { .intatr +intpri }
352DEF_ICS { .istksz &istk }
353ATT_MEM { .mematr &base .size } {? .acptn1 .acptn2 .acptn3 .acptn4 }
354ATT_PMA[ATT_MEM] { .mematr &base .size .paddr } {? .acptn1 .acptn2 .acptn3 .acptn4 }
355----------------------------------------
356
357この記述で,ATT_PMAの情
358報は,コンフィギュレーションデータ($cfgData)に
359格納する際に,ATT_MEMの情
360報に統合される.
361
362
3634.値取得シンボルテーブル
364
3654.1 値取得シンボルテーブルの文法
366
367値取得シンボルテーブルの各行の文法と,各パラメータの意味は次の通り.
368
369----------------------------------------
370<変数名>, <式>, <式の型>, <条件>, <条件が成立しない時の式>
371----------------------------------------
372
373<変数名>
374 値を取得する変数の名前(グローバル変数であることを示す$は記述しない)
375 を記述する.<変数名>の記述は省略することができない.
376
377<式>
378 値を表す式を記述する.<式>の記述を省略した場合には,<変数名>の記述
379 が式として使われる.式の中に","を含む場合には,式å…
380¨ä½“ã‚’"で囲む.
381
382<式の型>
383 値を真偽値で取得したい場合は"bool",符号付き整数値で取得したい場合
384 には"signed",符号無し整数値で取得したい場合には"unsigned"を記述す
385 る.記述を省略した場合には,符号無し整数値と扱われる.
386
387<条件>
388 値を取得する条件を記述する.<条件>中では,あるシンボルがマクロ定義
389 されているかどうかを判別するために,defined(<シンボル>)を使用するこ
390 とができる.
391
392<条件が成立しない時の式>
393 <条件>が成立しなかった場合に,変数に設定する値を表す式を記述する.
394 記述を省略すると,<条件>が成立しなかった場合に,変数には値が設定さ
395 れない(変数を参ç…
396§ã™ã‚‹ã¨nilとなる).
397
3984.2 値取得シンボルテーブルの記述例
399
400値取得シンボルテーブルの記述例と,各記述の意味は次の通り.
401
402(記述例1) 単純な定数値の取得
403
404----------------------------------------
405TA_ACT
406----------------------------------------
407
408変数$TA_ACTに,TA_ACTの値を取得する.
409
410(記述例2) 式の値の取得
411
412----------------------------------------
413sizeof_uint_t,sizeof(uint_t)
414----------------------------------------
415
416変数$sizeof_uint_tに,sizeof(uint_t)の値を取得する.
417
418(記述例3) 符号の指定
419
420----------------------------------------
421TMAX_TPRI,,signed
422----------------------------------------
423
424変数$TMAX_TPRIに,TMAX_TPRIの値を符号付きで取得する.
425
426(記述例4) 値を取得する条件の記述
427
428----------------------------------------
429SIL_ENDIAN_BIG,1,,defined(SIL_ENDIAN_BIG)
430----------------------------------------
431
432SIL_ENDIAN_BIGがマクロ定義されていた場合,変数$SIL_ENDIAN_BIGに1を設定
433する.定義されていなかった場合,変数$SIL_ENDIAN_BIGは定義されない(参ç…
434§
435するとnilとなる).
436
437(記述例5) 条件が成立しない時の式の記述
438
439----------------------------------------
440TARGET_TSKATR,,,defined(TARGET_TSKATR),0
441----------------------------------------
442
443TARGET_TSKATRがマクロ定義されていた場合,変数$TARGET_TSKATRに
444TARGET_TSKATRの値を取得する.定義されていなかった場合,変数
445$TARGET_TSKATRは0とする.
446
447
4485.生成スクリプト
449
450この章では,生成スクリプトを記述するにあたって必
451要な事項
452を説明する.
453
4545.1 NumStrクラス
455
456コンフィギュレータは,静的APIの整数定数式パラメータを評価し,値を求める.
457生成スクリプトで条件分岐やエラーチェックを行う際には,求めた値を参ç…
458§ã—
459たい.一方,パラメータをkernel_cfg.cなどのファイルに出力する際には,パ
460ラメータを評価して求めた値ではなく,å…
461ƒã«ãªã£ãŸæ–‡å­—列を出力した方が可読
462性が高い.つまり,各パラメータに対して,値と文字列の両方を保持したい.
463
464これを実現するために,値と文字列の組を管理するNumStrクラスを用意してい
465る.コンフィギュレータは,静的APIの各パラメータに対して,与えた文字列と
466それを評価して求めた値から,NumStrクラスのオブジェクトを生成する.
467
468NumStrクラスは,プリントするなど文字列に変換する場合以外は,数値として
469扱うことができる.å…
470·ä½“的には,四則演算などの数値に対するメソッドについ
471ては,NumStrオブジェクトの値に対して適用される.プリントするなど文字列
472に変換する場合には,NumStrオブジェクトの文字列が用いられる.
473
4745.2 コンフィギュレータから生成スクリプトに渡される変数
475
476この節では,コンフィギュレータ本体が定義し,生成スクリプトに渡される変
477数について説明する.
478
4795.2.1 値取得シンボル
480
481値を求めたいシンボル(一般には式)として,値取得シンボルテーブルに記述
482したシンボルに対応する変数.
483
4845.2.2 コンフィギュレーションデータ($cfgData)
485
486システムコンフィギュレーションファイルに記述され,条件ディレクティブに
487よって除外されなかった静的APIとそのパラメータは,$cfgDataに格納して生成
488スクリプトに渡される.$cfgDataは,3重のハッシュ(ハッシュのハッシュのハッ
489シュ)で,å…
490·ä½“的な構造は以下の通りである.
491
492$cfgDataは,静的API名をシンボル化したもの(例えば,静的API名がCRE_SEMで
493あれば,:CRE_SEM)をキーとし,同一種類のすべての静的API(例えば,システ
494ムコンフィギュレーションファイル中にCRE_SEMが5つあれば,そのすべて)の
495情
496報を値とするハッシュである.
497
498同一種類のすべての静的APIの情
499報は,個々
500の静的APIの識別番号をキーとし,
501パラメータ情
502報を値とするハッシュである.ハッシュのキーとなる静的APIの識
503別番号には,静的APIテーブル中でキーパラメータに指定したパラメータの値が
504使われる.キーパラメータがオブジェクト識別名である場合,そのID番号がキー
505となる.また,整数定数式パラメータである場合には,その値がキーとなる.
506キーパラメータが指定されていない場合には,同一種類の静的APIの中での出現
507順序(1から開始)がキーとなる.同じキーを持った静的APIが複数記述されて
508いた場合には,コンフィギュレータ本体でエラーを検出する.このハッシュは,
509システムコンフィギュレーションファイル中での静的APIの出現順に格納されて
510いる.
511
512パラメータ情
513報は,パラメータ名をシンボル化したもの(例えば,パラメータ
514名がisemcntであれば,:isemcnt)をキーとし,パラメータ値を値とするハッシュ
515である.パラメータ値は,オブジェクト識別名か整数定数式パラメータの場合
516にはNumStrクラスのオブジェクト,一般定数式パラメータか文字列パラメータ
517の場合は文字列(Stringクラスのオブジェクト)で表す.パラメータがリスト
518パラメータである場合には,各パラメータをNumStrクラスのオブジェクトまた
519は文字列で表したもののé…
520åˆ—を値とする.
521
522静的APIがドメインの囲みに含まれている場合には,:domainをキーとして,ド
523メインIDの数値を値としたハッシュエントリを,パラメータ情
524報に追加する.
525また,クラスの囲みに含まれている場合には,:classをキーとして,クラスID
526をNumStrクラスのオブジェクトとしたハッシュエントリを,パラメータ情
527報に
528追加する.
529
530さらに,その静的APIに関するエラーメッセージ出力のために,パラメータ情
531å ±
532には,:apinameをキーとして静的API名を,:_file_と:_line_をキーとして,そ
533れぞれ,その静的APIが記述されているファイル名と行番号を格納している.
534
535$cfgDataの例として,静的APIテーブルが「3.2 静的APIテーブルの記述例」の
536節に挙げた例の通りで,システムコンフィギュレーションファイルの内
537容が,
538
539----------------------------------------
540CRE_SEM(SEM1, { TA_TPRI, 0, 1 });
541CFG_INT(INTNO1, { TA_NULL, INTPRI1 });
542DEF_ICS { I_STACK_SIZE, i_stack }
543----------------------------------------
544
545である時,$cfgDataは次の内
546容となる(TA_TPRIは1,INTNO1は10,TA_NULLは0,
547INTPRI1は-2,I_STACK_SIZEは4196に定義されていることを仮定している).
548
549----------------------------------------
550{:CRE_SEM=>
551 {1=>
552 {:semid=>NumStr(1,"SEM1"),
553 :sematr=>NumStr(1,"TA_TPRI"),
554 :isemcnt=>NumStr(0,"0"),
555 :maxsem=>NumStr(1,"1"),
556 :apiname=>"CRE_SEM",
557 :_file_=>"sample.cfg",
558 :_line_=>1}},
559 :CFG_INT=>
560 {10=>
561 {:intno=>NumStr(10,"INTNO1"),
562 :intatr=>NumStr(0,"TA_NULL"),
563 :intpri=>NumStr(-2,"INTPRI1"),
564 :apiname=>"CFG_INT",
565 :_file_=>"sample.cfg",
566 :_line_=>2}},
567 :DEF_ICS=>
568 {1=>
569 {:istksz=>NumStr(4196,"I_STACK_SIZE"),
570 :istk=>"i_stack",
571 :apiname=>"DEF_ICS",
572 :_file_=>"sample.cfg",
573 :_line_=>3}}}
574----------------------------------------
575
576同一種類のすべての静的APIに対して処理を行いたい場合には,次のようにルー
577プを作るとよい(CRE_SEMの例).
578
579----------------------------------------
580$cfgData[:CRE_SEM].each do |key, params|
581 <個々
582の静的APIに対する処理>
583end
584----------------------------------------
585
586ここで,同一種類の静的APIは,システムコンフィギュレーションファイル中で
587の出現順序で格納されているため,上のループ内
588の処理は,静的APIの出現順で
589行われる.
590
591一方,6.1節で示すようにID番号の割付けを手動で行った場合,静的APIの出現
592順は,ID番号順に一致しているとは限らない.そのため,オブジェクトの初期
593化ブロックを生成する場合など,ID番号順に処理をしたい場合には,ハッシュ
594をソートする必
595要がある.å…
596·ä½“的には,次のようにループを作るとよい
597(CRE_SEMの例).
598
599----------------------------------------
600$cfgData[:CRE_SEM].sort.each do |key, params|
601 <個々
602の静的APIに対する処理>
603end
604----------------------------------------
605
606このループの中では,静的APIのパラメータの値と文字列は,NumStrクラスのオ
607ブジェクトとして,params[:maxcnt]の形で取り出すことができる(CRE_SEMの
608maxcntパラメータの例).
609
6105.2.3 インクルードファイルのリスト($includeFiles)
611
612システムコンフィギュレーションファイルに記述されたC言語プリプロセッサの
613インクルードディレクティブ(#include)で指定したファイル名のリストは,
614$includeFilesに格納して生成スクリプトに渡される.$includeFilesは,
615#includeの後に記述された文字列(""や<>を含む文字列)を要素とするé…
616åˆ—で
617ある.
618
6195.2.4 その他の変数
620
621(5-2-4-1) $asmLabel
622
623コンパイラがC言語の識別名からアセンブラのラベルを作る際に,å…
624ˆé ­ã«"_"が
625付く場合には,$asmLabelは"_"に設定される.そうでない場合には,""に設定
626される.
627
628(5-2-4-2) $endianLittle
629
630$endianLittleは,ターゲットプロセッサがリトルエンディアンの場合には
631true,ビッグエンディアンの場合にはfalseに設定される.
632
6335.3 生成スクリプトからコンフィギュレータに渡す変数
634
635この節では,生成スクリプトが定義し,コンフィギュレータ本体に渡される変
636数について説明する.
637
638(5-3-1) タイムスタンプファイル名($timeStampFileName)
639
640生成スクリプトにおいて$timeStampFileNameにファイル名を設定すると,コン
641フィギュレータ本体は,コンフィギュレータの正常終了時に,設定したファイ
642ル名で内
643容の空のファイルが作られる.
644
6455.4 パス間で引き渡す変数
646
647この節では,異なるパスの生成スクリプト間でデータを受け渡したい時に用い
648る変数について説明する.
649
650(5-4-1) パス2からパス3に引き渡すデータ($cfg2Data)
651
652パス2の生成スクリプトからパス3の生成スクリプトにデータを引き渡したい場
653合には,引き渡したいデータを$cfg2Data(ハッシュ)に設定する.
654
655(5-4-2) パス3からパス4に引き渡すデータ($cfg3Data)
656
657パス3の生成スクリプトからパス4の生成スクリプトにデータを引き渡したい場
658合には,引き渡したいデータを$cfg3Data(ハッシュ)に設定する.
659
6605.5 エラー出力関数
661
662この節では,生成スクリプト中でエラーを検出した場合に呼び出すべきエラー
663出力関数について説明する.
664
665(5-5-1) error_exit(message, location="")
666(5-5-2) error(message, location="")
667(5-5-3) warning(message, location="")
668
669messageとlocationから作成したエラーメッセージを出力する.error_exitは,
670メッセージの出力後にコンフィギュレータの処理を中断する.errorは,メッセー
671ジの出力後も処理を継続し,ファイルの生成処理前にコンフィギュレータの処
672理を中断する.warningは,そのまま処理を継続する.locationを省略した場合
673には,エラー発生箇所は出力されない.
674
675(5-5-4) def error_api(params, message)
676(5-5-5) def warning_api(params, message)
677
678paramsに静的APIのパラメータ情
679報を渡すと,静的APIが記述されているファイ
680ル名と行番号と,messageに渡したメッセージを出力する.
681
682(5-5-6) def error_ercd(errorCode, params, message)
683
684errorCodeにエラーコードの文字列,paramsに静的APIのパラメータ情
685報を渡す
686と,静的APIが記述されているファイル名と行番号と,エラーコード,message
687に渡したメッセージを出力する.
688
689(5-5-7) def error_wrong(errorCode, params, symbol, wrong)
690(5-5-8) def error_wrong_id(errorCode, params, symbol, objid, wrong)
691(5-5-9) def error_wrong_sym(errorCode, params, symbol, symbol2, wrong)
692
693パラメータに関するエラーメッセージを出力する.errorCodeにエラーコードの
694文字列,paramsに静的APIのパラメータ情
695報,symbolにエラーを起こしたパラメー
696タ名をシンボル化したもの,wrongにエラーの理由を渡す.
697
698エラーを起こした静的APIを識別するために,オブジェクトIDを出力したい場合
699には,error_wrong_idを用い,objidにオブジェクトIDを表すパラメータ名をシ
700ンボル化したものを渡す.オブジェクト番号を出力したい場合には,
701error_wrong_symを用い,symbol2にオブジェクト番号を表すパラメータ名をシ
702ンボル化したものを渡す.
703
704(5-5-10) def error_illegal(errorCode, params, symbol)
705(5-5-11) def error_illegal_id(errorCode, params, symbol, objid)
706(5-5-12) def error_illegal_sym(errorCode, params, symbol, symbol2)
707
708不正パラメータのエラーメッセージを出力する.errorCodeにエラーコードの文
709字列,paramsに静的APIのパラメータ情
710報,symbolに不正なパラメータ名をシン
711ボル化したものを渡す.
712
713エラーを起こした静的APIを識別するために,オブジェクトIDを出力したい場合
714には,error_illegal_idを用い,objidにオブジェクトIDを表すパラメータ名を
715シンボル化したものを渡す.オブジェクト番号を出力したい場合には,
716error_illegal_symを用い,symbol2にオブジェクト番号を表すパラメータ名を
717シンボル化したものを渡す.
718
7195.6 GenFileクラス
720
721GenFileクラスは,生成スクリプトによってファイルを作成するために用いるク
722ラスである.生成スクリプトにおいてGenFileクラスを用いて作成したファイル
723は,すぐにはファイルに書き出されず,生成スクリプトによってエラーが報告
724されなかった場合にのみ,コンフィギュレータ本体がファイルに書き出す.
725
726GenFileクラスを用いてファイルを作成した場合,同一ファイル名のファイルが
727すでに存在し,新しく作成したファイルがそれと同じ内
728容であれば,ファイル
729を書き出さない(そのため,タイムスタンプが更新されない).
730
731GenFileクラスの主なメソッドは,以下の通りである.
732
733(5-6-1) new(<ファイル名>)
734
735新しいファイルを作成する.同一のファイル名のファイルが作成済みの場合に
736は,作成済みのファイルの内
737容に,それ以降の内
738容を追加する.
739
740(5-6-2) add(<文字列>)
741(5-6-3) add2(<文字列>)
742(5-6-4) append(<文字列>)
743
744ファイルに文字列を書き出す(追記する).文字列を書き出した後に,addは改
745行1つを,add2は改行2つを書き出す.
746
747(5-6-5) comment_header(<文字列>)
748
749ファイルにコメントヘッダを書き出す(追記する).
750
7515.7 その他のライブラリ
752
7535.7.1 IncludeTrb(<生成スクリプト名>)
754
755指定した生成スクリプトを処理する.生成スクリプトは,コンフィギュレータ
756に対する--include-directoryオプションで指定したディレクトリから探す.
757
7585.7.2 Stringクラスの拡張
759
760Stringクラスに次の2つのメソッドを追加している.また,NumStrクラスもこれ
761らのメソッドを持つ.
762
763(5-7-2-1) quote
764
765二重引用符で囲まれた文字列を返す.
766
767(5-7-2-2) unquote
768
769二重引用符で囲まれた文字列を展開した文字列を返す.文字列が二重引用符で
770囲まれていない場合には,文字列をそのまま返す.
771
7725.7.3 ロードモジュール操作ライブラリ
773
774--rom-imageオプションと--rom-symbolオプションで指定したロードモジュール
775を操作するためのライブラリ関数を用意している.
776
777(5-7-3-1) SYMBOL(<シンボル>)
778
779--rom-symbolオプションで指定したシンボルファイルから,指定したシンボル
780のアドレスを返す.シンボルファイル中に指定したシンボルがない場合には
781nilを返す.
782
783(5-7-3-2) BCOPY(<コピーå…
784ƒå…
785ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹>, <コピーå…
786ˆå…
787ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹>, <サイズ>)
788
789--rom-imageオプションで指定したSレコードファイル中で,指定したパラメー
790タに従ってデータをコピーする.データは,コンフィギュレータのメモリ中で
791コピーするだけで,Sレコードファイルを書き換えるわけではない.
792
793(5-7-3-3) PEEK(<å…
794ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹>, <サイズ>[, <符号付きフラグ>])
795
796--rom-imageオプションで指定したSレコードファイルから,指定したå…
797ˆé ­ã‚¢ãƒ‰
798レスおよびサイズでデータを取り出し,値に変換して返す.<符号付きフラグ>
799を省略するかfalseにした場合には符号なしの値に,<符号付きフラグ>をtrueに
800した場合には符号付きの値に変換する.Sレコードファイルに指定したå…
801ˆé ­ã‚¢ãƒ‰
802レスおよびサイズのデータが含まれていない場合にはnilを返す.
803
804
8056.その他
806
8076.1 オブジェクトIDの指定
808
809TOPPERS第3世代カーネルでは,オブジェクトのID番号を,コンフィギュレータ
810が割り付ける方法が基本となっているが,ID番号の割付けを手動で設定したい
811場合のために,コンフィギュレータは,ID番号の割付けをファイルから取り込
812む機能を持っている.
813
814å…
815·ä½“的には,ID番号の割付けを記述したファイルを用意し,コンフィギュレー
816タのパス2に対する--id-input-fileオプションにより指定することで,コンフィ
817ギュレータはそれに従ってオブジェクトにID番号を割り付ける.ただし,
818TOPPERS第3世代カーネルでは,ID番号が連続していなければならないという制
819約があるため,この制約を満たせない割付けをしようとした場合には,コンフィ
820ギュレータ本体がエラーを報告する.
821
822また,コンフィギュレータのパス2に対する--id-output-fileオプションを用い
823ることで,割付け結果をファイルに書き出すことができる.前回のコンフィギュ
824レーション時にファイルに書き出した割付け結果を,次回のコンフィギュレー
825ション時に読み込むことで,システムコンフィギュレーションファイルの修正
826によりID番号の割付けを変化させないことができる.
827
8286.2 システムサービスへの対応(パス2における処理フェーズ)
829
830TCP/IPミドルウェアなどのシステムサービスのコンフィギュレーションに対応
831するために,パス2における処理フェーズの機能を設けている.
832
833システムサービスによっては,そのコンフィギュレーション内
834容に応じて,カー
835ネルオブジェクトの登録が必
836要になる場合がある.例えば,TCP/IPの通信端点
837を生成するごとに,セマフォを生成したい場合が考えられる.このような場合,
838まずシステムサービスのコンフィギュレーション処理を行い,その中でカーネ
839ルオブジェクトの登録情
840報を生成した後で,カーネルのコンフィギュレーショ
841ン処理を行いたい.これを可能にするために設けた機能が,パス2における処理
842フェーズの機能である.
843
844処理フェーズの機能を用いる場合には,静的APIテーブルファイルと生成スクリ
845プトをフェーズ毎に作成する.また,コンフィギュレータのオプションでこれ
846らのファイルを指定する際に,ファイル名に":"と処理フェーズ名を付加したも
847のを指定する.
848
849例えば,TCP/IPミドルウェアのコンフィギュレーション(処理フェーズ名を
850tcpipとする)とカーネルのコンフィギュレーション(処理フェーズ名を
851kernelとする)をこの順序で行う場合,パス1に渡すオプションを,
852
853 --api-table tinet_api.def:tcpip --api-table kernel_api.def:kernel
854
855のようにし,パス2に渡すオプションを,
856
857 -T tinet.trb:tcpip -T target_kernel.trb:kernel
858
859のようにする.-Tオプションの指定順序は,処理フェーズの処理順序に一致さ
860せる.
861
862システムサービスの生成スクリプトからカーネルオブジェクトを登録する場合
863には,静的APIの情
864報を格納したハッシュである$cfgFileInfoに,カーネルオブ
865ジェ宇土を生成する静的APIの情
866報を追加する.例えば,セマフォを追加登録し
867たい場合には,次のような処理を行う.
868
869----------------------------------------
870cfgInfo = { APINAME: "CRE_SEM" }
871cfgInfo["semid"] = "SEM1_FOR_SYSSVC1"
872cfgInfo["sematr"] = NumStr.new($TA_TPRI, "TA_TPRI")
873cfgInfo["isemcnt"] = 1
874cfgInfo["maxsem"] = 1
875$cfgFileInfo.push(cfgInfo)
876----------------------------------------
877
878上の処理でcfgInfoに登録する情
879報は,オブジェクト識別名については文字列
880(上の例では"semid"),整数定数式パラメータについては数値(上の例では
881"isemcnt"と"maxsem")またはNumStrクラスのオブジェクト(上の例では
882"sematr"),一般定数式パラメータと文字列パラメータについては文字列とす
883る.整数定数式パラメータをNumStrクラスのオブジェクトで与えた場合には,
884コンフィギュレータが生成するファイル中に文字列で出力される.
885
886なお,この方法で静的APIの情
887報を登録できるのは,後続の処理フェーズで処理
888される静的APIのみである.
889
890また,追加登録した情
891報が正しくない場合のエラーメッセージは,エラーの発
892生箇所が表示されないなど不親切であるため,注意すること(Rubyがエラーを
893起こす可能性もある).
894
895
8967.バージョン履歴
897
898 2016å¹´2月8日 Release 1.0.0 最初の一般å…
899¬é–‹
900 2016年2月14日 Release 1.1.0 ドメインとクラスをサポート
901 2016年3月14日 Release 1.2.0 様々
902な改良.HRP3カーネルに対応
903 2016年5月15日 Release 1.2.1 ASP3 R3.1.0に同梱してリリース
904
905以上
Note: See TracBrowser for help on using the repository browser.