Last Update 2008/02/08

ハードリアルタイム機能を使いこなす
RTLinuxテキストブック

Matt Sherer/FSMLabs Technical Staff 著
西谷 年代/小山 友里 訳
吉元 純子/森友 一朗 監修
FSMLabs Japan 総合監修
B5変型判 164ページ
定価3,080円(税込)
JAN9784789837057
2003年4月20日発行
[絶版2008.2.7] RTLinuxテキストブック
大変恐縮ですが,こちらの商品は品切れ絶版となりました.

 本書は,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