組み込みLinuxシステム構築 第2版

[cover photo]
TOPICS
Linux
発行年月日
PRINT LENGTH
472
ISBN
978-4-87311-422-4
原書
Building Embedded Linux Systems, Second Edition
FORMAT
Print PDF
Ebook
4,840円
Ebookを購入する
Print
4,840円

本書はLinuxシステムを組み込み機器上に構築するための解説書です。多種多様なアーキテクチャやハードウェア構成に対応するための実践的かつ詳細な情報を提供します。本書の内容は「GNUツールチェーンの構築」「Linuxカーネルの選択、設定、クロスコンパイル、インストール」「開発ツール」「ルートファイルシステムの構築」「記憶装置のセットアップと操作」「ブートローダのインストールと設定」「ネットワークサービスのセットアップ」「デバッグのためのツールとテクニック」など。第2版では、カーネル2.6に対応した全面的な改訂とリアルタイムLinux関連情報(Xenomai、RTパッチなど)を大幅に追加し、開発ツールの解説においてEclipseを大きく取り上げました。

目次

まえがき
1章 はじめに
    1.1 各種の定義
        1.1.1 Linuxとは何か
        1.1.2 組み込みLinuxとは何か
        1.1.3 リアルタイムLinuxとは何か
    1.2 現実の組み込みLinuxシステム
        1.2.1 組み込みLinuxシステムの種類
        1.2.2 Linuxを選ぶ理由
        1.2.3 組み込みLinuxへの参加者たち
        1.2.4 著作権と特許の問題
        1.2.5 ディストリビューションについて
    1.3 サンプルとして使用するマルチコンポーネントシステム
        1.3.1 全体のアーキテクチャ
    1.4 設計と実装の手法
        1.4.1 ターゲットLinuxシステムの作成
        1.4.2 開発ツールのセットアップと利用
        1.4.3 組み込みシステムの開発
        1.4.4 ネットワーク機能
2章 基本概念
    2.1 ホストの種類
        2.1.1 Linuxワークステーション
        2.1.2 Unixワークステーション
        2.1.3 Windows(Vista、XP、2000、NT、98などの)ワークステーション
    2.2 ホストとターゲットの開発構成
        2.2.1 リンク構成
        2.2.2 リムーバブル記憶装置構成
        2.2.3 スタンドアロン構成
    2.3 ホストとターゲットのデバッグ構成
    2.4 組み込みLinuxシステムの一般的なアーキテクチャ
    2.5 システムの起動
    2.6 ブート構成
        2.6.1 半導体記憶媒体
        2.6.2 ディスク
        2.6.3 ネットワーク
    2.7 システムのメモリレイアウト
3章 ハードウェアサポート
    3.1 プロセッサアーキテクチャ
        3.1.1 ARM
        3.1.2 AVR32
        3.1.3 Intel x86
        3.1.4 M32R
        3.1.5 MIPS
        3.1.6 Motorola 68000
        3.1.7 PowerPC
        3.1.8 SuperH
    3.2 バスとインタフェース
        3.2.1 PCI/PCI-X/PCIe
        3.2.2 ExpressCard(PCMCIA PCカードの後継)
        3.2.3 PC/104、PC/104-Plus、PCI-104、そしてPCI/104-Express
        3.2.4 CompactPCI/CompactPCIe
        3.2.5 SCSI/iSCSI
        3.2.6 USB
        3.2.7 IEEE1394(FireWire)
        3.2.8 InfiniBand
        3.2.9 GPIB
        3.2.10 I2C
    3.3 入出力
        3.3.1 シリアルポート
        3.3.2 パラレルポート
        3.3.3 モデム
        3.3.4 データ収集
        3.3.5 キーボード
        3.3.6 マウス
        3.3.7 ディスプレイ
        3.3.8 サウンド
        3.3.9 プリンタ
    3.4 記憶装置
        3.4.1 メモリテクノロジデバイス
        3.4.2 PATA、SATA、およびATAPI(IDE)
        3.4.3 MTD以外のフラッシュベースのデバイス
    3.5 汎用ネットワーク
        3.5.1 Ethernet
        3.5.2 IrDA
        3.5.3 IEEE 802.11a/b/g/n(無線LAN)
        3.5.4 Bluetooth
    3.6 工業用ネットワーク
        3.6.1 CAN
        3.6.2 Modbus
    3.7 システムの監視
