23
OSS モデルカリキュラムの学習ガイダンス 8-3-デバイスドライバに関する知識 1. 科目の概要 Linux でのデバイスドライバ開発について、開発環境やデバッグ方法、実際の開発方法を 解説する。デバイスドライバを実際に開発することによって、様々なデバイスに対するデ バイスドライバの作成方法を説明する。 2. 習得ポイント 本科目の学習により習得することが期待されるポイントは以下の通り。 習得ポイント シラバスの対応コマ 8-3-応-1.デバイスドライバの概要 Linuxにおけるドライバの位置づけ、役割を解説する。Linuxカーネルの階層構造、Linuxデ バイスドライバの種類、ユーザ空間とカーネル空間の違いを説明し、カーネル空間のプログ ラミングでの注意点を紹介する。 1 8-3-応-2.デバイスドライバのビルド環境 デバイスドライバのコンパイルについて解説する。makeファイルの記述方法や、作成した実 行ファイルのロード方法を説明する。また、コンパイル時に気をつけることとしてアライメントを 紹介する。 2 8-3-応-3.デバイスドライバのデバッグ デバイスドライバでのデバッグ方法について解説する。デバッグ方法の種類とそれぞれの特 徴を説明する。またシステムがハングアップした際のデバッグ方法にも言及する。 3 8-3-応-4.デバイスドライバ開発の環境 デバイスドライバの基本的な実装方法を説明する。実装方法の概要をはじめ、システムコー ルハンドラの登録方法やデータモデルについて説明する。 5 8-3-応-5.デバイスドライバの動作 デバイスドライバの実装に必要な機能を解説する。ioctlやprocファイルシステム、同期およ び非同期処理などデバイスドライバを取り巻く機能を紹介し、それぞれの使い方を説明す る。また64bitデバイスドライバについても言及する。 6,7 8-3-応-6.デバイスドライバからのハードウェア制御 デバイスドライバからハードウェアにアクセスする方法について解説する。I/Oレジスタの概 要やメモリマップドI/Oについて紹介し、アクセスの方法や実装の際の注意点を説明する。 8,9 8-3-応-7.カーネルの構築 作成したデバイスドライバをリリースする際にはカーネルを再構築し、カーネルにデバイスド ライバを含める必要があることを解説する。また、組み込み環境ではリソースの制約上、カー ネルに含める機能を最小限にする必要があることも紹介し、その際にもカーネルの再構築を 行う必要があることを説明する。 4 8-3-応-8.キャラクタ型デバイスドライバ ファイル操作などに利用されるキャラクタ型デバイスドライバの実装方法を解説する。最も重 要な機能の実装を説明し、メモリ空間の違いから専用のデータ移動方法を紹介する。 5,6,7 8-3-応-9.ブロック型デバイスドライバ(ホスト) ディスクなどで利用されるブロック型のデバイスドライバについて解説する。要求の処理方法 やリムーバブルメディアに対する処理を説明する。 8,9,10 8-3-応-10.デバイスドライバの周辺知識 Linuxのデバイスドライバの周辺知識を解説する。並列処理、プロセス間排他、デッドロック について説明する。また、OSのブートローダやDMAについても言及する。 11,12,13 【学習ガイダンスの使い方】 1. 「習得ポイント」により、当該科目で習得することが期待される概念・知識の全体像を把握する。 2. 「シラバス」、「IT 知識体系との対応関係」、「OSS モデルカリキュラム固有知識」をもとに、必要に応じて、 従来の IT 教育プログラム等との相違を把握した上で、具体的な講義計画を考案する。 3. 習得ポイント毎の「学習の要点」と「解説」を参考にして、講義で使用する教材等を準備する。 独立行政法人 情報処理推進機構

8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

OSS モデルカリキュラムの学習ガイダンス

8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要

Linux でのデバイスドライバ開発について、開発環境やデバッグ方法、実際の開発方法を

解説する。デバイスドライバを実際に開発することによって、様々なデバイスに対するデ

バイスドライバの作成方法を説明する。

2. 習得ポイント 本科目の学習により習得することが期待されるポイントは以下の通り。

習得ポイント 説 明 シラバスの対応コマ

8-3-応-1.デバイスドライバの概要Linuxにおけるドライバの位置づけ、役割を解説する。Linuxカーネルの階層構造、Linuxデバイスドライバの種類、ユーザ空間とカーネル空間の違いを説明し、カーネル空間のプログラミングでの注意点を紹介する。

1

8-3-応-2.デバイスドライバのビルド環境デバイスドライバのコンパイルについて解説する。makeファイルの記述方法や、作成した実行ファイルのロード方法を説明する。また、コンパイル時に気をつけることとしてアライメントを紹介する。

2

8-3-応-3.デバイスドライバのデバッグデバイスドライバでのデバッグ方法について解説する。デバッグ方法の種類とそれぞれの特徴を説明する。またシステムがハングアップした際のデバッグ方法にも言及する。

3

8-3-応-4.デバイスドライバ開発の環境デバイスドライバの基本的な実装方法を説明する。実装方法の概要をはじめ、システムコールハンドラの登録方法やデータモデルについて説明する。

5

8-3-応-5.デバイスドライバの動作デバイスドライバの実装に必要な機能を解説する。ioctlやprocファイルシステム、同期および非同期処理などデバイスドライバを取り巻く機能を紹介し、それぞれの使い方を説明する。また64bitデバイスドライバについても言及する。

6,7

8-3-応-6.デバイスドライバからのハードウェア制御デバイスドライバからハードウェアにアクセスする方法について解説する。I/Oレジスタの概要やメモリマップドI/Oについて紹介し、アクセスの方法や実装の際の注意点を説明する。

8,9

8-3-応-7.カーネルの構築

作成したデバイスドライバをリリースする際にはカーネルを再構築し、カーネルにデバイスドライバを含める必要があることを解説する。また、組み込み環境ではリソースの制約上、カーネルに含める機能を最小限にする必要があることも紹介し、その際にもカーネルの再構築を行う必要があることを説明する。

