EN JA
NDISCVT(8)
NDISCVT(8) FreeBSD System Manager's Manual NDISCVT(8)

名称

ndiscvtFreeBSD での使用のために Windows® NDIS ドライバを変換する

書式

ndiscvt [ -O][ -i inffile] -s sysfile [ -n devname][ -o outfile]

ndiscvt [ -f firmfile]

解説

ndiscvt ユーティリティは Windows® NDIS ドライバを ndis(4) 互換ドライバモジュールを構築するために使用されるデータファイルに変換します。 Windows®ドライバは、次の 2 つの主要な部分から成ります: 実際のドライバの実行可能なコードを含む、 .SYS ファイルと、デバイス識別子情報とドライバ特有の登録キーのリストで Windows®インストーラに提供される、 .INF ファイルです。 ndiscvt ユーティリティは、これらのファイルを FreeBSD カーネルにリンクすることができるオブジェクトコードモジュールを作成するための if_ndis.c と、そのコンパイルに使用されるヘッダファイルに変換することができます。

.INF ファイルは、唯一 PCI ベンダとデバイス ID または PCMCIA 識別子文字列のようなデバイス識別データを含むので、通常必要とされます。しかしながら、 .INF ファイルはオプションで省略されるかもしれません、その場合、 ndiscvt ユーティリティは、 .SYS ファイルの変換をただ実行します。これはデバッグ目的だけに役に立ちます。

オプション

オプションは次の通りです:
-i inffile
変換を実行するとき、指定された .INF ファイルをオープンして解析します。 ndiscvt ユーティリティは、このファイルを解析して、 ndis(4) ドライバと ndisapi(9) カーネルサブシステムによって使用されるデバイス識別構造体と登録キー設定構造体を発行します。これが省略されるなら、 ndiscvt は、ダミーの設定構造体だけを発行します。
-s sysfile
指定された .SYS ファイルをオープンして解析します。このファイルは Windows®ドライバイメージを含まなければなりません。 ndiscvt ユーティリティは、カーネル中でランタイムリンクを行うために少し簡単にして、実行形式ファイル中でセクションの何らかの操作を実行し、次に、イメージをデータ配列に変換します。
-n devname
ドライバが例示化されるとき、作成されるネットワークデバイス/インタフェースに代替の名前を指定します。利用者が、1 つ以上の NDIS ドライバをシステムにロードする必要があるなら (すなわち、NDIS ドライバのサポートを必要とするシステムに 2 つの異なったネットワークカードがあるなら)、利用者が作成する各モジュールはユニークな名前でなければなりません。デバイスは IFNAMSIZ より大きく指定してはなりません。名前が指定されないなら、ドライバはデフォルト名 (“ ndis”) をデフォルトとして使用します。
-o outfile
結果のデータを置く出力ファイルを指定します。これはどんなファイルパス名でも指定できます。 outfile が単一のダッシュ (‘ -’) であるなら、データは標準出力に書き込まれます。 if_ndis.c モジュールは、 ndis_driver_data.h と呼ばれるファイル中でドライバデータを見つけると予想するので、この名前を使用するのはお勧めです。
-O
両方が ndis_driver_data.h ファイルと ndis_driver.data.o ファイルの両方を生成します。後者のファイルは ( objcopy(1) で作成される) FreeBSD ELF オブジェクトファイルとしてエンコードされた Windows® .SYS ドライバイメージのコピーを含みます。 Windows®ドライバイメージを直接オブジェクトコードファイルに変換することは、ディスク空間とコンパイル時間を節約します。
-f firmfile
いくつかの NDIS ドライバは、コアドライバモジュールが初期化時にロードする追加ファイルを備えています。通常、これらのファイルは、ドライバが操作を完全に行うためにデバイスに転送するファームウェアを含んでいます。通常、 Windows®では、これらのファイルは、ドライバ自体とともにシステムディレクトリの 1 つに単にコピーされます。

FreeBSD では、これらのファイルをロードするための 2 メカニズムがあります。ドライバがカーネルのブートが終了した後に (そして、ルートファイルシステムがマウントされた後に) ロードされるローダブルカーネルモジュールとして構築されているなら、特別なファイルは、 /compat/ndis ディレクトリに単にコピーすることができて、それらは、ドライバがそれらを必要とするとき、オンデマンドで (要求に応じて) カーネルにロードされます。

しかしながら、ドライバがシステムをブートストラップしなければならないなら (すなわち、NDIS ベースのネットワークインタフェースがディスクレス/PXE ブートに使用されるなら)、ドライバが、ルートファイルシステムがマウントさられる前にそれらを必要とするので、そのファイルは、アクセスできるようにするためにブートストラップローダによって前もってロードされる必要があります。しかしながら、ブートストラップローダは、共有 FreeBSD バイナリオブジェクトであるファイルをロードすることだけができます。

-f フラグは、任意のファイル firmfile を共有オブジェクト形式に変換するために使用することができます (実際の変換は objcopy(1)ld(1) コマンドを使用して行われます)。次に、結果のファイルは、 /boot/kernel ディレクトリにコピーして、ブートローダのプロンプトから直接に、または loader.conf(5) を編集することによって自動的に前もってロードすることができます。また、必要なら、ファイルは、実行時に kldload(8) コマンドを使用してメモリにロードすることができます。

NDIS ドライバが外部のファイルをオープンしようとするとき、 ndisapi(9) コードは、最初にオープン要求で指定された名前に適合するロードされたカーネルモジュールを検索し、そして、それが失敗すると、次に、それはまた、 /compat/ndis ディレクトリからのファイルをオープンしようとします。カーネルのブートストラップに間は、 /compat/ndis からファイルをオープンする機能は無効とされていることに注意してください: モジュール検索だけが実行されます。

-f フラグを使用すれば、 ndiscvt は、リロケータブル (再配置可能な) オブジェクトファイル ( .o 拡張子があるもの) と共有オブジェクトファイル ( .ko 拡張子があるもの) の両方を生成します。共有オブジェクトは /boot/kernel ディレクトリに置かれるべきものです。リロケータブルオブジェクトファイルは、ユーザが完全に静的なカーネルイメージを作成したいなら、役に立ちます: オブジェクトファイルは、ドライバ自体とともに直接カーネルにリンクすることができます。構築時に特別のオブジェクトを含めるためにカーネル設定ファイルの何らかの編集が必要です。

歴史

ndiscvt ユーティリティは、 FreeBSD 5.3 ではじめて登場しました。

作者

ndiscvt ユーティリティは、 Bill Paul <wpaul@windriver.com>によって書かれました。 lex(1)yacc(1) INF ファイルパーサは、 Matthew Dodd <mdodd@FreeBSD.org>によって書かれました。
December 10, 2003 FreeBSD