TOPPERS/ASPカーネル Mac OS Xターゲット依存部 ユーザーズマニュアル 対応バージョン: Release 3.B.0 最終更新: 2015年8月21日 このドキュメントは,TOPPERS/ASPカーネルのMac OS Xターゲット依存部を使用 するために必要な事項を説明するものである. ---------------------------------------------------------------------- TOPPERS/ASP Kernel Toyohashi Open Platform for Embedded Real-Time Systems/ Advanced Standard Profile Kernel Copyright (C) 2008-2015 by Embedded and Real-Time Systems Laboratory Graduate School of Information Science, Nagoya Univ., JAPAN 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 権表示,この利用条件および下記の無保証規定が,そのままの形でソー スコード中に含まれていること. (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 の無保証規定を掲載すること. (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 用できない形で再配布する場合には,次のいずれかの条件を満たすこ と. (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 作権表示,この利用条件および下記の無保証規定を掲載すること. (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 報告すること. (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 免責すること. 本ソフトウェアは,無保証で提供されているものである.上記著作権者お よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ の責任を負わない. $Id: target_user.txt 458 2015-08-21 14:59:09Z ertl-hiro $ ---------------------------------------------------------------------- ○目次 1.Mac OS Xターゲット依存部の概要 1.1 対応するターゲットシステムとターゲット略称 1.2 ターゲット依存部の構成 1.3 依存している個別パッケージのバージョン番号 1.4 開発環境と動作確認条件 1.5 メモリマップ 2.ターゲット定義事項の規定 2.1 データ型に関する規定 2.2 割込み処理とCPU例外処理に関する規定 2.3 性能評価用システム時刻の参照に関する規定 2.4 オーバランハンドラ機能拡張のサポートに関する規定 2.5 動的生成機能拡張のサポートに関する規定 2.6 その他の制限事項 3.ドライバ関連の情報 3.1 タイマドライバ 3.2 シリアルインタフェースドライバ 3.3 システムログの低レベル出力 3.4 ノンブロッキングI/Oサポートモジュール 4.システム構築手順と実行手順 4.1 システム構築と実行 4.2 デバッガの使用方法 5.参考情報 5.1 システム時刻管理機能テスト用ターゲット依存部 5.2 類似のターゲットへのポーティング 6.リファレンス 6.1 ディレクトリ構成・ファイル構成 6.2 バージョン履歴 1.Mac OS Xターゲット依存部の概要 Mac OS Xターゲット依存部は,TOPPERS/ASPカーネルを,Mac OS X上の1つのプ ロセスでシミュレーション動作させる環境(これを,ASPカーネルのMac OS Xシ ミュレーション環境と呼ぶ)を構成するためのものである.このシミュレーショ ン環境では,ASPカーネルの各タスクが,プロセス内のユーザレベルスレッドと して動作する. 1.1 対応するターゲットシステムとターゲット略称 動作確認を行ったターゲットシステムおよびOSのバージョンは次の通り. Intelプロセッサ マシン名:MacBook Air プロセッサ:1.7GHz Intel Core i7 OS:Mac OS X バージョン 10.9.5 なお,現時点では,Intelプロセッサの32ビット環境(IA-32)のみをサポート しており,64ビット環境(x86-64)はサポートしていない.64ビット環境をサ ポートするための最大の課題は,モトローラSレコードフォーマットが64ビット アドレスに対応していないことである. また,ターゲット略称等は次の通り. ターゲット略称:macosx_xcode システム略称:macosx 開発環境略称:xcode 1.2 ターゲット依存部の構成 Mac OS Xターゲット依存部の使用するターゲット依存部(targetディレクトリ) およびターゲット依存部の共通部(archディレクトリ)のディレクトリは次の 通り. target/ macosx_xcode/ Mac OS Xターゲット依存部 test_hrt_macosx_xcode/ Mac OS X上でのシステム時刻管理機能テス ト用ターゲット依存部 arch/ gcc/ GCC開発環境依存部 logtrace/ トレースログ記録のサンプルコード Xcodeに付属のCコンパイラはClangであり,GCCではないが,この範囲では互換 で使えるため,GCC開発環境依存部を流用している. 1.3 依存している個別パッケージのバージョン番号 Mac OS Xターゲット依存部(バージョン 3.B.0)の個別パッケージが依存して いる個別パッケージと,動作確認を行ったバージョンは次の通り. 個別パッケージの名称 バージョン 個別パッケージファイル名 ------------------------------------------------------------------ ターゲット非依存部 3.B.0 asp3-3.B.0.tar.gz 1.4 開発環境と動作確認条件 開発環境として,Xcodeに付属のCコンパイラ(CC)と,GNUバイナリユーティリ ティ(binutils)を用いる.動作確認を行ったバージョンは次の通り. Clang: Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn) GDB:7.7 binutils(objcopy,objdump):2.25 上記のCCは,Xcode 6.2に含まれるものである.Xcodeは,Command Line Tools をインストールすること. GDBとbinutilsは,HomeBrewによりインストールしたものを用いて動作確認した. HomeBrewは,binutilsの各プログラムを"g"で始まる名称でインストールするた め,Makefile.targetで,objcopyとobjdumpに代えて,gobjcopyとgobjdumpを用 いるようにしている. 1.5 メモリマップ Mac OS Xシミュレーション環境では,TOPPERS/ASPカーネルおよびアプリケーショ ンソフトウェアが,Mac OS X上の1つのプロセスで動作するため,メモリマップ については,Mac OS Xのプロセスの標準の扱いに従う. 2.ターゲット定義事項の規定 2.1 データ型に関する規定 ターゲット依存のデータ型のサイズは次の通り. int_t 32ビット long_t 32ビット char 8ビット int_least8_t 8ビット void * 32ビット intptr_t 32ビット size_t 32ビット ターゲット依存のデータ型の有無は次の通り. int8_t,uint8_t あり int64_t,uint64_t あり int128_t,uint128_t なし float32_t あり double64_t あり 2.2 割込み処理とCPU例外処理に関する規定 Mac OS Xシミュレーション環境では,プロセスに対するシグナルを,割込みま たはCPU例外として扱う.ただし,SIGKILLとSIGSTOPの2つのシグナルは,それ らに対するシグナルハンドラを登録できないため,割込みまたはCPU例外として 扱うことができない.また,SIGUSR2も,Mac OS Xシミュレーション環境の実現 のために使用するため,割込みまたはCPU例外として扱うことができない. これらの3つのシグナルを除くと,いずれのシグナルも,割込みとして扱うこと も,CPU例外として扱うこともできる.具体的には,DEF_INHによって割込みハ ンドラを登録するか,CRE_ISRによって割込みサービスルーチンを登録した場合 には,割込みとして扱われ,DEF_EXCによってCPU例外ハンドラを登録した場合 には,CPU例外として扱われる. 割込みハンドラ番号(inhno),割込み番号(intno),CPU例外ハンドラ番号 (excno)の値は,いずれも,シグナル番号と一致させている.シグナル名とシ グナル番号は,/usr/include/sys/signal.hに定義されている.なお,macosx.h からこのヘッダファイルをインクルードしているため,シグナル名を用いる場 合には,macosx.hをインクルードすると良い. 割込み優先度としては,-7〜-1の7段階をサポートしているが,-7はNMI扱いと しており,カーネル管理の割込みとできるのは,-6〜-1の範囲である.デフォ ルトでは,target_kernel.hにおいてTMIN_INTPRIを-6に設定しており,これは, NMI以外にカーネル管理外の割込みを設けないことを意味している.この値を例 えば-5に変更すると,NMIに加えて,割込み優先度が-6の割込みがカーネル管理 外となる.なお,TMIN_INTPRIに定義できる値は,-6〜-1の範囲である. ある割込みをカーネル管理外の割込みとして使用する場合には,CFG_INTにおい て割込み優先度をTMIN_INTPRIより高いレベル(値としては,より小さい値)に 設定し,割込みハンドラ属性にTA_NONKERNELを指定してDEF_INHにより割込みハ ンドラを定義すればよい(カーネル管理外の割込みに対して割込みサービスルー チンを登録することはできないので注意). カーネル管理外の割込みハンドラは,カーネル内の割込み出入口処理を経由せ ずに呼び出される.すなわち,カーネル管理外の割込みハンドラの記述方法は, Mac OS Xのシグナルハンドラと同じである. dis_intとena_intは,NMI以外の割込み要求ラインに対してサポートしている. 逆に言うと,割込み優先度が-7(NMI)の割込み要求ライン,CPU例外として扱っ ているシグナル,割込み属性が設定されていない割込み要求ラインに対する dis_intとena_intは,E_OBJエラーとなる. CFG_INTに対する制限事項として,レベルトリガがサポートされておらず,割込 み属性にTA_EDGEを指定しないと,E_RSATRエラーとなる.これは,プロセスに 対するシグナルは,エッジトリガと同様に振る舞い,レベルトリガのように振 る舞わせることができないためである. 以下の3つのシグナルは,割込みとしてもCPU例外としても扱わない場合に,シ グナルをマスクせずに,標準的な振舞いをさせる.これは,デバッグを容易に するためである(例えば,SIGINTをマスクすると,CTRL+Cでプログラムの実行 が停止しなくなる). SIGINT 割込み(CTRL+C) SIGBUS バスエラー SIGSEGV セグメンテーション違反 2.3 性能評価用システム時刻の参照に関する規定 fch_hrtをサポートしているが,シミュレーション環境の制限上,正確な性能評 価に使用することはできない. 2.4 オーバランハンドラ機能拡張のサポートに関する規定 オーバランハンドラ機能拡張パッケージをサポートしているが,シミュレーショ ン環境の制限上,プロセッサ時間の測定にはかなりの誤差が含まれる.プロセッ サ時間に指定できる値に制限はない(つまり,TMAX_OVRTIMはUINT32_MAXであ る). 2.5 動的生成機能拡張のサポートに関する規定 動的生成機能拡張パッケージをサポートしている. 動的メモリ管理は,オープンソースのメモリ割付けライブラリであるTLSFを用 いる方法を標準にしている.そのため,動的生成機能拡張を使用する場合には, TLSFのパッケージに含まれるtlsf.hとtlsf.cを,カーネルをビルドするディレ クトリか,vpathで指定されたディレクトリに置いておく必要がある.また, MakefileのKERNEL_COBJSの定義に,以下のようにtlsf.oを追加する必要がある. ---------------------------------------- KERNEL_COBJS := $(KERNEL_COBJS) tlsf.o ---------------------------------------- なお,TLSF(動作確認は,Version 2.4.6)は,以下のウェブサイトからダウン ロードすることができる. http://rtportal.upv.es/rtmalloc/ 2.6 その他の制限事項 sil_dly_nseは,シミュレーション環境では意味がないことから,何もしないイ ンライン関数としている. 3.ドライバ関連の情報 3.1 タイマドライバ タイマドライバは,Mac OS Xのインターバルタイマ機能を使用している.その ため,インターバルタイマを別の目的で使用することはできない. 3.2 シリアルインタフェースドライバ シリアルインタフェースドライバでは,シリアルI/Oポートを1つのみサポート しており,プロセスの標準入出力に対する文字の入出力で実現している.すな わち,シリアルインタフェースドライバに送信した文字は,プロセスの標準出 力に出力され,シリアルインタフェースドライバから文字を受信しようとする と,プロセスの標準入力に入力される. 複数のシリアルI/Oポートをサポートし,標準入出力以外に対する文字の入出力 を可能にすることも考慮してコードが作成してあるが,現時点では未検証であ る. 3.3 システムログの低レベル出力 システムログの低レベル出力は,プロセスの標準エラーに対して文字を出力す る方法で実現している. 3.4 ノンブロッキングI/Oサポートモジュール Mac OS Xシミュレーション環境でノンブロッキングI/O機能の使用をサポートす るモジュールとして,unix_sigio.cfgおよびunix_sigio.hを用意している. ノンブロッキングI/O機能を用いると,I/Oの状態に変化があった場合に,プロ セスに対してSIGIOシグナルが配送される.ノンブロッキングI/O機能を用いる モジュールは,SIGIOシグナルが配送された場合の処理を用意する必要がある. このサポートモジュールを用いる場合,アプリケーションは,SIGIOシグナルが 配送された場合の処理を割込みサービスルーチンとして用意し,CRE_ISRにより 割込み番号INTNO_SIGIOに対して登録することで,SIGIOシグナル配送時に呼び 出されるようにできる. なお,シリアルインタフェースドライバは,この機能を用いて実現している. 4.システム構築手順と実行手順 4.1 システム構築と実行 Mac OS Xシミュレーション環境を構築する手順は,「TOPPERS/ASPカーネル ユー ザーズマニュアル」の「3.クイックスタートガイド」の章に記述されている 通りである. 構築したシミュレーション環境の実行は,実行形式ファイルとして生成される aspを実行するだけでよい. 4.2 デバッガの使用方法 次のような手順により,GDBデバッガの管理下でMac OS Xシミュレーション環境 を実行することができる.なお,Xcode 6.0.1では,GDBに代えてLLDBが標準の デバッガとなっている.GDBをインストールするのは面倒である. % gdb asp (gdb) handle SIGUSR2 nostop noprint (gdb) run ここで,「handle SIGUSR2 nostop noprint」は,SIGUSR2によってデバッガが 停止するのを防ぐためのコマンドである.これを省くと,ディスパッチの度に デバッガが停止してしまう.また,サンプルプログラム(sample1)を実行する 際には,CPU例外として用いているSIGINFOによってデバッガが停止することも 防いでおくことが必要である. (gdb) handle SIGINFO nostop noprint これらのコマンドを,.gdbinitに設定しておくと便利である. また,条件付きブレークポイントを使うと,特定のタスクが特定のアドレスを 実行した場合にのみ実行を停止させることができる.ただし,ブレーク条件を 記述するには,カーネルの内部構造を知っていることが必要である. 5.参考情報 5.1 システム時刻管理機能テスト用ターゲット依存部 ASP3カーネルのシステム時刻管理機能テストプログラムを実行するためには, テスト用の高分解能タイマモジュールを組み込んだターゲット依存部が必要と なる(「ユーザーズマニュアル」の「10.4 システム時刻管理機能テストプログ ラム」の節を参照). Mac OS Xターゲット依存部には,Mac OS X上でシステム時刻管理機能テストを 行うための,テスト用ターゲット依存部を含んでいる.テスト用ターゲット依 存部のターゲット略称等は次の通り. ターゲット略称:hrt_test_macosx_xcode システム略称:hrt_testmacosx 開発環境略称:xcode 5.2 類似のターゲットへのポーティング Max OS Xのカーネルは,BSD UNIXベースであり,Mac OS Xターゲット依存部に おいても,Mac OS Xに特有の機能はほとんど使用していない.そのため,他の BSD UNIXベースのOSや,Linuxへのポーティングも可能と思われる. ただし,明らかにOSやプロセッサに依存する部分として,タスクの起動時にタ スクのメインルーチンに分岐するために,jmp_buf構造体にPCやSPを直接設定し てlongjmpしているコードがある.jmp_buf構造体の中でPCやSPの位置はプロセッ サやOS(厳密にはライブラリ)によって異なるし,プロセッサによっては他の レジスタも設定しなければならない場合がある. 6.リファレンス 6.1 ディレクトリ構成・ファイル構成 target/macosx_xcode/ E_PACKAGE 簡易パッケージのファイルリスト MANIFEST 個別パッケージのファイルリスト Makefile.target Makefileのターゲット依存部 macosx.h ターゲットのハードウェア資源の定義 target.tf kernel.tfのターゲット依存部 target_cfg1_out.h cfg1_out.cのリンクに必要なスタブの定義 target_check.tf kernel_check.tfのターゲット依存部 target_def.csv kernel_def.csvのターゲット依存部 target_kernel.h kernel.hのターゲット依存部 target_kernel_impl.c カーネル実装のターゲット依存部関連の定義 target_kernel_impl.h カーネル実装のターゲット依存部 target_rename.def ターゲット依存部の内部識別名のリネーム定義 target_rename.h ターゲット依存部の内部識別名のリネーム target_serial.c serial.cのターゲット依存部 target_serial.cfg serial.cfgのターゲット依存部 target_serial.h serial.hのターゲット依存部 target_sil.h sil.hのターゲット依存部 target_stddef.h t_stddef.hのターゲット依存部 target_syssvc.h システムサービスのターゲット依存定義 target_test.h テストプログラムのターゲット依存定義 target_timer.c タイマドライバ target_timer.cfg タイマドライバのコンフィギュレーションファイル target_timer.h タイマドライバを使用するための定義 target_unrename.h ターゲット依存部の内部識別名のリネーム解除 target_user.txt ターゲット依存部のユーザーズマニュアル unix_sigio.cfg ノンブロッキングI/Oサポートモジュールのコン フィギュレーションファイル unix_sigio.h ノンブロッキングI/Oサポートモジュールの定義 target/test_hrt_macosx_xcode/ MANIFEST 個別パッケージのファイルリスト Makefile.target Makefileのターゲット依存部 target_kernel.h kernel.hのターゲット依存部 target_syssvc.h システムサービスのターゲット依存定義 target_timer.c タイマドライバ target_timer.h タイマドライバを使用するための定義 6.2 バージョン履歴 2014年11月24日 Release 3.A.0 最初のリリース 2015年8月5日 Release 3.B.0 以上