4

8-3-応-8.キャラクタ型デバイスドライバファイル操作などに利用されるキャラクタ型デバイスドライバの実装方法を解説する。最も重要な機能の実装を説明し、メモリ空間の違いから専用のデータ移動方法を紹介する。

5,6,7

8-3-応-9.ブロック型デバイスドライバ(ホスト)ディスクなどで利用されるブロック型のデバイスドライバについて解説する。要求の処理方法やリムーバブルメディアに対する処理を説明する。

8,9,10

8-3-応-10.デバイスドライバの周辺知識Linuxのデバイスドライバの周辺知識を解説する。並列処理、プロセス間排他、デッドロックについて説明する。また、OSのブートローダやDMAについても言及する。

11,12,13

※ 【学習ガイダンスの使い方】

1. 「習得ポイント」により、当該科目で習得することが期待される概念・知識の全体像を把握する。 2. 「シラバス」、「IT 知識体系との対応関係」、「OSS モデルカリキュラム固有知識」をもとに、必要に応じて、

従来の IT 教育プログラム等との相違を把握した上で、具体的な講義計画を考案する。 3. 習得ポイント毎の「学習の要点」と「解説」を参考にして、講義で使用する教材等を準備する。

独立行政法人 情報処理推進機構

Page 2: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

OSS モデルカリキュラムの学習ガイダンス

3. IT 知識体系との対応関係 「8-3-応 デバイスドライバに関する知識」と IT 知識体系との対応関係は以下の通り。

1 2 3 4 5 6 7 8 9 10 11 12 13

8-3-応 デバイスドライバ開発に関する知識

デバイスドライバ概要

デバイスドライバのビルド

デバイスドライバのデバッグ

Linuxカーネルの構築

キャラクタ型デバイスドライバの作成・1

キャラクタ型デバイスドライバの作成・2

キャラクタ型デバイスドライバの作成・3

ブロック型デバイスドライバの作成

ブロック型デバイスドライバの作成(ホスト)・2

ブロック型デバイスドライバの作成(ホスト)・3

ブート概要並列処理とプロセス間同期

DMAと電源

科目名応用レベル

<IT 知識体系上の関連部分> 科目名 1 2 3 4 5 6 7 8 9 10 11 12 13

1IT-IAS 情報保証と情報セキュリティ

IT-IAS1.基礎的な問題

IT-IAS2.情報セキュリティの仕組み(対策)

IT-IAS3.運用上の問題

IT-IAS4.ポリシー IT-IAS5.攻撃IT-IAS6.情報セキュリティ分野

IT-IAS7.フォレンジック(情報証拠)

IT-IAS8.情報の状態

IT-IAS9.情報セキュリティサービス

IT-IAS10.脅威分析モデル

IT-IAS11.脆弱性

2

IT-SP 社会的な観点とプロフェッショナルとしての課題

IT-SP1.プロフェッショナルとしてのコミュニケーション

IT-SP2.コンピュータの歴史

IT-SP3.コンピュータを取り巻く社会環境

IT-SP4.チームワーク

IT-SP5.知的財産権

IT-SP6.コンピュータの法的問題

IT-SP7.組織の中のIT

IT-SP8.プロフェッショナルとしての倫理的な問題と責任

IT-SP9.プライバシーと個人の自由

3 IT-IM 情報管理IT-IM1.情報管理の概念と基礎

IT-IM2.データベース問合わせ言語

IT-IM3.データアーキテクチャ

IT-IM4.データモデリングとデータベース設計

IT-IM5.データと情報の管理

IT-IM6.データベースの応用分野

4IT-WS Webシステムとその技術

IT-WS1.Web技術 [1-Ⅰ-7]

IT-WS2.情報アーキテクチャ [1-Ⅰ-7]

IT-WS3.デジタルメディア

IT-WS4.Web開発 IT-WS5.脆弱性IT-WS6.ソーシャルソフトウェア

5IT-PF プログラミング基礎

IT-PF1.基本データ構造

IT-PF2.プログラミングの基本的構成要素

IT-PF3.オブジェクト指向プログラミング

IT-PF4.アルゴリズムと問題解決

IT-PF5.イベント駆動プログラミング

IT-PF6.再帰

6IT-IPT 技術を統合するためのプログラミング

IT-IPT1.システム間通信 [1-Ⅰ-3]

IT-IPT2.データ割り当てと交換

IT-IPT3.統合的コーディング

IT-IPT4.スクリプティング手法

IT-IPT5.ソフトウェアセキュリティの実現

IT-IPT6.種々の問題

IT-IPT7.プログラミング言語の概要

7CE-SWE ソフトウェア工学

CE-SWE0.歴史と概要

CE-SWE1.ソフトウェアプロセス

CE-SWE2.ソフトウェアの要求と仕様

CE-SWE3.ソフトウェアの設計

CE-SWE4.ソフトウェアのテストと検証

CE-SWE5.ソフトウェアの保守

CE-SWE6.ソフトウェア開発・保守ツールと環境 [1-Ⅰ-4]

CE-SWE7.ソフトウェアプロジェクト管理

CE-SWE8.言語翻訳CE-SWE9.ソフトウェアのフォールトトレランス

CE-SWE10.ソフトウェアの構成管理

CE-SWE11.ソフトェアの標準化 [1-Ⅰ-6]

8

IT-SIA システムインテグレーションとアーキテクチャ

IT-SIA1.要求仕様IT-SIA2.調達/手配

IT-SIA3.インテグレーション [1-Ⅰ-4]

IT-SIA4.プロジェクト管理

IT-SIA5.テストと品質保証

IT-SIA6.組織の特性

IT-SIA7.アーキテクチャ

9IT-NET ネットワーク

IT-NET1.ネットワークの基礎

IT-NET2.ルーティングとスイッチング

IT-NET3.物理層IT-NET4.セキュリティ

