ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
デバイスドライバの記述 Oracle Solaris 11.1 Information Library (日本語) |
パート I Oracle Solaris プラットフォーム用デバイスドライバの設計
2. Oracle Solaris カーネルとデバイスツリー
22. ドライバのコンパイル、ロード、パッケージ化、およびテスト
23. デバイスドライバのデバッグ、テスト、およびチューニング
B. Oracle Solaris DDI/DKI サービスのサマリー
rmallocmap() および rmallocmap_wait() 引数の変更内容
scsi_alloc_consistent_buf() 引数の変更内容
cv_timedwait() および cv_timedwait_sig() 引数の変更内容
32 ビットカーネルだけをサポートすればよいドライバの場合、既存の 32 ビットのデバイスドライバは再コンパイルなしで引き続き動作します。ただし、ほとんどのデバイスドライバでは、64 ビットカーネルで正しく動作するためにはいくらかの変更が必要です。また、すべてのデバイスドライバで、再コンパイルして 64 ビットのドライバモジュールを作成する必要があります。この付録の情報は、32 ビット環境用と 64 ビット環境用のドライバを共通のソースコードから生成して、コードの移植性を高め、保守の手間を減らすのに役立ちます。
64 ビット環境用にデバイスドライバの変更を開始する前に、32 ビット環境と 64 ビット環境の違いを理解するようにしてください。特に、C 言語のデータ型モデルの ILP32 と LP64 に精通する必要があります。次の表を参照してください。
表 C-1 ILP32 と LP64 のデータ型の比較
|
この付録のテーマは、ILP32 と LP64 の違いによるドライバ固有の問題です。
ドライバの作成者は、LP64 用のデータモデル変更をサポートするための一般的なコードクリーンアップに加えて、32 ビットと 64 ビットの両方のアプリケーションのサポートを提供する必要があります。
ioctl(9E)、devmap(9E)、および mmap(9E) の各エントリポイントによって、アプリケーションとデバイスドライバの間で直接データ構造体を共有できます。それらのデータ構造体のサイズが 32 ビット環境と 64 ビット環境の間で変化する場合は、アプリケーションのデータモデルがカーネルのデータモデルと同じかどうかをドライバが判定できるように、エントリポイントを変更する必要があります。データモデルが異なる場合は、データ構造体を調整できます。「64 ビットに対応したデバイスドライバに対する入出力制御のサポート」、「32 ビットと 64 ビットのデータ構造体マクロ」、および「ユーザーマッピングへのカーネルメモリーの関連付け」を参照してください。
多くのドライバで、この種の処理が必要な ioctls は少数です。その他の ioctls は、ioctls がサイズの変化しないデータ構造体を渡すかぎり、変更なしで動作します。