4章 開発ツール
    4.1 実践的なプロジェクト作業領域
    4.2 GNUクロスプラットフォーム開発ツールチェーン
        4.2.1 GNUツールチェーンのビルド入門
        4.2.2 ツールチェーンのビルド
        4.2.3 ツールチェーンの使用
    4.3 代替Cライブラリ
        4.3.1 uClibc
        4.3.2 diet libc
    4.4 Java
        4.4.1 Sun Java Micro Edition
        4.4.2 Sunと関連のないオープンソースのバーチャルマシン
        4.4.3 GNU Javaコンパイラ
    4.5 Perl
        4.5.1 microperl
        4.5.2 miniperl
    4.6 Python
    4.7 その他のプログラミング言語
    4.8 Eclipse統合開発環境
        4.8.1 Eclipseのインストール
        4.8.2 Eclipseの実行
        4.8.3 Eclipseを拡張する
        4.8.4 Eclipseの使い方
    4.9 端末エミュレータ
        4.9.1 シリアルポートへのアクセス
        4.9.2 Eclipse端末
        4.9.3 minicom
        4.9.4 UUCP cu
        4.9.5 C-Kermit
5章 カーネルについて
    5.1 カーネルの選択
        5.1.1 組み込みLinuxのカーネル
        5.1.2 2.4シリーズのカーネル
        5.1.3 2.6シリーズのカーネル
    5.2 カーネルの設定
        5.2.1 設定オプション
        5.2.2 設定方法
        5.2.3 複数の設定を管理する
        5.2.4 EXTRAVERSION変数を使う
    5.3 カーネルのコンパイル
        5.3.1 カーネルのビルド
        5.3.2 モジュールのビルド
    5.4 カーネルのインストール
        5.4.1 複数のカーネルイメージを管理する
        5.4.2 カーネルモジュールのインストール
    5.5 出荷後の対応
        5.5.1 カーネルの障害対応
6章 ルートファイルシステムの内容
    6.1 基本的なルートファイルシステムの構造
    6.2 ライブラリ
        6.2.1 glibc
        6.2.2 uClibc
    6.3 カーネルモジュール
    6.4 カーネルイメージ
    6.5 デバイスファイル
        6.5.1 静的デバイスファイル
        6.5.2 udev
    6.6 主要なシステムアプリケーション
        6.6.1 標準アプリケーションをそのままインストールする
        6.6.2 BusyBox
        6.6.3 embutils
    6.7 カスタムアプリケーション
    6.8 システムの初期化
        6.8.1 標準的なSystem V init
        6.8.2 BusyBoxのinit
        6.8.3 Minit
7章 記憶装置の操作
    7.1 MTDがサポートするデバイス
        7.1.1 基本的なMTDの使い方
        7.1.2 ネイティブCFIフラッシュ
        7.1.3 DiskOnChip
    7.2 ディスクデバイス
        7.2.1 CompactFlash
        7.2.2 フロッピーディスク
        7.2.3 ハードディスク
    7.3 スワップすべきか、スワップせざるべきか
8章 ルートファイルシステムのセットアップ
    8.1 組み込み装置のファイルシステムの種類
        8.1.1 ファイルシステムの特徴
        8.1.2 ファイルシステムの種類
    8.2 NFSマウントされたルートファイルシステムを使ってファイルシステム
  イメージをフラッシュへ書き込む
    8.3 ディスクファイルシステムをRAMディスクに格納する
    8.4 RootfsとInitramfs
    8.5 ファイルシステムの種類とレイアウトの選択
        8.5.1 アプリケーション、ライブラリ、そして静的データ
        8.5.2 動的設定ファイルとデータ
        8.5.3 一時ファイル
        8.5.4 レイアウトの例
    8.6 ソフトウェアの更新
        8.6.1 制御された環境でのソフトウェアアップグレード(フェイルセーフではない)
        8.6.2 フェイルセーフなソフトウェアのアップグレード
9章 ブートローダのセットアップ
    9.1 組み込み用ブートローダ
        9.1.1 LILO
        9.1.2 GRUB
        9.1.3 loadlin
        9.1.4 Coreboot(以前のLinuxBIOS)
        9.1.5 U-Boot
        9.1.6 RedBoot
    9.2 ネットワークブート用のサーバ設定
        9.2.1 DHCPデーモンのセットアップ
        9.2.2 TFTPデーモンのセットアップ
        9.2.3 NFSサーバ上のルートファイルシステムをマウントする
    9.3 U-Bootブートローダを使う
        9.3.1 コンパイルとインストール
        9.3.2 U-Bootによるブート
        9.3.3 U-Bootの環境変数を使用する
        9.3.4 ブートスクリプトの作成
        9.3.5 バイナリイメージの準備
        9.3.6 BOOTP/DHCP、TFTP、そしてNFSを使ってブートする
        9.3.7 バイナリイメージをフラッシュにダウンロードする
        9.3.8 U-Bootを更新する