IT-NET5.アプリケーション分野 [1-Ⅰ-5]

IT-NET6.ネットワーク管理

CE-NWK0.歴史と概要

CE-NWK1. 通信ネットワークのアーキテクチャ

CE-NWK2.通信ネットワークのプロトコル

CE-NWK3.LANとWAN

CE-NWK4.クライアントサーバコンピューティング [1-Ⅰ-3]

CE-NWK5.データのセキュリティと整合性

CE-NWK6.ワイヤレスコンピューティングとモバイルコンピューティング

CE-NWK7.データ通信

CE-NWK8.組込み機器向けネットワーク

CE-NWK9.通信技術とネットワーク概要

CE-NWK10.性能評価

CE-NWK11.ネットワーク管理

CE-NWK12.圧縮と伸張

CE-NWK13.クラスタシステム

CE-NWK14.インターネットアプリケーション [1-Ⅰ-5,7]

CE-NWK15.次世代インターネット

CE-NWK16.放送

11IT-PT プラットフォーム技術

IT-PT1.オペレーティングシステム [1-Ⅰ-3]

IT-PT2.アーキテクチャと機構

IT-PT3.コンピュータインフラストラクチャ

IT-PT4.デプロイメントソフトウェア [1-Ⅰ-4]

IT-PT5.ファームウェア

IT-PT6.ハードウェア

12CE-OPS オペレーティングシステム

CE-OPS0.歴史と概要

CE-OPS1.並行性CE-OPS2.スケジューリングとディスパッチ

CE-OPS3.メモリ管理

CE-OPS4.セキュリティと保護

CE-OPS5.ファイル管理

CE-OPS6.リアルタイムOS

CE-OPS7.OSの概要CE-OPS8.設計の原則

CE-OPS9.デバイス管理

CE-OPS10.システム性能評価

コンピュー

ハー

ドウェ

アと

アー

キテクチャ

13CE-CAO コンピュータのアーキテクチャと構成

CE-CAO0.歴史と概要

CE-CAO1.コンピュータアーキテクチャの基礎

CE-CAO2.メモリシステムの構成とアーキテクチャ

CE-CAO3.インタフェースと通信

CE-CAO4.デバイスサブシステム

CE-CAO5.CPUアーキテクチャ

CE-CAO6.性能・コスト評価

CE-CAO7.分散・並列処理

CE-CAO8.コンピュータによる計算

CE-CAO9.性能向上

14 IT-ITF IT基礎IT-ITF1.ITの一般的なテーマ [1-Ⅰ-4]

IT-ITF2.組織の問題

IT-ITF3.ITの歴史

IT-ITF4.IT分野(学科)とそれに関連のある分野(学科)

IT-ITF5.応用領域IT-ITF6.IT分野における数学と統計学の活用

CE-ESY0.歴史と概要

CE-ESY1.低電力コンピューティング

CE-ESY2.高信頼性システムの設計

CE-ESY3.組込み用アーキテクチャ

CE-ESY4.開発環境CE-ESY5.ライフサイクル

CE-ESY6.要件分析 CE-ESY7.仕様定義 CE-ESY8.構造設計 CE-ESY9.テストCE-ESY10.プロジェクト管理

CE-ESY11.並行設計(ハードウェア、ソフトウェア

CE-ESY12.実装

CE-ESY13.リアルタイムシステム設計

CE-ESY14.組込みマイクロコントローラ

CE-ESY15.組込みプログラム

CE-ESY16.設計手法

CE-ESY17.ツールによるサポート

CE-ESY18.ネットワーク型組込みシステム

CE-ESY19.インタフェースシステムと混合信号システム

CE-ESY20.センサ技術

CE-ESY21.デバイスドライバ

CE-ESY22.メンテナンス

CE-ESY23.専門システム

CE-ESY24.信頼性とフォールトトレランス

複数領域にまたがるもの

15CE-ESY 組込みシステム

システム基盤

10CE-NWK テレコミュニケーション

分野

組織関連事項と情報システム

応用技術

ソフトウェ

アの方法と技術

独立行政法人 情報処理推進機構

Page 3: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

OSS モデルカリキュラムの学習ガイダンス

独立行政法人 情報処理推進機構

4. OSS モデルカリキュラム固有の知識 OSS モデルカリキュラム固有の知識として、Linux 環境におけるデバイスドライバ

の開発がある。GNU 開発環境を Linux 上で利用して、デバイスドライバを開発する手法

を習得する。 科目名 第1回 第2回 第3回 第4回 第5回 第6回 第7回

(1) デバイスドラバとは

(1) デバイスドライバのビルド手順

(1) デバッグ環境の種類

(1) Linuxカーネルを構築する意義

(1) ドライバ作成の手順

(1) procファイルシステムとは

(1) アプリケーションからドライバへの接続

(2) Linuxアーキテクチャの復習

(2) カーネルのコンパイル

(2) Linuxカーネルの構築方法

(2) 割り込み (2) procファイルシステム処理の実装

(2) ioctlによるドライバへの命令

(3) カーネル関数の復習

(3) デバイスドラバのコンパイル

(3) ドライバの組み込み

(3) NULLドライバの作成

(4) クロスアーキテクチャ

(5) 疑似ファイルシステム

第8回 第9回 第10回 第11回 第12回 第13回

(1) ブロック型デバイスの種類

(1) requestハンドラの実装

(1) プラグアンドプレイ (1) ブートローダーの種類

(1) 並列処理 (1) DMA

(2) RAMディスクを実装する

(2) システムハンドラの実装

(2) ブート方法 (2) プロセス間同期 (2) 省電力

(2) プロセス間同期

8-3-応 デバイスドライバ開発に関する知識

(網掛け部分は IT 知識体系で学習できる知識を示し、それ以外は OSS モデルカリキュラム固有の知識を示している)

Page 4: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

スキル区分 OSS モデルカリキュラムの科目 レベル

開発体系分野 8-3-応 デバイスドライバ開発に関する知識 応用

習得ポイント 8-3-応-1. デバイスドライバの概要

対応する

コースウェア

第 1 回 デバイスドライバ概要

8-3-応-1. デバイスドライバの概要

Linux におけるドライバの位置づけ、役割を解説する。Linux カーネルの階層構造、Linux デバイスド

ライバの種類、ユーザ空間とカーネル空間の違いを説明し、カーネル空間のプログラミングでの注

意点を紹介する。

【学習の要点】

* デバイスドライバとはハードウェアを制御するためのソフトウェアであり、Linux カーネルの 下層

で動作する。

* Linux デバイスドライバの種類は大きく、キャラクタ型、ブロック型、ネットワークの 3 種類に分ける

ことができる。

* 一般的にLinuxはユーザ空間とカーネル空間があり、デバイスドライバはカーネル空間で動作

する。

* カーネル空間ではメモリが保護されていないので、メモリの扱いには十分注する必要がある。

図 8-3-応- 1 デバイスドライバの位置づけと種類

8-3-応 - 1

Page 5: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

【解説】

1) デバイスドライバの概要

