ドライバのソースファイルをそれぞれコンパイルし、得られたオブジェクトファイルをドライバモジュール内にリンクする必要があります。Oracle Solaris OS は Oracle Solaris Studio C コンパイラ、および Free Software Foundation, Inc. の GNU C コンパイラの両方と互換性があります。このセクションの例では、特に記載している場合を除いて、Oracle Solaris Studio C コンパイラを使用しています。Oracle Solaris Studio C コンパイラについては、Oracle Solaris Studio 12.3: C User???s Guideおよび Oracle Solaris Studio Documentation を参照してください。コンパイルおよびリンクオプションの詳細については、Oracle Solaris Studio 12.3 Command-Line Reference ドキュメントを参照してください。GNU C コンパイラは /usr/sfw ディレクトリにあります。GNU C コンパイラについては、http://gcc.gnu.org/ を参照するか、/usr/sfw/man のマニュアルページを調べてください。
下の例は、2 つの C ソースファイルを持つ xx という名前のドライバを示しています。xx という名前のドライバモジュールが生成されます。この例で作成されるドライバは 32 ビットカーネル用です。ドライバが持つオブジェクトモジュールが 1 つだけであっても ld –r を使用する必要があります。
% cc -D_KERNEL -c xx1.c % cc -D_KERNEL -c xx2.c % ld -r -o xx xx1.o xx2.o
このコードがカーネルモジュールを定義していることを示すため、_KERNEL シンボルが定義されている必要があります。ドライバの private シンボルを除き、ほかのシンボルが定義されていてはいけません。DEBUG シンボルを定義すると、ASSERT (9F) に対するすべての呼び出しを有効にできます。
|
–xmodel オプションを使用すると、コンパイラで Oracle Solaris x64 プラットフォーム用の 64 ビット共有オブジェクトを作成できます。このオプションは、そのようなオブジェクトのコンパイル時にのみ指定してください。詳細は、Oracle Solaris Studio 12.3: C User's Guide の –xmodel オプションの説明を参照してください。
注意 - Oracle Solaris Studio コンパイラを使用して、32 ビットまたは 64 ビットの x86 アーキテクチャー向けにコンパイルする場合は、コンパイルしても MMX 命令または SSE 命令が生成されないことを確認する必要があります。x86 カーネルでは MMX 命令および SSE 命令はサポートされません。MMX 命令または SSE 命令を使用するとカーネルパニックが発生するため、使用しないようにしてください。 |
次の表は、x86 アーキテクチャー向けの MMX 命令または SSE 命令を使用せずにコードを生成する際の考慮事項およびコンパイラオプションを示しています。
|
ドライバが安定したら、最適化フラグを追加して本稼働品質のドライバをビルドできます。Oracle Solaris Studio C コンパイラでの最適化に関する具体的な情報については、Oracle Solaris Studio 12.3 Command-Line Reference の cc(1) のマニュアルページを参照してください。
グローバル変数は、デバイスドライバ内では volatile として処理する必要があります。volatile タグについては、Declaring a Variable Volatileで詳細に説明します。このフラグの用途はプラットフォームに応じて異なります。マニュアルページを参照してください。