T-Kernel 2.0 Extension(T2EX)
T-Kernel 2.0 Extension (T2EX)の主な機能
●ネットワーク通信機能
- TCP/IP、UDP/IPを含む通信のソケットインタフェースを提供
- DHCPとDNSの機能も提供
- POSIX仕様との互換性が高いソケットI/FのAPI
- 組込み機器を前提とした省資源対応を実施
○POSIX仕様からの改善点
- 過度な抽象化を避けるためAPI名称のプレフィクスとして "so_" (socket) を追加
- エラーが発生した場合は、戻値が負となる。
- タイムアウト時間を必要とするAPIでは、POSIX仕様の時間データ形式の他に、T-Kernel 2.0のタイムアウト時間形式(TMO, TMO_U)を使えるAPIを追加
- 現在実行中の通信を強制的に中止するso_break()機能を追加
○ネットワーク管理機能の主なAPI
- so_socket - 通信の端点を生成
- so_accept - ソケットへの接続の受け付け
- so_bind - ソケットに名前をつける
- so_connect - ソケットの接続
- so_listen - ソケット上の接続を待つ
- so_select, so_select_ms, so_select_us - 多重化I/Oの同期
- so_recvfrom, so_recvmsg - ソケットからのメッセージ受信
- so_sendto, so_sendmsg - ソケットへのメッセージ送信
- so_gethostname - ホスト名を取得
- so_break - ソケット操作の中止
●ファイル管理機能
- 標準でFATファイルシステムをサポート
- FAT12, FAT16, FAT32に対応、VFATのロングファイル名も使用可能
- ライブラリの標準入出力機能(fopen()、fprintf()など)が利用可能
- POSIX仕様におけるファイル入出力機能に近いAPIセットを提供
○POSIX仕様からの改善点
- 過度な抽象化を避けるためAPI名称のプレフィクスとして "fs_" (file system) を追加
- エラーが発生した場合は、戻値が負となる。
- タイムスタンプを扱うAPIでは、POSIX仕様の時刻データ形式の他にT-Kernel 2.0の時刻データ形式(SYSTIM, SYSTIM_U)を使えるAPIを追加
- 64 ビット大容量ファイルをサポート
- 実行中のファイルの操作を強制的に中止するfs_break()機能を追加
- ユーザ定義可能な「ファイルシステム実装部」を提供
○ファイル管理機能の主なAPI
- fs_regist - ファイルシステム実装部の登録
- fs_attach - ファイルシステムの接続
- fs_open - ファイルのオープンまたは作成
- fs_lseek, fs_lseek64 - ファイルの読み書きオフセット位置の変更
- fs_read - ファイルの読込み
- fs_write - ファイルへの書込み
- fs_creat - ファイルの作成
- fs_truncate, fs_truncate64 - ファイルの切詰/拡大
- fs_sync - ファイルシステムの同期
- fs_mkdir - ディレクトリの作成
- fs_break - ファイル管理操作の中止
○ファイルシステム実装部
- ユーザ自身がファイルシステムに応じた処理プログラムを登録可能
-
組込み向けの独自デバイスや独自ファイルシステムを利用する際に有用
例1: 書き込みの平準化(ウェアレベリング)に対応したFlashROM向けのファイルシステム
例2: exFATなどの新しいファイルシステム - アプリケーションからは共通のAPIでファイルを操作可能
- fs_open(), fs_read(), fs_write(), ...
●標準C互換ライブラリ
- 標準Cライブラリ(JIS X3010:2003)との互換性が高いAPIを提供
○標準Cライブラリからの改善点
- マルチタスクを前提として、スレッドセーフを重視した設計に変更
- errnoによるエラー情報の取得を廃止し、T-Kernelに合わせた方式に統一
- ファイルを扱う関数とソケットを扱う関数を分離
○APIの例
-
math.h
log, logf, logl - 自然対数
sin, sinf, sinl - 正弦関数
sqrt, sqrtf, sqrtl - 平方根関数 -
stdio.h
fprintf, printf, snprintf, sprintf - 書式付き出力
fscanf, scanf, sscanf - 書式付き入力変換
fopen, fopen_eno - ストリームのオープン -
string.h
strcmp - 文字列の比較, strcpy - 文字列のコピー
●カレンダ機能
- T-Kernelのシステム時刻(SYSTIM、SYSTIM_U)およびtime_t型の数値表現の時刻と、文字表現や要素別に分解した表現との間での相互変換機能を提供
- API名称のプレフィクスとして "dt_" (date/time) を持つ。
○POSIX仕様からの改善点
- エラーが発生した場合は、戻値が負となる。
○主なAPI
- dt_tzset - タイムゾーン構造体の初期化
- dt_localtime, dt_localtime_ms, dt_localtime_us - ローカル時刻への変換
- dt_strftime - 日付と時刻の文字列への変換
- dt_strptime - 文字列の日付および時刻への変換
- dt_mktime, dt_mktime_ms, dt_mktime_us - システム時刻への変換
- dt_gmtime, dt_gmtime_ms, dt_gmtime_us - UTC 時刻への変換
●プログラムロード機能 (T2EXの独自機能)
- プログラムのロードと実行の機能
- API名称のプレフィクスとして "pm_" (program module)を持つ。
- プログラムモジュールはファイル、またはメモリ領域を指定可能
- ロードモジュール作成用のサンプルを提供
○2種類のロードモジュールに対応
-
一般プログラム ... 呼び出し元と同じ保護レベルで実行
アプリケーションの実装単位を分割する場合に利用 (lib, plug-in, ...) -
システムプログラム ... 特権レベルで実行 (システムレベルのI/Fを提供)
デバイスドライバI/FやサブシステムI/Fを通して、OS機能を拡張
●メモリ保護機能 (T2EXの独自機能)
-
特権レベルとユーザレベルの2段階による保護
T-Kernel 2.0、T2EX、デバイスドライバなどのシステムプログラムで使用するメモリ領域をユーザアプリケーションから保護することで、システム全体としての安定性と信頼性を向上 - 小型の情報家電などでの利用を想定し、コンパクトで高速なメモリ保護機能を実現
○不正なメモリアクセスでメモリ保護違反例外が発生、例外処理関数を実行
- タスク部での例外処理: TaskMemFaultHdr()
- タスク独立部での例外処理: RawMemFaultHdr()
■T-Kernel 2.0 Extension (T2EX) のダウンロードはこちらからどうぞ