JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
デバイスドライバの記述     Oracle Solaris 11.1 Information Library (日本語)
このドキュメントの評価
search filter icon
search icon

ドキュメントの情報

はじめに

パート I Oracle Solaris プラットフォーム用デバイスドライバの設計

1.  Oracle Solaris デバイスドライバの概要

2.  Oracle Solaris カーネルとデバイスツリー

カーネルとは

マルチスレッドの実行環境

仮想メモリー

特殊ファイルとしてのデバイス

DDI/DKI インタフェース

デバイスツリーの概要

デバイスツリーコンポーネント

デバイスツリーの表示

libdevinfo ライブラリ

prtconf コマンド

/devices ディレクトリ

ドライバのデバイスへのバインド

汎用デバイス名

3.  マルチスレッド

4.  プロパティー

5.  イベントの管理とタスクのキュー

6.  ドライバの自動構成

7.  デバイスアクセス: プログラム式入出力

8.  割り込みハンドラ

9.  ダイレクトメモリーアクセス (DMA)

10.  デバイスメモリーおよびカーネルメモリーのマッピング

11.  デバイスコンテキスト管理

12.  電源管理

13.  Oracle Solaris ドライバの強化

14.  階層化ドライバインタフェース (LDI)

パート II 特定の種類のデバイスドライバの設計

15.  文字デバイスのドライバ

16.  ブロックデバイスのドライバ

17.  SCSI ターゲットドライバ

18.  SCSI ホストバスアダプタドライバ

19.  ネットワークデバイスのドライバ

20.  USB ドライバ

21.  SR-IOV ドライバ

パート III デバイスドライバの構築

22.  ドライバのコンパイル、ロード、パッケージ化、およびテスト

23.  デバイスドライバのデバッグ、テスト、およびチューニング

24.  推奨されるコーティング方法

パート IV 付録

A.  ハードウェアの概要

B.  Oracle Solaris DDI/DKI サービスのサマリー

C.  64 ビットデバイスドライバの準備

D.  コンソールフレームバッファードライバ

E.  pci.conf ファイル

索引

ドキュメントの品質向上のためのご意見をください
簡潔すぎた
読みづらかった、または難し過ぎた
重要な情報が欠けていた
内容が間違っていた
翻訳版が必要
その他
Your rating has been updated
貴重なご意見を有り難うございました!

あなたの貴重なご意見はより良いドキュメント作成の手助けとなります 内容の品質向上と追加コメントのためのアンケートに参加されますか?

カーネルとは

Oracle Solaris カーネルは、システムリソースを管理するプログラムです。カーネルはシステムハードウェアからアプリケーションを隔離し、入出力 (I/O) 管理、仮想メモリー、スケジューリングなどの重要なシステムサービスをアプリケーションに提供します。カーネルは、必要なときにメモリーに動的にロードされるオブジェクトモジュールから構成されます。

Oracle Solaris カーネルは論理的に 2 つの部分に分割できます。カーネルと呼ばれる最初の部分は、ファイルシステム、スケジューリング、および仮想メモリーを管理します。I/O サブシステムと呼ばれる 2 番目の部分は物理コンポーネントを管理します。

カーネルはアプリケーションが使用するインタフェースのセットを提供します。これらのインタフェースにはシステムコールを通してアクセスできます。システムコールについては、リファレンスマニュアルコレクション(Intro(2)を参照) の第 2 セクションに説明があります。一部のシステムコールは、デバイスドライバを呼び出して入出力を実行するために使用されます。デバイスドライバはロード可能なカーネルモジュールであり、カーネルの残りの部分をデバイスハードウェアから隔離しながら、データ転送を管理します。オペレーティングシステムとの互換性を確保するため、デバイスドライバはマルチスレッド化、仮想メモリーアドレス指定、32 ビットと 64 ビット両方の操作などの機能に対応できる必要があります。

次の図はカーネルを示しています。カーネルモジュールはアプリケーションプログラムからのシステムコールを処理します。I/O モジュールはハードウェアと通信します。

図 2-1 Oracle Solaris カーネル