10章 ネットワークサービスのセットアップ
    10.1 ネットワークの設定
    10.2 BusyBox
    10.3 DHCPによる動的設定
    10.4 インターネットスーパーサーバ
        10.4.1 inetd
        10.4.2 xinetd
    10.5 SNMPによるリモート管理
    10.6 Telnet経由のネットワークログイン
        10.6.1 netkitのtelnetd
    10.7 SSHによるセキュアな通信
    10.8 HTTP経由でWebコンテンツをサービスする
        10.8.1 Boa
        10.8.2 thttpd
        10.8.3 Apacheについて
        10.8.4 動的に生成されるWebコンテンツ
    10.9 リソースの配備
11章 デバッグツール
    11.1 Eclipse
    11.2 gdbによるアプリケーションのデバッグ
        11.2.1 gdbコンポーネントのビルドとインストール
        11.2.2 gdbコンポーネントを使ったターゲットアプリケーションのデバッグ
        11.2.3 グラフィカルなフロントエンドとインタフェースする
    11.3 トレース
        11.3.1 単一プロセスのトレース
        11.3.2 システムのトレース
    11.4 性能解析
        11.4.1 プロセスのプロファイリング
        11.4.2 コードカバレッジ
        11.4.3 システムのプロファイリング
        11.4.4 カーネルのプロファイリング
        11.4.5 割り込みレイテンシの測定
    11.5 メモリのデバッグ
        11.5.1 Electric FenceおよびDUMA
        11.5.2 MEMWATCH
    11.6 ハードウェアツールについて
12章 リアルタイムLinux入門
    12.1 リアルタイム処理とは何か
    12.2 Linuxにリアルタイム性が必要な場合
        12.2.1 カーネルがリアルタイム性を意識すべき理由
        12.2.2 レイテンシとは
    12.3 リアルタイムカーネルの一般的要件
        12.3.1 細かい粒度でプリエンプト可能なカーネル
        12.3.2 タスクの優先度を厳密に適用する
        12.3.3 一定時間内に外部イベントを処理する
    12.4 リアルタイムコンピューティング技術の典型的な適用例
    12.5 リアルタイムLinuxへの道
        12.5.1 コカーネルによる手法
        12.5.2 完全にプリエンプト可能なカーネルによる手法
13章 Xenomaiリアルタイムシステム
    13.1 従来のRTOSアプリケーションをLinuxへ移植する
    13.2 Xenomaiアーキテクチャ
        13.2.1 割り込みパイプライン
        13.2.2 ハードウェアとシステムの抽象化層
        13.2.3 Xenomaiコアと核
        13.2.4 Xenomaiスキン
    13.3 Xenomaiの動作
        13.3.1 リアルタイムシャドウ
        13.3.2 新しいシステムコール群
        13.3.3 カーネル機能の共有とドメインマイグレーション
    13.4 リアルタイムドライバモデル
        13.4.1 RTDMによる仲介
    13.5 Xenomaiの変幻自在な設計
14章 RTパッチ
    14.1 割り込みのスレッド化
        14.1.1 ハードIRQのスレッド化
        14.1.2 割り込みとCPUアフィニティ
        14.1.3 softirqのスレッド化
        14.1.4 softirqタイマスレッド
    14.2 優先度継承
    14.3 RTパッチを適用したカーネルの設定
        14.3.1 No Forced Preemption(プリエンプションを強制しない)
        14.3.2 Voluntary Kernel Preemption(自発的なカーネルプリエンプション)
        14.3.3 Preemptible Kernel(プリエンプト可能なカーネル)
        14.3.4 Complete Preemption(完全なプリエンプション)
    14.4 高分解能タイマ
    14.5 レイテンシトレーサ
        14.5.1 イベントトレース
        14.5.2 関数呼び出しのトレース
        14.5.3 ウェイクアップレイテンシのタイミング
    14.6 まとめ
訳者あとがき
索引