ddopen デバイス・ドライバー・エントリー・ポイント

目的

読み取り、書き込み、または制御機能のために装置を準備します。

構文

#include <sys/device.h>
  
int ddopen (devno, devflag, chan,  ext)
dev_t  devno;
ulong  devflag;
chan_t  chan;
int ext;

パラメーター

項目 説明
devno メジャー・デバイス番号とマイナー・デバイス番号を示します。
devflag オープン・ファイル制御フラグを指定します。
Chan チャネル番号を指定します。
エクステンド 拡張パラメーターを指定します。

説明

カーネルは、プログラムが オープン または クレート サブルーチン呼び出しを発行すると、デバイス・ドライバーの DDOPEN ルーチンを呼び出します。 また、システム・コール、カーネル・プロセス、またはその他のデバイス・ドライバーが Fp_OpenDEV または Fp_OPEN カーネル・サービスを使用してデバイスを使用する場合にも呼び出すことができます。

DDOPEN ルーチンは、必要に応じて、まず装置への排他的アクセスを確保する必要があります。 プリンターやプロッターなどの多くのキャラクター型デバイスは、一度に 1 つのプロセスでのみ開く必要があります。 DDOPEN ルーチンは、静的フラグ変数を維持することによって、これを強制することができます。静的フラグ変数は、装置がオープンの場合は 1 に設定され、オープンの場合は 0 に設定されます。

DDOPEN ルーチンは、呼び出されるたびにフラグの値を検査します。 値が 0 以外の場合、 DDOPEN ルーチンは、装置が既にオープンされていることを示す戻りコード エプシー を返します。 それ以外の場合、 DDOPEN ルーチンはフラグを設定し、正常に戻ります。 ddclose エントリー・ポイントは、デバイスのクローズ時にフラグを後でクリアします。

ほとんどのブロック・デバイスは一度に複数のプロセスで使用できるため、ブロック・ドライバーは単一ユーザーによるオープンを強制しようとしてはなりません。

これが発生した最初のオープンである場合、 DDOPEN ルーチンは装置を初期設定する必要があります。 初期化には、以下のステップが含まれます。

  1. DDOPEN ルーチンは、必要なシステム・リソース (DMA チャネル、割り込みレベル、優先順位など) をデバイスに割り振る必要があります。 必要であれば、ターゲット装置をサポートするために必要な割り込みレベルの装置割り込みハンドラーを登録する必要があります。 (これらのリソースの初期化には、 初期化 および 初期化 カーネル・サービスを使用できます。)
  2. このデバイス・ドライバーがデバイスのヘッド・ロールを提供しており、別のデバイス・ドライバーがハンドラー・ロールを提供している場合、 DDOPEN ルーチンは Fp_OpenDEV カーネル・サービスを使用してデバイス・ハンドラーをオープンする必要があります。
    注: Fp_OpenDEV カーネル・サービスには、開くデバイス・ハンドラーを識別するための デヴノ パラメーターが必要です。 適切な装置依存構造 (DDS) から取られたこの デヴノ 値は、この装置ドライバーの ddconfig ルーチンが呼び出されたときに特殊な保管域に保管されていなければなりません。

devflag パラメーターに定義されたフラグ

devflag パラメーターには、 /usr/include/sys/device.h ファイルに定義されているように、以下のフラグがあります。

項目 説明
Dカーネル Fp_OpenDEV または Fp_OPEN カーネル・サービスを使用してカーネル・ルーチンによって呼び出されるエントリー・ポイント。
DREAD (読み取り) 読み取り用オープン。
DWRITE (書き込み) 書き込み用オープン。
DAPPEND (D) 追加用オープン。
DNDELAY (遅延) 装置は非ブロッキング・モードでオープンされています。

実行環境

DDOPEN ルーチンは、プロセス環境でのみ実行されます。 これは、ドライバーで定義された専用ロック・ワードとともにロッキング・カーネル・サービスを使用して、必要なデータ構造のシリアライゼーションを提供する必要があります。

戻り値

DDOPEN エントリー・ポイントは、ゼロ以外の戻りコードを戻すことによって、ユーザー・モード・アプリケーション・プログラムにエラー条件を示すことができます。 ゼロ以外の戻りコードを返すと、開けるまたは作成する値を返すサブルーチン-1そして、戻りコードをユーザーモードアプリケーションで利用できるようにします。エラーグローバル変数。 使用される戻りコードは、/usr/include/errno.hファイル。

DDOPEN ルーチンからゼロ以外の戻りコードが返された場合、オープン要求は失敗したと見なされます。 その結果、呼び出し元はデバイス・インスタンスにアクセスできません。 さらに、非多重化ドライバーの場合、失敗したオープンがデバイス・インスタンスの最初のオープンであった場合、カーネルはドライバーの ddclose エントリー・ポイントを呼び出して、リソースおよびデバイス・ドライバーの状態をクリーンアップできるようにします。 ドライバーが多重化されている場合、カーネルはオープン障害時に ddclose エントリー・ポイントを呼び出しません。

該当する場合は、 open サブルーチンの POSIX 1003.1 標準で定義されている戻り値を使用する必要があります。