デバイスドライバとは OS の一部として動作し、コンピュータとハードウェアをつなぐソフトウェアであ

る。デバイスドライバの中でも階層構造があり、 下層のハードウェア依存部分からファイルシステ

ムやフィルタドライバといった、ハードウェアデバイスに直接アクセスしないドライバ等様々な種類が

ある。

2) デバイスの種類

Linux におけるデバイスは大きく以下の3種類に分けることができ、デバイスドライバもそれの特徴に

合わせて作成する。

* キャラクタ型デバイス

1バイト単位のバイトストリームとして扱われるデバイス。シリアルポートやモデムなどのハードウ

ェアが挙げられる。

* ブロック型デバイス

デバイスへのデータアクセスをまとまった単位(ブロック)で扱われるデバイス。ハードディスクや

CD ドライブなどが挙げられる。

* ネットワークインタフェース

LAN カード等ネットワークを扱うデバイス。

3) デバイスドライバとアプリケーションの違い

* プログラムが動作するメモリ空間

Linux のメモリ空間は大きく「ユーザ空間」と「カーネル空間」に分けられる。アプリケーションはユ

ーザ空間で動作するのに対し、デバイスドライバはカーネル空間で動作する。

* プログラムのコンパイル方法

コンパイルにはカーネルのソースコードが必要。Makefile もデバイスドライバ用の書式で作成す

る。

* プログラムの実行方法

実行ファイルをカーネルにロードさせて動作させるので、カーネルへのインストールおよびリム

ーブのコマンドを使用する。

8-3-応 - 2

Page 6: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

スキル区分 OSS モデルカリキュラムの科目 レベル

開発体系分野 8-3-応 デバイスドライバ開発に関する知識 応用

習得ポイント 8-3-応-2. デバイスドライバのビルド環境

対応する

コースウェア

第 2 回 デバイスドライバのビルド

8-3-応-2. デバイスドライバのビルド環境

デバイスドライバのコンパイルについて解説する。make ファイルの記述方法や、作成した実行ファイ

ルのロード方法を説明する。また、コンパイル時に気をつけることとしてアライメントを紹介する。

【学習の要点】

* デバイスドライバのコンパイルには make された実行環境のカーネルソースコードが必要である。

* その他はアプリケーションと同様の手順でのコンパイルとなる。

* 作成された実行ファイルは insmod/rmmod コマンドを利用することでカーネルにロードすることが

出来る。

* コンパイル時にはアライメントと呼ばれる構造体の境界調整に注意する必要がある。

図 8-3-応- 2 デバイスドライバのビルド手順

8-3-応 - 3

Page 7: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

【解説】

1) デバイスドライバのビルド環境の構築

デバイスドライバのビルドには以下の環境が必要である

* 実行環境のコンパイラ

* make された実行環境のカーネルソース

* コンパイル用 Makefile

2) デバイスドライバのビルド手順

デバイスドライバのビルドは Makefile を用意して make を行えばよい。

Makefile の例を示す。

# ターゲットモジュール

TARGET=hello

# コンパイラ

CC=gcc

# 実行カーネルのソースコードパス

KDIR = /usr/src/linux-2.6.27.19-5

# make

obj-m := $(TARGET).o

all:

make -C $(KDIR) M=$(PWD) V=0 modules

clean:

make -C $(KDIR) M=$(PWD) V=0 clean

3) デバイスドライバの実行手順

* ビルドされたデバイスドライバは「insmod ko ファイル名」でカーネルに組み込み実行することが

できる。

* printk によって出力された文字列は○○で確認できる。

* デバイスドライバが不要になった場合は「rmmod ko ファイル名」で削除することができる。

4) アライメント

コンパイル時には、アライメントと呼ばれる変数境界の調整が行われる。アライメントによって、構造

体の中の char 型や short 型のような小さい型を、int 型の単位に合わせて変数を割り充てる。これに

より変数のオフセットが、意図しない場所に置かれる可能性があるため、注意が必要である。

8-3-応 - 4

Page 8: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

スキル区分 OSS モデルカリキュラムの科目 レベル

開発体系分野 8-3-応 デバイスドライバ開発に関する知識 応用

習得ポイント 8-3-応-3. デバイスドライバのデバッグ

対応する

コースウェア

第 3 回 デバイスドライバのデバッグ

8-3-応-3. デバイスドライバのデバッグ

デバイスドライバでのデバッグ方法について解説する。デバッグ方法の種類とそれぞれの特徴を説

明する。またシステムがハングアップした際のデバッグ方法にも言及する。

【学習の要点】

* デバイスドライバのデバッグには printk 関数でトレースする方法や gdb のようなデバッガソフトを

使用してデバッグする方法がある。

* printk 関数でのデバッグは手軽にできるが、速度が遅い、ハングアップの不具合には対応でき

ないといった欠点もある。

* デバッガソフトを使用すると、ハングアップの不具合も含めて対応可能であるが、習得に時間が