image:図は、ユーザーレベルのアプリケーションから特定のカーネルレベルモジュールへの呼び出しと、ドライバ間およびその他のモジュールからデバイスへの呼び出しを示しています。

カーネルは次の機能を通してデバイスドライバへのアクセスを提供します。

マルチスレッドの実行環境

Oracle Solaris カーネルはマルチスレッドです。マルチプロセッサマシンでは、複数のカーネルスレッドでカーネルコードを実行可能であり、カーネルコードを平行して実行できます。カーネルスレッドも、いつでもその他のカーネルスレッドに横取りできます。

カーネルのマルチスレッド化では、デバイスドライバにいくつかの追加の制限が発生します。マルチスレッドの考慮事項の詳細情報については、第 3 章マルチスレッドを参照してください。デバイスドライバのコードは、多くの異なるスレッドの要求時に必要に応じて実行されるように記述する必要があります。ドライバはスレッドごとに、I/O 要求が重なることで発生する競合の問題を処理する必要があります。

仮想メモリー

Oracle Solaris 仮想メモリーシステムの全体的な概要については、このドキュメントが対象とする範囲に含まれていませんが、デバイスドライバについて説明するときに特に重要な仮想メモリー用語として、仮想アドレスとアドレス空間という 2 つの用語を使用しています。

特殊ファイルとしてのデバイス

デバイスは、ファイルシステム内では特殊ファイルによって表されます。Oracle Solaris OS では、これらのファイルは /devices ディレクトリ階層にあります。

特殊ファイルは、ブロック型または文字型のいずれかです。この型は、どの種類のデバイスドライバがデバイスを操作するかを示します。ドライバは両方の型で動作するように実装できます。たとえば、ディスクドライバは fsck(1) および mkfs(1) ユーティリティーで使用するために文字インタフェースをエクスポートし、ファイルシステムで使用するためにブロックインタフェースをエクスポートします。

各特殊ファイルにはデバイス番号 ( dev_t) が関連付けられます。デバイス番号はメジャー番号マイナー番号から構成されています。メジャー番号は、その特殊ファイルに関連付けられているデバイスドライバを識別します。マイナー番号は、特殊ファイルをさらに区別するために、デバイスドライバによって作成され、使用されます。通常、マイナー番号は、ドライバがアクセスする必要があるデバイスインスタンスと、実行する必要のあるアクセスの種類を識別するために使用されるエンコードです。たとえば、マイナー番号によって、バックアップのために使用されるテープデバイスを識別し、バックアップ操作が完了したときにはテープを巻き戻す必要があることを指定できます。

DDI/DKI インタフェース

System V Release 4 (SVR4) では、デバイスドライバと残りの UNIX カーネルとの間のインタフェースが DDI/DKI として標準化されました。DDI/DKI については、リファレンスマニュアルコレクションの第 9 セクションに説明があります。第 9E セクションにはドライバのエントリポイントについての説明、第 9F セクションにはドライバから呼び出すことができる関数についての説明、第 9S セクションにはデバイスドライバによって使用されるカーネルのデータ構造についての説明があります。Intro(9E)Intro(9F)、およびIntro(9S)を参照してください。

DDI/DKI はデバイスドライバと残りのカーネルの間のインタフェースをすべて標準化し、文書化することを目的としています。さらに、DDI/DKI によって、Oracle Solaris OS を実行する任意のマシンでは、プロセッサのアーキテクチャーが SPARC であるか x86 であるかにかかわらず、ドライバのソースとバイナリの互換性が実現されます。DDI/DKI の一部になっているカーネル機能のみを使用するドライバは、DDI/DKI 準拠デバイスドライバと呼ばれます。

DDI/DKI を使用すると、Oracle Solaris OS を実行する任意のマシンのためにプラットフォームに依存しないデバイスドライバを記述できます。これらのバイナリ互換性があるドライバによって、サードパーティーのハードウェアとソフトウェアを、より簡単に Oracle Solaris OS を実行する任意のマシンに統合できます。DDI/DKI はアーキテクチャーに依存しないため、同じドライバが一連の多様なマシンアーキテクチャーにわたって動作可能です。

プラットフォームへの非依存は、次の領域における DDI のデザインによって実現されています。