ハードリアルタイム機能を使いこなす
RTLinuxテキストブック
Matt Sherer/FSMLabs Technical Staff 著
西谷 年代/小山 友里 訳
吉元 純子/森友 一朗 監修
FSMLabs Japan 総合監修
B5変型判 164ページ
定価3,080円(税込)
JAN9784789837057
2003年4月20日発行
大変恐縮ですが,こちらの商品は品切れ絶版となりました.
本書は,RTLinuxの開発元であるFSMLabsが書き下ろした解説書に,より読者に便利な情報を追加・再編集した本です.RTLinuxをより便利に,そしてより深く使いこなすための情報が記されています.すでにRTLinuxを使っている読者も,これから使おうと考えている読者も,本書からプログラミングを行ううえでの有益な情報を得られます.
目次
第I部 RTLinuxの基本
第1章 RTLinuxへの招待
1.1 きまりごと
1.2 RTLinuxの概要
第2章 リアルタイムシステム,コンセプト,およびRTLinux
2.1 はじめに
2.2 リアルタイムの定義
2.2.1 ハードリアルタイム
2.2.2 ソフトリアルタイム
2.2.3 非リアルタイム
2.3 リアルタイムOS設計ジレンマ
2.3.1 リアルタイムOSの拡張
2.3.2 汎用的なOSをリアルタイム拡張する場合
2.3.3 RTLinux的問題解決法
2.4 インタラプトエミュレーション
2.4.1 インタラプト制御の流れ
2.4.2 インタラプトエミュレーションの限界
2.5 考慮すべき点
2.5.1 システム管理インタラプト(SMI)
2.5.2 cli/stiのハード用コードを備えたドライバ
2.5.3 パワーマネージメント(APM)
2.5.4 ハードウェアの問題
2.5.5 フロッピードライブ
2.5.6 ISAデバイス
2.5.7 処理速度の遅いDAQボード
第3章 カーネルモジュールの入門
3.1 カーネルモジュールの基本構造
3.1.1 init_moduleを使ったモジュールの初期設定
3.2 モジュールに関連したリソース
3.2.1 モジュール構造
3.2.2 モジュール名称
第4章 RTLinuxモジュール
4.1 RTLinuxのコアモジュール
4.1.1 rtl.o
4.1.2 rtl_time.o
4.1.3 rtl_sched.o
4.1.4 rtl_posix.o
4.1.5 rtl_fifo.o
第5章 RTLinux API
5.1 POSIX準拠とV1の互換性
5.1.1 POSIX PSE51標準規格
5.1.2 バージョン1 APIの注意点
5.1.3 将来のAPI開発ロードマップ
5.2 RTLinuxバージョン3 API
5.3 POSIX スレッド関数
5.3.1 スレッドの生成
5.3.2 スレッドの結合
5.3.3 スレッドの削除
5.3.4 スレッドの管理
5.3.5 スレッド属性関数
5.3.6 SMP safe/unsafe関数に関するコメント
5.3.7 非同期unsafe関数
5.4 mutex
5.4.1 mutexのロックとロック解除
5.4.2 mutexの生成と削除
5.4.3 mutexの属性
5.5 条件付き変数
5.5.1 生成と削除
5.5.2 待機と信号の条件
5.5.3 条件付き変数属性の呼び出し
5.6 セマフォ
5.6.1 セマフォの生成と削除
5.6.2 セマフォ利用の呼び出しコール
5.7 注意事項
5.7.1 同期オブジェクトの複製コピー
5.7.2 同期が誘発する優先順位の逆転
5.7.3 デッドロック
5.8 非POSIX拡張(*_np( ))
5.8.1 CPU系統の呼び出し
5.8.2 スレッドの削除方法
5.8.3 より簡単な周期的スケジューリング
5.8.4 FPUアクセスを可能にする
5.8.5 スレッドの停止と起床
5.8.6 その他の拡張機能
5.8.7 拡張機能のコンセプト
5.9 “純粋なPOSIX”
第6章 Linux とRTLinuxの情報伝達
6.1 最も単純な方法 rtl_printf( )
6.1.1 RTLinux側からprintk( )を呼び出す方法
6.1.2 rtl_printf( )の仮想割り込み
6.2 リアルタイムFIFO
6.2.1 rt_fifo.oおよびrtl_posixio.o
6.2.2 リアルタイムカーネルからFIFOを利用する
6.2.3 LinuxからFIFOを利用する
6.2.4 2方向性のFIFO
6.2.5 事例
6.2.6 制限
6.3 共有メモリ
6.3.1 リアルタイムからmbuffを利用する
6.3.2 ユーザー空間からmbuffへのアクセス
6.3.3 事例
6.3.4 制限
6.4 ソフトウェアインタラプトによるLinuxへの通知
6.4.1 API
第II部 サンプルプログラム
第7章 カーネルモジュールの“Hello World”
7.1 はじめに
7.2 init_module( )
7.3 主なスレッドコード
7.4 cleanup_module( )
7.5 アウトプットの確認
7.6 依存関係
7.6.1 コンパイルの依存
7.6.2 ランタイムの依存
7.7 hello.oのバグ修正
第8章 RTLinuxマルチスレッドモジュール
8.1 コンポーネント間の共有コード
8.1.1 リアルタイムコード
8.1.2 init_module( )
8.1.3 スレッドコード
8.1.4 リアルタイムFIFOハンドラ
8.2 ユーザー空間のコード
8.2.1 例の実行
8.3 依存
第9章 スケジューリングジッタの測定
9.1 ヘッダ,宣言,およびグローバル変数
9.2 共通コード
9.3 init_module( )
9.4 スレッドの設定
9.4.1 条件付きの初期設定
9.5 フォアグラウンドスレッド
9.6 clock_modeの設定
9.7 インタラプトの許可と禁止
9.8 リアルタイムFIFO経由のデータ送信
9.9 ランタイムループ
9.10 バックグラウンドスレッド
9.10.1 FIFOの取り扱い
9.11 cleanup_module( )
9.12 依存
9.13 データの記録
9.14 gdb およびrtl_debug.o
9.15 RTLinux/Proのスケジューリングジッタ測定
第10章 LinuxからRTLinuxへの割り込み信号
10.1 ヘッダ,宣言およびグローバル変数
10.2 リアルタイムスレッド
10.3 soft_irqハンドラ
10.4 init_module( )
10.5 cleanup_module( )
10.6 依存
第11章 リアルタイムとユーザー空間の間の共有メモリ
11.0.1 ヘッダ,宣言およびグローバル変数
11.0.2 カーネルとユーザー空間の間の共有宣言
11.0.3 init_module( ),共有メモリの要求
11.0.4 失敗時のClean exit
11.0.5 リアルタイムスレッド
11.0.6 cleanup_module( )
11.1 ユーザー空間のアプリケーション
11.1.1 ユーザー空間からのアタッチ
11.1.2 共有メモリのデタッチ
11.2 /dev/mbuff
11.3 依存
第III部 Appendix
Appendix A 略語リスト
Appendix B RTLinux バージョン3 API
B.1 RTLinux バージョン3で利用可能なPOSIX関数
B.2 ノンポータブルPOSIX拡張
Appendix C システムテスト
C.1 リグレッションテスト(RTLinux/Pro)
C.2 ジッタの測定
C.3 RTLinuxトレーサによるタスク分析
C.4 必須条件
C.4.1 はじめに
Appendix D RTLinuxで拡張された関数群
clock_gethrtime
debugpr
gethrtime
PSDD_PARM
pthread_attr_getcpu_np
pthread_attr_getfp_np
pthread_attr_getreserve_np
pthread_attr_setcpu_np
pthread_attr_setfp_np
pthread_attr_setreserve_np
pthread_delete_np
pthread_linux
pthread_make_periodic_np
pthread_setfp_np
pthread_suspend_np
pthread_wait_np
pthread_wakeup_np
rtf_create
rtf_create_handler
rtf_destroy
rtf_flush
rtf_get
rtf_isempty
rtf_isused
rtf_link_user_ioctl
rtf_make_user_pair
rtf_put
rtf_resize
rtl_allow_interrupts
rtl_breakpoint
rtl_cpu_exists
rtl_free_irq
rtl_free_soft_irq
rtl_getcpuid
rtl_get_soft_irq
rtl_global_pend_irq
rtl_gpos_free
rtl_gpos_malloc
rtl_hard_disable_irq
rtl_longjmp
rtl_namei
rtl_num_cpus
rtl_printf
rtl_register_dev
rtl_register_rtldev
rtl_request_irq
rtl_restore_interrupts
rtl_setjmp
rtl_stop_interrupts
rtl_timespec
rtl_unregister_dev
rtl_unregister_rtldev
PSDD
rtf
rtl_debug
rtl_watchdog