かかる欠点がある。

図 8-3-応- 3 デバイスドライバのデバッグ

8-3-応 - 5

Page 9: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

【解説】

1) デバッグの方法

デバイスドライバのデバッグ方法は大きく分けてシリアル通信を利用したトレースデバッグとデバッ

ガソフトを利用したデバッグがある。それぞれにメリットとデメリットがあるので、状況にあった選択を

することが大切である。

2) シリアルデバッグ

もっとも基本的なデバッグ手法。ソフトウェアに printk 関数で動作状況を出力し、それをシリアル通

信にてホスト PC で確認する。

シリアル出力はイーサネットや USB と比較して複雑なデバイスドライバを必要としないため、開発の

初期段階から利用できる。

ただし、シリアル出力処理に CPU を使用するため、速度の低下やトレース部分を除いたリリースコ

ードで動作が変わってくるなどのデメリットもある。また、システムがハングアップするような不具合の

場合、シリアル出力が停止してしまうため利用することができない。

3) デバッガを利用したデバッグ

デバッガを利用することでプログラムを任意の場所で停止、ステップ実行、変数の内容を確認など

カーネルの内部動作を追うことができる。

* GDB

一般的な Linux デバッガ。コンソールからの利用が基本であるが、統合開発環境を用いることで

UI デバッグを行うことも可能。フルスタックの GDB ではターゲットのリソース上大きすぎることが

多いため、後述する GDBServer や KGDB を利用する。

* GDBServer

リソースの少ないターゲット用のデバッガ。GDBServer は GDB のリモートサーバであり、自身に

はデバッグ機能は搭載していない。GDB からの接続を受けて GDB より各種デバッグコマンドを

受け取り実行する。フットプリントが小さいため、組み込みシステムのようなリソースの少ない環境

でも利用できる。

* KGDB

Linux 2.6.26 からカーネル本体に統合されたカーネルデバッガで、機能としては GDBServer と

同等。

KGDB を有効にするためには、カーネルの構築(menuconfig)で該当項目を ON に設定後、カ

ーネルをビルドすればよい。

8-3-応 - 6

Page 10: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

スキル区分 OSS モデルカリキュラムの科目 レベル

開発体系分野 8-3-応 デバイスドライバ開発に関する知識 応用

習得ポイント 8-3-応-4. デバイスドライバ開発の環境

対応する

コースウェア

第 5 回 キャラクタ型デバイスドライバの作成・1

8-3-応-4. デバイスドライバ開発の環境

デバイスドライバの基本的な実装方法を説明する。実装方法の概要をはじめ、システムコールハン

ドラの登録方法やデータモデルについて説明する。

【学習の要点】

* デバイスドライバは実装する機能を記述した関数の集合である。

* カーネルへドライバを登録するためにオペレーションハンドラの登録構造体に実装した関数を

登録する。

図 8-3-応- 4 カーネルへのドライバ機能の登録

8-3-応 - 7

Page 11: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

【解説】

1) デバイスドライバの実装概要

デバイスドライバで実装すべき機能はデバイスの種類ごとに決まっており、その特性によって提供

される構造体に定義されているシステムコールハンドラを実装する。

2) デバイスドライバの機能

* デバイスへの書き出しを行う

ハードディスクに対してファイルのデータを書き込みたい場合や、シリアル通信でデータを送信

する場合には write システムコールを実装し、デバイスへの書き出し処理を行う。

* デバイスからの読み込みを行う

ハードディスクからファイルのデータを読み込みたい場合や、シリアル通信でデータを受信する

場合には read システムコールを実装し、デバイスからの読み込み処理を行う。

* デバイスの設定を変更する

シリアル通信で通信速度の変更を行いたい場合などには、ioctl システムコールと独自のコマン

ドを実装し、デバイスへの設定変更を行う。また、デバイスの設定情報を読み込む場合にも利用

する。

* デバイスドライバの振る舞いを変更する

デバイスドライバの振る舞いを変更したい場合は、read_proc システムコールを実装する。

read_proc システムコールで proc ファイルシステムでの読み込みとともに、proc ファイルシステム

を利用した設定変更を行うこともできる。

3) デバイスドライバの初期化終了処理

* module_init

デバイスドライバの初期化処理を記述する関数を登録する。

* module_exit

デバイスドライバの終了処理を記述する関数を登録する。

4) カーネルへの登録方法

* キャラクタ型デバイスドライバ

file_operations 構造体にシステムコールハンドラを設定し、module_init 内でカーネルへの登録

を行う。

* ブロック型デバイスドライバ

block_device_operations構造体にシステムコールハンドラを設定し、module_init 内でカーネル

への登録を行う。

8-3-応 - 8

Page 12: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

スキル区分 OSS モデルカリキュラムの科目 レベル

開発体系分野 8-3-応 デバイスドライバ開発に関する知識 応用

習得ポイント 8-3-応-5. デバイスドライバの動作

対応する

コースウェア

第 6 回 キャラクタ型デバイスドライバの作成・2

第 7 回 キャラクタ型デバイスドライバの作成・3

8-3-応-5. デバイスドライバの動作

デバイスドライバの実装に必要な機能を解説する。ioctl や proc ファイルシステム、同期および非同

期処理などデバイスドライバを取り巻く機能を紹介し、それぞれの使い方を説明する。また 64bit デ

バイスドライバについても言及する。

【学習の要点】

* 基本的な機能(Read/Write)の他に独自の機能を付加したい場合には ioctl を実装する。

* proc ファイルシステムはカーネル情報を外部に出力するために使用する。

* ハードウェアに対するアクセスに時間がかかる場合は同期的または非同期的にデバイスドライ

バで完了を待つ必要がある。

* 64bit 環境ではデータ型のサイズが変わるので注意が必要。

図 8-3-応- 5 アプリケーションからデバイスドライバまでの流れ

8-3-応 - 9

Page 13: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

【解説】

1) ioctl の実装

