source: asp3_wo_tecs/trunk/target/macosx_xcode/target_user.txt@ 302

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

TECSレスのASP3の開発のため以下のtrunkからコピー
http://dev.toppers.jp/svn/asp3/branches/WO_TECS-3.C.0

File size: 21.6 KB
Line 
1
2 TOPPERS/ASPカーネル
3 Mac OS Xターゲット依存部 ユーザーズマニュアル
4
5 対応バージョン: Release 3.B.0
6 最終更新: 2015年8月21日
7
8このドキュメントは,TOPPERS/ASPカーネルのMac OS Xターゲット依存部を使用
9するために必
10要な事項
11を説明するものである.
12
13----------------------------------------------------------------------
14 TOPPERS/ASP Kernel
15 Toyohashi Open Platform for Embedded Real-Time Systems/
16 Advanced Standard Profile Kernel
17
18 Copyright (C) 2008-2015 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: target_user.txt 458 2015-08-21 14:59:09Z ertl-hiro $
66----------------------------------------------------------------------
67
68○目次
69
701.Mac OS Xターゲット依存部の概要
71 1.1 対応するターゲットシステムとターゲット略称
72 1.2 ターゲット依存部の構成
73 1.3 依存している個別パッケージのバージョン番号
74 1.4 開発環境と動作確認条件
75 1.5 メモリマップ
762.ターゲット定義事項
77の規定
78 2.1 データ型に関する規定
79 2.2 割込み処理とCPU例外処理に関する規定
80 2.3 性能評価用システム時刻の参ç…
81§ã«é–¢ã™ã‚‹è¦å®š
82 2.4 オーバランハンドラ機能拡張のサポートに関する規定
83 2.5 動的生成機能拡張のサポートに関する規定
84 2.6 その他の制限事項
85
863.ドライバ関連の情
87å ±
88 3.1 タイマドライバ
89 3.2 シリアルインタフェースドライバ
90 3.3 システムログの低レベル出力
91 3.4 ノンブロッキングI/Oサポートモジュール
924.システム構築手順と実行手順
93 4.1 システム構築と実行
94 4.2 デバッガの使用方法
955.参考情
96å ±
97 5.1 システム時刻管理機能テスト用ターゲット依存部
98 5.2 類似のターゲットへのポーティング
996.リファレンス
100 6.1 ディレクトリ構成・ファイル構成
101 6.2 バージョン履歴
102
103
1041.Mac OS Xターゲット依存部の概要
105
106Mac OS Xターゲット依存部は,TOPPERS/ASPカーネルを,Mac OS X上の1つのプ
107ロセスでシミュレーション動作させる環境(これを,ASPカーネルのMac OS Xシ
108ミュレーション環境と呼ぶ)を構成するためのものである.このシミュレーショ
109ン環境では,ASPカーネルの各タスクが,プロセス内
110のユーザレベルスレッドと
111して動作する.
112
1131.1 対応するターゲットシステムとターゲット略称
114
115動作確認を行ったターゲットシステムおよびOSのバージョンは次の通り.
116
117 Intelプロセッサ
118 マシン名:MacBook Air
119 プロセッサ:1.7GHz Intel Core i7
120 OS:Mac OS X バージョン 10.9.5
121
122なお,現時点では,Intelプロセッサの32ビット環境(IA-32)のみをサポート
123しており,64ビット環境(x86-64)はサポートしていない.64ビット環境をサ
124ポートするための最大の課題は,モトローラSレコードフォーマットが64ビット
125アドレスに対応していないことである.
126
127また,ターゲット略称等は次の通り.
128
129 ターゲット略称:macosx_xcode
130 システム略称:macosx
131 開発環境略称:xcode
132
1331.2 ターゲット依存部の構成
134
135Mac OS Xターゲット依存部の使用するターゲット依存部(targetディレクトリ)
136およびターゲット依存部のå…
137±é€šéƒ¨ï¼ˆarchディレクトリ)のディレクトリは次の
138通り.
139
140 target/
141 macosx_xcode/ Mac OS Xターゲット依存部
142 test_hrt_macosx_xcode/ Mac OS X上でのシステム時刻管理機能テス
143 ト用ターゲット依存部
144 arch/
145 gcc/ GCC開発環境依存部
146 logtrace/ トレースログ記録のサンプルコード
147
148Xcodeに付属のCコンパイラはClangであり,GCCではないが,この範囲では互換
149で使えるため,GCC開発環境依存部を流用している.
150
1511.3 依存している個別パッケージのバージョン番号
152
153Mac OS Xターゲット依存部(バージョン 3.B.0)の個別パッケージが依存して
154いる個別パッケージと,動作確認を行ったバージョンは次の通り.
155
156 個別パッケージの名称 バージョン 個別パッケージファイル名
157 ------------------------------------------------------------------
158 ターゲット非依存部 3.B.0 asp3-3.B.0.tar.gz
159
1601.4 開発環境と動作確認条件
161
162開発環境として,Xcodeに付属のCコンパイラ(CC)と,GNUバイナリユーティリ
163ティ(binutils)を用いる.動作確認を行ったバージョンは次の通り.
164
165 Clang: Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
166 GDB:7.7
167 binutils(objcopy,objdump):2.25
168
169上記のCCは,Xcode 6.2に含まれるものである.Xcodeは,Command Line Tools
170をインストールすること.
171
172GDBとbinutilsは,HomeBrewによりインストールしたものを用いて動作確認した.
173HomeBrewは,binutilsの各プログラムを"g"で始まる名称でインストールするた
174め,Makefile.targetで,objcopyとobjdumpに代えて,gobjcopyとgobjdumpを用
175いるようにしている.
176
1771.5 メモリマップ
178
179Mac OS Xシミュレーション環境では,TOPPERS/ASPカーネルおよびアプリケーショ
180ンソフトウェアが,Mac OS X上の1つのプロセスで動作するため,メモリマップ
181については,Mac OS Xのプロセスの標準の扱いに従う.
182
183
1842.ターゲット定義事項
185の規定
186
1872.1 データ型に関する規定
188
189ターゲット依存のデータ型のサイズは次の通り.
190
191 int_t 32ビット
192 long_t 32ビット
193
194 char 8ビット
195 int_least8_t 8ビット
196 void * 32ビット
197 intptr_t 32ビット
198 size_t 32ビット
199
200ターゲット依存のデータ型の有無は次の通り.
201
202 int8_t,uint8_t あり
203 int64_t,uint64_t あり
204 int128_t,uint128_t なし
205 float32_t あり
206 double64_t あり
207
2082.2 割込み処理とCPU例外処理に関する規定
209
210Mac OS Xシミュレーション環境では,プロセスに対するシグナルを,割込みま
211たはCPU例外として扱う.ただし,SIGKILLとSIGSTOPの2つのシグナルは,それ
212らに対するシグナルハンドラを登録できないため,割込みまたはCPU例外として
213扱うことができない.また,SIGUSR2も,Mac OS Xシミュレーション環境の実現
214のために使用するため,割込みまたはCPU例外として扱うことができない.
215
216これらの3つのシグナルを除くと,いずれのシグナルも,割込みとして扱うこと
217も,CPU例外として扱うこともできる.å…
218·ä½“的には,DEF_INHによって割込みハ
219ンドラを登録するか,CRE_ISRによって割込みサービスルーチンを登録した場合
220には,割込みとして扱われ,DEF_EXCによってCPU例外ハンドラを登録した場合
221には,CPU例外として扱われる.
222
223割込みハンドラ番号(inhno),割込み番号(intno),CPU例外ハンドラ番号
224(excno)の値は,いずれも,シグナル番号と一致させている.シグナル名とシ
225グナル番号は,/usr/include/sys/signal.hに定義されている.なお,macosx.h
226からこのヘッダファイルをインクルードしているため,シグナル名を用いる場
227合には,macosx.hをインクルードすると良い.
228
229割込み優å…
230ˆåº¦ã¨ã—ては,-7〜-1の7段階をサポートしているが,-7はNMI扱いと
231しており,カーネル管理の割込みとできるのは,-6〜-1の範囲である.デフォ
232ルトでは,target_kernel.hにおいてTMIN_INTPRIを-6に設定しており,これは,
233NMI以外にカーネル管理外の割込みを設けないことを意味している.この値を例
234えば-5に変更すると,NMIに加えて,割込み優å…
235ˆåº¦ãŒ-6の割込みがカーネル管理
236外となる.なお,TMIN_INTPRIに定義できる値は,-6〜-1の範囲である.
237
238ある割込みをカーネル管理外の割込みとして使用する場合には,CFG_INTにおい
239て割込み優å…
240ˆåº¦ã‚’TMIN_INTPRIより高いレベル(値としては,より小さい値)に
241設定し,割込みハンドラ属性にTA_NONKERNELを指定してDEF_INHにより割込みハ
242ンドラを定義すればよい(カーネル管理外の割込みに対して割込みサービスルー
243チンを登録することはできないので注意).
244
245カーネル管理外の割込みハンドラは,カーネル内
246の割込み出å…
247¥å£å‡¦ç†ã‚’経由せ
248ずに呼び出される.すなわち,カーネル管理外の割込みハンドラの記述方法は,
249Mac OS Xのシグナルハンドラと同じである.
250
251dis_intとena_intは,NMI以外の割込み要求ラインに対してサポートしている.
252逆に言うと,割込み優å…
253ˆåº¦ãŒ-7(NMI)の割込み要求ライン,CPU例外として扱っ
254ているシグナル,割込み属性が設定されていない割込み要求ラインに対する
255dis_intとena_intは,E_OBJエラーとなる.
256
257CFG_INTに対する制限事項
258として,レベルトリガがサポートされておらず,割込
259み属性にTA_EDGEを指定しないと,E_RSATRエラーとなる.これは,プロセスに
260対するシグナルは,エッジトリガと同様に振る舞い,レベルトリガのように振
261る舞わせることができないためである.
262
263以下の3つのシグナルは,割込みとしてもCPU例外としても扱わない場合に,シ
264グナルをマスクせずに,標準的な振舞いをさせる.これは,デバッグを容易に
265するためである(例えば,SIGINTをマスクすると,CTRL+Cでプログラムの実行
266が停止しなくなる).
267
268 SIGINT 割込み(CTRL+C)
269 SIGBUS バスエラー
270 SIGSEGV セグメンテーション違反
271
2722.3 性能評価用システム時刻の参ç…
273§ã«é–¢ã™ã‚‹è¦å®š
274
275fch_hrtをサポートしているが,シミュレーション環境の制限上,正確な性能評
276価に使用することはできない.
277
2782.4 オーバランハンドラ機能拡張のサポートに関する規定
279
280オーバランハンドラ機能拡張パッケージをサポートしているが,シミュレーショ
281ン環境の制限上,プロセッサ時間の測定にはかなりの誤差が含まれる.プロセッ
282サ時間に指定できる値に制限はない(つまり,TMAX_OVRTIMはUINT32_MAXであ
283る).
284
2852.5 動的生成機能拡張のサポートに関する規定
286
287動的生成機能拡張パッケージをサポートしている.
288
289動的メモリ管理は,オープンソースのメモリ割付けライブラリであるTLSFを用
290いる方法を標準にしている.そのため,動的生成機能拡張を使用する場合には,
291TLSFのパッケージに含まれるtlsf.hとtlsf.cを,カーネルをビルドするディレ
292クトリか,vpathで指定されたディレクトリに置いておく必
293要がある.また,
294MakefileのKERNEL_COBJSの定義に,以下のようにtlsf.oを追加する必
295要がある.
296
297----------------------------------------
298KERNEL_COBJS := $(KERNEL_COBJS) tlsf.o
299----------------------------------------
300
301なお,TLSF(動作確認は,Version 2.4.6)は,以下のウェブサイトからダウン
302ロードすることができる.
303
304 http://rtportal.upv.es/rtmalloc/
305
3062.6 その他の制限事項
307
308
309sil_dly_nseは,シミュレーション環境では意味がないことから,何もしないイ
310ンライン関数としている.
311
312
3133.ドライバ関連の情
314å ±
315
3163.1 タイマドライバ
317
318タイマドライバは,Mac OS Xのインターバルタイマ機能を使用している.その
319ため,インターバルタイマを別の目的で使用することはできない.
320
3213.2 シリアルインタフェースドライバ
322
323シリアルインタフェースドライバでは,シリアルI/Oポートを1つのみサポート
324しており,プロセスの標準å…
325¥å‡ºåŠ›ã«å¯¾ã™ã‚‹æ–‡å­—のå…
326¥å‡ºåŠ›ã§å®Ÿç¾ã—ている.すな
327わち,シリアルインタフェースドライバに送信した文字は,プロセスの標準出
328力に出力され,シリアルインタフェースドライバから文字を受信しようとする
329と,プロセスの標準å…
330¥åŠ›ã«å…
331¥åŠ›ã•ã‚Œã‚‹ï¼Ž
332
333複数のシリアルI/Oポートをサポートし,標準å…
334¥å‡ºåŠ›ä»¥å¤–に対する文字のå…
335¥å‡ºåŠ›
336を可能にすることも考æ…
337®ã—てコードが作成してあるが,現時点では未検証であ
338る.
339
3403.3 システムログの低レベル出力
341
342システムログの低レベル出力は,プロセスの標準エラーに対して文字を出力す
343る方法で実現している.
344
3453.4 ノンブロッキングI/Oサポートモジュール
346
347Mac OS Xシミュレーション環境でノンブロッキングI/O機能の使用をサポートす
348るモジュールとして,unix_sigio.cfgおよびunix_sigio.hを用意している.
349
350ノンブロッキングI/O機能を用いると,I/Oの状æ…
351‹ã«å¤‰åŒ–があった場合に,プロ
352セスに対してSIGIOシグナルがé…
353é€ã•ã‚Œã‚‹ï¼ŽãƒŽãƒ³ãƒ–ロッキングI/O機能を用いる
354モジュールは,SIGIOシグナルがé…
355é€ã•ã‚ŒãŸå ´åˆã®å‡¦ç†ã‚’用意する必
356要がある.
357
358このサポートモジュールを用いる場合,アプリケーションは,SIGIOシグナルが
359é…
360é€ã•ã‚ŒãŸå ´åˆã®å‡¦ç†ã‚’割込みサービスルーチンとして用意し,CRE_ISRにより
361割込み番号INTNO_SIGIOに対して登録することで,SIGIOシグナルé…
362é€æ™‚に呼び
363出されるようにできる.
364
365なお,シリアルインタフェースドライバは,この機能を用いて実現している.
366
367
3684.システム構築手順と実行手順
369
3704.1 システム構築と実行
371
372Mac OS Xシミュレーション環境を構築する手順は,「TOPPERS/ASPカーネル ユー
373ザーズマニュアル」の「3.クイックスタートガイド」の章に記述されている
374通りである.
375
376構築したシミュレーション環境の実行は,実行形式ファイルとして生成される
377aspを実行するだけでよい.
378
3794.2 デバッガの使用方法
380
381次のような手順により,GDBデバッガの管理下でMac OS Xシミュレーション環境
382を実行することができる.なお,Xcode 6.0.1では,GDBに代えてLLDBが標準の
383デバッガとなっている.GDBをインストールするのは面倒である.
384
385 % gdb asp
386 <GDBの起動メッセージ>
387 (gdb) handle SIGUSR2 nostop noprint
388 (gdb) run
389
390ここで,「handle SIGUSR2 nostop noprint」は,SIGUSR2によってデバッガが
391停止するのを防ぐためのコマンドである.これを省くと,ディスパッチの度に
392デバッガが停止してしまう.また,サンプルプログラム(sample1)を実行する
393際には,CPU例外として用いているSIGINFOによってデバッガが停止することも
394防いでおくことが必
395要である.
396
397 (gdb) handle SIGINFO nostop noprint
398
399これらのコマンドを,.gdbinitに設定しておくと便利である.
400
401また,条件付きブレークポイントを使うと,特定のタスクが特定のアドレスを
402実行した場合にのみ実行を停止させることができる.ただし,ブレーク条件を
403記述するには,カーネルの内
404部構造を知っていることが必
405要である.
406
407
4085.参考情
409å ±
410
4115.1 システム時刻管理機能テスト用ターゲット依存部
412
413ASP3カーネルのシステム時刻管理機能テストプログラムを実行するためには,
414テスト用の高分解能タイマモジュールを組み込んだターゲット依存部が必
415要と
416なる(「ユーザーズマニュアル」の「10.4 システム時刻管理機能テストプログ
417ラム」の節を参ç…
418§ï¼‰ï¼Ž
419
420Mac OS Xターゲット依存部には,Mac OS X上でシステム時刻管理機能テストを
421行うための,テスト用ターゲット依存部を含んでいる.テスト用ターゲット依
422存部のターゲット略称等は次の通り.
423
424 ターゲット略称:hrt_test_macosx_xcode
425 システム略称:hrt_testmacosx
426 開発環境略称:xcode
427
4285.2 類似のターゲットへのポーティング
429
430Max OS Xのカーネルは,BSD UNIXベースであり,Mac OS Xターゲット依存部に
431おいても,Mac OS Xに特有の機能はほとんど使用していない.そのため,他の
432BSD UNIXベースのOSや,Linuxへのポーティングも可能と思われる.
433
434ただし,明らかにOSやプロセッサに依存する部分として,タスクの起動時にタ
435スクのメインルーチンに分岐するために,jmp_buf構造体にPCやSPを直接設定し
436てlongjmpしているコードがある.jmp_buf構造体の中でPCやSPの位置はプロセッ
437サやOS(厳密にはライブラリ)によって異なるし,プロセッサによっては他の
438レジスタも設定しなければならない場合がある.
439
440
4416.リファレンス
442
4436.1 ディレクトリ構成・ファイル構成
444
445 target/macosx_xcode/
446 E_PACKAGE 簡易パッケージのファイルリスト
447 MANIFEST 個別パッケージのファイルリスト
448 Makefile.target Makefileのターゲット依存部
449 macosx.h ターゲットのハードウェア資源の定義
450 target.tf kernel.tfのターゲット依存部
451 target_cfg1_out.h cfg1_out.cのリンクに必
452要なスタブの定義
453 target_check.tf kernel_check.tfのターゲット依存部
454 target_def.csv kernel_def.csvのターゲット依存部
455 target_kernel.h kernel.hのターゲット依存部
456 target_kernel_impl.c カーネル実装
457のターゲット依存部関連の定義
458 target_kernel_impl.h カーネル実装
459のターゲット依存部
460 target_rename.def ターゲット依存部の内
461部識別名のリネーム定義
462 target_rename.h ターゲット依存部の内
463部識別名のリネーム
464 target_serial.c serial.cのターゲット依存部
465 target_serial.cfg serial.cfgのターゲット依存部
466 target_serial.h serial.hのターゲット依存部
467 target_sil.h sil.hのターゲット依存部
468 target_stddef.h t_stddef.hのターゲット依存部
469 target_syssvc.h システムサービスのターゲット依存定義
470 target_test.h テストプログラムのターゲット依存定義
471 target_timer.c タイマドライバ
472 target_timer.cfg タイマドライバのコンフィギュレーションファイル
473 target_timer.h タイマドライバを使用するための定義
474 target_unrename.h ターゲット依存部の内
475部識別名のリネーム解除
476 target_user.txt ターゲット依存部のユーザーズマニュアル
477 unix_sigio.cfg ノンブロッキングI/Oサポートモジュールのコン
478 フィギュレーションファイル
479 unix_sigio.h ノンブロッキングI/Oサポートモジュールの定義
480
481 target/test_hrt_macosx_xcode/
482 MANIFEST 個別パッケージのファイルリスト
483 Makefile.target Makefileのターゲット依存部
484 target_kernel.h kernel.hのターゲット依存部
485 target_syssvc.h システムサービスのターゲット依存定義
486 target_timer.c タイマドライバ
487 target_timer.h タイマドライバを使用するための定義
488
4896.2 バージョン履歴
490
491 2014年11月24日 Release 3.A.0 最初のリリース
492 2015年8月5日 Release 3.B.0
493
494以上
Note: See TracBrowser for help on using the repository browser.