Oracle Solaris OS が稼働するシステムをアップグレードすると、新しいバージョンのドライバがインストールされる可能性があります。そのアップグレードプロセスの間、システム上の driver.conf ファイルも更新されます。driver.conf ファイルのカスタマイズは、ベンダーとシステム管理者の両方によって行われます。システムのアップグレード時には、システムの以前の構成が引き続き、新しいドライバ、ベンダーの driver.conf ファイル、および管理者の driver.conf ファイルとともに動作するようにしてください。
Oracle Solaris 11 リリースでは、ベンダー提供のドライバデータを含む driver.conf ファイルを別途提供するオプションがドライバの開発者に用意されています。新しい driver.conf ファイルは /etc/driver/drv ディレクトリに格納されます。これによりシステムは、このファイルに対して行われた管理変更をすべて保持できます。ドライバが両方の構成ファイル内で見つかった場合、システムはそれらのファイルをマージし、すべてのプロパティーを含むファイルを提供します。ベンダーの driver.conf ファイルの形式は、管理者のドライバ構成ファイルと同じです。
ベンダー構成データと管理構成データは、新しいインタフェース経由でドライバから明示的に使用できるようになりました。このため、ドライバ開発者は、すべてのマージロジックのエンコードを、クラスアクションスクリプト内やインストール前およびインストール後スクリプト内ではなく、ドライバ内で直接行えます。管理ファイルに対して行われたカスタマイズは保持されるため、ドライバ内で新しい値と古い値の関係について判定を行うことができます。
ドライバで前述のモデルが正しく機能するようにするために、ドライバ開発者は次を考慮すべきです。
統制のとれた一連の構成可能オプションを使用できるように、ドライバを設計します。
ドライバのドキュメントやマニュアルページ内でドライバのオプションやモデルについて完全に記述します。
管理者の設定が無効になるか置き換えられるような方法でドライバの構成オプションを変更する場合、そのドライバで必ず以前の管理設定が尊重されるようにすべきです。以前の構成を検索する際に、ドライバは、ddi_prop_lookup (9F) インタフェース (プロパティータイプを DDI_PROP_VENDOR と DDI_PROP_ADMIN のいずれかに設定) を使用できます。
たとえば、あるドライバで秒単位のタイムアウト構成がサポートされていたが、そのドライバの新しいバージョンでは、ミリ秒単位のより細かい粒度のタイムアウトがサポートされるようになったとします。その新しいバージョンのプロパティーの名前は、以前のプロパティーと区別できるようなものにすべきです。このときドライバは、管理リスト上で以前のプロパティーを検索し、そのプロパティーが見つかった場合、その値を引き続き尊重すべきです。次のドライバコードは、このタイムアウトの例を示したものです。
* Has the timeout been locally configured using the + * prior option of timeout in units of seconds? + */ + if (ddi_prop_lookup_int(DDI_DEV_T_ANY, dip, + DDI_PROP_ADMIN, "timeout",&ivalues,&n) == + DDI_PROP_SUCCESS) { + if (n != 1) { + ddi_prop_free(ivalues); + return (EINVAL); + } + /* yes - convert our working timeout accordingly */ + dip->ms_timeout = 1000 * ivalues[0]; + /* record the new parameter setting for confirmation */ + (void) ddi_prop_update_int(DDI_DEV_T_NONE, + dip, "ms-timeout", dip->ms_timeout); + ddi_prop_free(ivalues); + }
prtconf(1M) コマンドではドライバのプロパティーが表示されますが、新しい –u オプションを使うと、元のプロパティー値と変更後のプロパティー値を表示できます。