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 カーネルとデバイスツリー

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 ビットデバイスドライバの準備

64 ビットドライバの設計の紹介

一般的な変換手順

固定幅型をハードウェアレジスタに使用する

固定幅の共通アクセス関数を使用する

派生型の使用を確認および拡張する

DDI データ構造体内の変更されたフィールドを確認する

buf 構造体の変更内容

ddi_dma_attr

ddi_dma_cookie 構造体の変更内容

csi_arq_status 構造体の変更内容

scsi_pkt 構造体の変更内容

DDI 関数の変更された引数を確認する

getrbuf() 引数の変更内容

drv_getparm() 引数の変更内容

delay() および timeout() 引数の変更内容

rmallocmap() および rmallocmap_wait() 引数の変更内容

scsi_alloc_consistent_buf() 引数の変更内容

uiomove() 引数の変更内容

cv_timedwait() および cv_timedwait_sig() 引数の変更内容

ddi_device_copy() 引数の変更内容

ddi_device_zero() 引数の変更内容

ddi_dma_mem_alloc() 引数の変更内容

データ共有を処理するルーチンを変更する

ioctl() でのデータ共有

devmap() でのデータ共有

mmap() でのデータ共有

x86 ベースのプラットフォームで 64 ビット Long データ型の構造体を確認する

よく知られている ioctl インタフェース

デバイスのサイズ

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

E.  pci.conf ファイル

索引

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

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

64 ビットドライバの設計の紹介

32 ビットカーネルだけをサポートすればよいドライバの場合、既存の 32 ビットのデバイスドライバは再コンパイルなしで引き続き動作します。ただし、ほとんどのデバイスドライバでは、64 ビットカーネルで正しく動作するためにはいくらかの変更が必要です。また、すべてのデバイスドライバで、再コンパイルして 64 ビットのドライバモジュールを作成する必要があります。この付録の情報は、32 ビット環境用と 64 ビット環境用のドライバを共通のソースコードから生成して、コードの移植性を高め、保守の手間を減らすのに役立ちます。

64 ビット環境用にデバイスドライバの変更を開始する前に、32 ビット環境と 64 ビット環境の違いを理解するようにしてください。特に、C 言語のデータ型モデルの ILP32 と LP64 に精通する必要があります。次の表を参照してください。

表 C-1 ILP32 と LP64 のデータ型の比較

C データ型
ILP32
LP64
char
8
8
short
16
16
int
32
32
long
32
64
long long
64
64
float
32
32
double
64
64
long double
96
128
pointer
32
64

この付録のテーマは、ILP32 と LP64 の違いによるドライバ固有の問題です。

ドライバの作成者は、LP64 用のデータモデル変更をサポートするための一般的なコードクリーンアップに加えて、32 ビットと 64 ビットの両方のアプリケーションのサポートを提供する必要があります。

ioctl(9E)、devmap(9E)、および mmap(9E) の各エントリポイントによって、アプリケーションとデバイスドライバの間で直接データ構造体を共有できます。それらのデータ構造体のサイズが 32 ビット環境と 64 ビット環境の間で変化する場合は、アプリケーションのデータモデルがカーネルのデータモデルと同じかどうかをドライバが判定できるように、エントリポイントを変更する必要があります。データモデルが異なる場合は、データ構造体を調整できます。「64 ビットに対応したデバイスドライバに対する入出力制御のサポート」「32 ビットと 64 ビットのデータ構造体マクロ」、および「ユーザーマッピングへのカーネルメモリーの関連付け」を参照してください。

多くのドライバで、この種の処理が必要な ioctls は少数です。その他の ioctls は、ioctls がサイズの変化しないデータ構造体を渡すかぎり、変更なしで動作します。