ioctl システムコールを実装することで、システムコールに存在しない機能や、デバイスドライバ自身

に送る命令を受け付ける処理を記述することができる。

2) proc ファイルシステムの対応

proc ファイルシステムに対する情報の提供は、read_proc システムコールを実装することで行う。実

装したシステムコールを create_proc_read_entry 関数にて/proc の階層にエントリを作成する。

3) 同期と非同期

デバイスへのアクセスの際に要求や応答に時間がかかる場合は、同期的または非同期的に完了

を待つ必要がある。

* 同期

wait 系の関数のように、その呼び出しで処理が一時的に中断し、wake_up 系の関数が別のプロ

セスから呼ばれることで処理を再開する。処理の流れが一つだけになるため同期と呼ばれる。

* 非同期

select/signal のように待ち状態であっても、別の処理を行うことができる待ち方を非同期と呼ぶ。

4) 64bit での注意点

64bit 環境で各データ型のサイズは、コンパイラのデータモデルによって決められ、I(int)、L(long)、

P(pointer)によってあらわされる。

32bitCPU では ILP32 データモデルが採用され、int 型 32bti、long 型 32it、long long 型 64bit、ポイ

ンタ型が 32bit となっている。

64bitCPU ではデータモデルによってデータ型の大きさが変わり、Linux 系の環境では、主に LP64

データモデルが利用され、int 型 32bit、long 型 64bit、long long 型 64bit、ポインタ型が 64bit となっ

ている。

LLP64 データモデルは、Windows 系の 64bitOS で採用され、int 型 32bit、long 型 32bit、long long

型 64bit、ポインタ型が 64bit となっている。

ILP64 データモデルは、一部の Linux などで利用され、LP64 に加えて int 型も 64bit となっている。

データモデルの違いによる注意点として、以下のものが挙げられる。

* 構造体や共用体などのサイズ、オフセットが変わってしまうため、これらに依存するコードはデー

タモデルによって正しく動作しない可能性がある。

* int 型、long 型、ポインタ型を相互にキャストする場合、データモデルによっては 64bit から 32bit

になってしまい、データが欠ける可能性がある。

* 補数表現を利用した場合、符号付き 32bit で-1 を 0xFFFFFFFF としても、64bit 環境ではそのま

ま 0xFFFFFFFF として扱われてしまう。

8-3-応 - 10

Page 14: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

スキル区分 OSS モデルカリキュラムの科目 レベル

開発体系分野 8-3-応 デバイスドライバ開発に関する知識 応用

習得ポイント 8-3-応-6. デバイスドライバからのハードウェア制御

対応する

コースウェア

第 8 回 ブロック型デバイスドライバの作成(ホスト)・1

第 9 回 ブロック型デバイスドライバの作成(ホスト)・2

8-3-応-6. デバイスドライバからのハードウェア制御

デバイスドライバからハードウェアにアクセスする方法について解説する。I/O レジスタの概要やメモ

リマップド I/O について紹介し、アクセスの方法や実装の際の注意点を説明する。

【学習の要点】

* デバイスドライバからハードウェアにアクセスする際は I/O レジスタにアクセスする必要がある。

* I/O レジスタへのアクセスは CPU ごとに異なり、専用のアクセス命令があるものや、メモリにマッ

ピングするメモリマップド I/O と呼ばれる機能を提供するものがある。

* I/O レジスタへのアクセスはコンパイラの 適化によって順序が入れ替わることを防ぐために、メ

モリバリアや volatile といった機能を利用する。

図 8-3-応- 6 メモリと I/O レジスタ

8-3-応 - 11

Page 15: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

【解説】

1) 論理アドレスからのデバイスアクセス

MMU(Memory Management Unit)を持つ CPU ではデバイスドライバは論理アドレス上で動作する

ため、ハードウェアが接続されている物理アドレスに直接アクセスすることができない。そのため、物

理アドレスを論理アドレスに変換しアクセスする必要がある。

また、MMU を持たない CPU ではデバイスドライバは物理アドレス上で動作するが、ハードウェアの

接続によって、ポートへのアクセスが必要な場合、レジスタがメモリにマッピングされ直接アクセスで

きる場合などハードウェアや構成によって様々に変わるので注意が必要である。

2) デバイスへのアクセス方法

* ioread/iowrite 関数

I/O ポートへのアクセスを提供する。アクセス幅によって ioread8(8bit)、ioread16(16bit)、

ioread32(32bit)を利用する(write も同様である)。

* ioremap 関数

物理アドレスを論理アドレスに変換する。

* メモリマップド I/O

ハードウェアのレジスタがメモリ空間にマッピングされているので特別な命令を必要とせず、メモ

リアクセスと同じようにハードウェアにアクセスできる。

3) ソフトウェアのデバイスアクセスにおける注意点

* メモリバリア

ハードウェアレベルへのアクセス順序が変わらないことを保証する。ハードウェアは書き出す/読

み込むデータだけでなく、アクセスのタイミング、順序も重要な要素となるため、たとえ非効率で

あったとしてもその順序を維持する必要がある。マルチコアやマルチスレッドなど、アクセスの一

意性を損なう可能性がある場合にメモリバリアを利用する。

* volatile

コンパイラレベルの 適化を抑制する。ハードウェアアクセスにはソフトウェアからみた場合に、

ムダに見えるものもある。コンパイラはそれらのコードを削除したり、順序を入れ替えたりする

適化を行う。メモリバリアの項にもあるが、ハードウェアアクセスは書き出す/読み込むデータで

はなく、書き出す/読み込む行為自体が必要な場合があるのでソースコード上の命令、順序を

維持させたい。このような場合 volatile 識別子を該当変数に付加することでコンパイラの 適化

を抑制することができる。

8-3-応 - 12

Page 16: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

スキル区分 OSS モデルカリキュラムの科目 レベル

開発体系分野 8-3-応 デバイスドライバ開発に関する知識 応用

