Go to main content
Oracle® Solaris 11.3 デバイスドライバの記述

印刷ビューの終了

更新: 2016 年 11 月
 
 

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

この付録では、64 ビットカーネルをサポートするようにデバイスドライバを変換するデバイスドライバ作成者向けの情報を提供します。32 ビットと 64 ビットのデバイスドライバの違いについて説明し、32 ビットのデバイスドライバを 64 ビットに変換する手順についても説明します。この情報は、通常のキャラクタデバイスおよびブロックデバイスのドライバ専用です。

この付録では、次の内容について説明します。

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

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

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

表 42  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 がサイズの変化しないデータ構造体を渡すかぎり、変更なしで動作します。