習得ポイント 8-3-応-7. カーネルの構築

対応する

コースウェア

第 4 回 Linux カーネルの構築

8-3-応-7. カーネルの構築

作成したデバイスドライバをリリースする際にはカーネルを再構築し、カーネルにデバイスドライバを

含める必要があることを解説する。また、組み込み環境ではリソースの制約上、カーネルに含める機

能を 小限にする必要があることも紹介し、その際にもカーネルの再構築を行う必要があることを説

明する。

【学習の要点】

* カーネルを新たに構築することで必要な環境を作成することができる。

* カーネル構築時に必要な機能のみを導入することで、実行ファイルや実行時のメモリ使用量を

削減することができる。

* デバイスドライバをカーネルに挿入することで、外部からデバイスドライバを導入する必要がなく

なる。

図 8-3-応- 7 カーネルの構築

8-3-応 - 13

Page 17: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

【解説】

1) カーネル構築の概要

組み込み開発ではターゲットハードウェアの環境によってカーネルに組み込むデバイスドライバや

ミドルウェアを選択し、カーネルを構築(ビルド)する必要がある。

カーネルに組み込まれるデバイスドライバやミドルウェアなどは.config ファイルに記録され、この内

容を基に構築される。

2) カーネル構築の種類

カーネル構築の方法は.config ファイルを編集することが前提になるが、この編集方法にはいくつか

の種類がある。 .config ファイルを編集したのち、カーネルのソースフォルダにて make コマンドを実

行することで新しいカーネルイメージが作成される。

作成されたカーネルはデスクトップ Linux では/boot/の下にイメージが置かれ、組み込み環境で

ROM に書き出す場合には、導入したブートローダがサポートする形式に変換して書き出す。

* .config ファイルを直接編集する

vi などのエディタで.config ファイルを直接編集する。

* make config を利用する

コンソール にて選択項目を Yes/No で編集する。

* make menuconfig を利用する

TUI(TextUserInterface)にて選択項目を編集する。

* make xconfig を利用する

GUI にて選択項目を編集する。

3) デバイスドライバの組み込み

デバイスドライバをリリースするときにはカーネルの起動と同時に動作可能になるよう、カーネルに

組み込んだ状態にする。

自作デバイスドライバのカーネルへの組み込みは、カーネルソースフォルダの指定された個所

(<Root>/drivers など)に組み込むデバイスドライバのソースコードを置き、そこにある kconfig と

Makefile を編集し、カーネルに導入可能な状態にする。

8-3-応 - 14

Page 18: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

スキル区分 OSS モデルカリキュラムの科目 レベル

開発体系分野 8-3-応 デバイスドライバ開発に関する知識 応用

習得ポイント 8-3-応-8. キャラクタ型デバイスドライバ

対応する

コースウェア

第 5 回 キャラクタ型デバイスドライバの作成・1

第 6 回 キャラクタ型デバイスドライバの作成・2

第 7 回 キャラクタ型デバイスドライバの作成・3

8-3-応-8. キャラクタ型デバイスドライバ

ファイル操作などに利用されるキャラクタ型デバイスドライバの実装方法を解説する。 も重要な機

能の実装を説明し、メモリ空間の違いから専用のデータ移動方法を紹介する。

【学習の要点】

* キャラクタ型のデバイスドライバはモデムやファイルなど1バイト単位での読み書きをする必要が

ある場合に利用する。

* キャラクタ型で実装できる機能は file_operators 構造体に定義されている。

図 8-3-応- 8 キャラクタ型デバイスドライバ

8-3-応 - 15

Page 19: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

【解説】

1) キャラクタ型デバイスドライバの実装

キャラクタ型デバイスドライバはデバイスに対して 1 バイト単位でのアクセスが必要な場合に利用す

る。キャラクタ型デバイスの例として下記に示すデバイスがある。

* シリアル

* モデム

2) システムコールハンドラの種類

デバイスドライバで利用できるシステムコールには様々なものがあるが、必要なハンドラのみ実装す

ればよい。主なシステムコールハンドラを挙げる。

* open

アプリケーションやユーザープログラムがデバイスの使用を開始する際に呼び出される。デバイ

スへのアクセスリソースの取得やデバイスアクセスのための初期化処理を行う。

* release

アプリケーションやユーザープログラムがデバイスの使用を終了する際に呼び出される。デバイ

スへのアクセスリソースの解放やデバイスアクセスの終了処理を行う。

* read

アプリケーションやユーザープログラムがデバイスから読み込みを行う場合に呼び出される。

* write

アプリケーションやユーザープログラムがデバイスから書き出しを行う場合に呼び出される。

* llseek

アプリケーションやユーザープログラムがデバイスの読み書き位置を変更したい場合に呼び出

される。

* ioctl

アプリケーションやユーザープログラムがデバイスの設定を変更したい場合に呼び出される。

* read_proc

アプリケーションやユーザープログラムがデバイスドライバ自体の設定を確認/変更したい場合

に呼び出される。

8-3-応 - 16

Page 20: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

スキル区分 OSS モデルカリキュラムの科目 レベル

開発体系分野 8-3-応 デバイスドライバ開発に関する知識 応用

習得ポイント 8-3-応-9. ブロック型デバイスドライバ(ホスト)

対応する

コースウェア

第 8 回 ブロック型デバイスドライバの作成(ホスト)・1

第 9 回 ブロック型デバイスドライバの作成(ホスト)・2

第 10 回 ブロック型デバイスドライバの作成(ホスト)・3

8-3-応-9. ブロック型デバイスドライバ(ホスト)

ディスクなどで利用されるブロック型のデバイスドライバについて解説する。要求の処理方法やリム

ーバブルメディアに対する処理を説明する。

【学習の要点】

* ブロック型のデバイスドライバは、HDD や CD-R などデータをブロック単位で扱う必要がある場

合に利用する。

* ブロック型で実装できる機能は block_device_operatiorns 構造体で定義されており、読み書きの

要求は request 関数ですべて行う。

* リムーバブルメディアに対する処理は、media_changed と revalidate 関数で行う。

図 8-3-応- 9 ブロック型デバイスドライバ

8-3-応 - 17

Page 21: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

【解説】

1) ブロック型デバイスドライバの実装

ブロック型のデバイスはデータをデバイスの指定するデータ量(ブロック)の単位で書き込みおよび

読み込みを行うデバイスのことである。ブロック型デバイスの例として下記に示すものがある。

* ハードディスク

* CD-ROM

2) 要求の処理

ブロック型デバイスのデバイスドライバとキャラクタ型デバイスのドライバの違いは、ブロック型では

read や write、デバイス操作を request システムコールで一手に行う。

* request_queue

初期化時に blk_init_queue 関数によって、ブロック I/O 要求を受け付ける RequestQueue を作成

する。RequestQueue には I/O スケジューラの実体である Elevator が関連づけられ、ブロック I/O

の要求は一旦 Elevator に入れられて、スケジューリングされた後にディスパッチされる。

3) リムーバブルディスクへの対応

* media_changed

メディアが変更されたことを確認するために呼び出されるシステムコールで、デバイスの状態を

判別し、状態の変更を真偽値で返す。

* reinvalidate

メディアの状態が変更されたときに呼び出されるシステムコールで、新しいメディアを使用する

準備処理を行う。

4) I/O スケジューラ

ブロック型デバイスドライバの作成において重要な項目の一つに I/O スケジューラがある。I/O スケ

ジューラは、ブロック型のデバイスに対して書き出しおよび読み込みを効率的に行うために、要求さ

れた順序を入れ替えるなどの処理を行う。I/O スケジューラには下記の 4 種類がある。

* CFQ(Complete Fair Queuing)

I/O 要求に優先度を設け、優先度に応じて処理を行っていく方式。

* Anticipatory

名前の元となった Anticipation とは予測の意味があり、I/O 要求があった場合にそのデバイスに

対してセクタなどを加味し、 も効率の良いアクセスができるものを予測し、効率のよい I/O から

順に処理を行っていく方式。

* Deadline

処理時間の期限を設ける方式で、一定時間が経過した I/O 要求を優先的に処理することにより

処理遅延を防ぐことができる。

* NOOP

I/O 要求を要求された順に処理する方式。

8-3-応 - 18

Page 22: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

スキル区分 OSS モデルカリキュラムの科目 レベル

開発体系分野 8-3-応 デバイスドライバ開発に関する知識 応用

習得ポイント 8-3-応-10. デバイスドライバの周辺知識

対応する

コースウェア

第 11 回 ブート概要

第 12 回 並列処理とプロセス間同期

第 13 回 DMA と電源

8-3-応-10. デバイスドライバの周辺知識

Linux のデバイスドライバの周辺知識を解説する。並列処理、プロセス間排他、デッドロックについて

説明する。また、OS のブートローダや DMA についても言及する。

【学習の要点】

* デバイスドライバは並列で実行されることを念頭において設計、実装を行う。

* 並列処理の排他のためにセマフォやスピンロックを利用する。

* CPU のアーキテクチャによってブートローダを選択する必要がある。

* DMA を利用することで CPU を利用することなくメモリのデータ転送を行うことができる。

図 8-3-応- 10 並列処理でのデータ破壊

8-3-応 - 19

Page 23: 8-3-応 デバイスドライバに関する知識OSSモデルカリキュラムの学習ガイダンス 8-3-応 デバイスドライバに関する知識 ※ 1. 科目の概要 Linux

8-3-応 - 20

【解説】

1) 非同期処理の概要

デバイスドライバは複数のプロセスから同時に呼ばれる可能性があるため、非同期処理を念頭に

置いた設計、実装を行う必要がある。

例えばデバイスに対するアクセスは一意にしなければならず、この間は他の処理が入ってはならな

いので、排他処理を行いアクセスの一貫性を保証する。

またグローバル変数など、デバイスドライバ全体で利用可能なデータについてもアクセスが重なると

データの保証ができなくなるので、排他処理を行い確実なアクセスを保証する必要がある。このよう

な場合にはリエントラント(再入可能)と呼ばれる実装を意識するとよい。

2) 排他処理とデッドロック

排他処理ではデッドロックと呼ばれる不具合に細心の注意を払う必要がある。デッドロックは複数の

プロセスがお互いの排他区間(クリティカルセクション)の終了を待ち、すべてのプロセスが実行で

きなくなる状態を指す。

デッドロックは主に排他オブジェクトを複数使用した場合に起こる可能性があるため、排他区間で

他の排他オブジェクトを取得しようとしない、排他区間を一つにまとめるなど考慮する必要がある。

3) ブートローダ

ブートローダとはハードウェアの電源投入後、 初に起動するプログラムで、OS を起動させるため

に必要なソフトウェアである。Linux を実装する CPU やハードウェア環境によって適切なブートロー

ダを選択する。

* GRUB

シェルの実装や数多くのファイルシステムに対応しており、多くの PC Linux に採用されているブ

ートローダ。

* LILO

PC Linux に採用されているブートローダ。GRUB と同様に多くの環境に実装されている。シェル

やファイルシステムをサポートしていないため設定は難しいがその分シンプルである。

* RedBoot

PowerPC や ARM、SH など多くの CPU に対応したブートローダ。ROM モニタ機能を搭載し、リ

モートでの FlashROM アクセスが可能であり、組み込み環境に向いている。

* U-Boot

PowerPC や ARM といった組み込み CPU に対応したブートローダ。FlashROM からの起動のほ

かハードディスクやネットワークなど様々な起動方法をサポートしている。

4) DMA

DMA とは DirectMemoryAccess の略で、CPU を使用せず DMAC(DMA Controller)と呼ばれるハ

ードウェアがメモリアクセスを専用に受け持つ。このため、メモリ転送のための CPU 時間を空けるこ

とができるので、効率的に CPU を利用することができる。