strload コマンド
目的
Portable Streams Environment (PSE) をロードし、構成します。
構文
説明
strload コマンドにより、システム管理者は、ドライバーとモジュールのロードとアンロード、ならびに PSE とそれに従属するもののロード状況の照会を実行することができます。
デフォルトでは、strload コマンドは /etc/pse.conf ファイルに従って PSE をロードします。 -f フラグにより、管理者は代替構成ファイルを使用できます。 -d フラグおよび -m フラグを使用して、構成ファイルには存在しないドライバー (新しくドライバーが開発されている場合など) やモジュールを指定します。 -q フラグは、参照されたドライバーおよびモジュールのシステム・ロード状況 (カーネルの存在) を報告します。
構成ファイル
構成ファイルは、フラットな ASCII 形式の、行指向型データベースです。 コメントは # (ポンド記号) で始まり、その行の最後まで続きます。 ブランク行は無視されます。各レコードの形式は以下のとおりです。
attributes filename [argument [node [minor ...] ] ]
フィールドはスペース、タブ、またはその両方で区切られます。 - (ハイフン) はフィールド名として指定することができ、デフォルト値が使用されることを示します。 フィールドは以下のように定義されます。
項目 | 説明 |
---|---|
attributes | ロードする拡張を記述します。
以下の値を使用できます。
|
項目 | 説明 |
---|---|
filename | 拡張を含むオブジェクト・ファイルを指定します。 ロード、アンロードまたは照会するドライバーまたはモジュールのファイル名の中に "/" (スラッシュ) を含んでコマンドが発行される場合、strload コマンドはファイル名フィールドの値を明示的に使用します。 ファイル名エントリーの中に "/" がない 場合、strload コマンドは最初に 現行ディレクトリー内のドライバーまたはモジュールのコピーを探します。 現行ディレクトリー内にドライバーまたはモジュールがない場合、strload は /usr/lib/drivers/pse ディレクトリー内の ドライバーまたはモジュールを探します。 |
注: strload コマンドはルート・ディレクトリー (/) から発行してください。ロード、 アンロード、および照会を行う strload コマンドは、常に同じディレクトリーから発行される必要があります。
カーネル・エクステンション・ローダーでは、ロード、アンロード、および照会で使用されるパス名を必ず同一にする必要があります。 これは、strload によるファイル名の決定方法とともに、問題を引き起こすことがあります。 strload コマンドで使用されるパス名内のすべてのバイトは、 カーネル・エクステンション・ローダーで使用されるパス名内の、位置が対応するすべてのバイトと完全に一致しなければなりません。 なぜなら、カーネルは一致するものを探すときに、ファイル名に対して strcmp() 関数を実行するからです。 strload コマンドが別のディレクトリーから発行されて モジュールまたはドライバーをアンロードすると、 以下のいずれかのイベントが生じます。
- strload コマンドが新しい現行ディレクトリーでドライバーまたはモジュールのコピーを見つけられない場合、strload は /usr/lib/drivers/pse ディレクトリー内のドライバーまたはモジュールをアンロードしようとします。しかし、 このパス名は、ローダーがそのドライバーまたはモジュールとしてログに記録したパス名と 同じでない場合があります。パス名が同じでない場合、strload コマンドは失敗します。
- strload コマンドが新しい現行ディレクトリーでモジュールまたはドライバーのもう 1 つのコピーを見つけた場合、パス名は同じになり、ローダーはロード済みのドライバーまたはモジュールを正しくアンロードします。したがって、strload コマンドは成功しますが、結果はユーザーが意図したとおりになるとは限りません。
次に例を示します。
以下のシナリオ (推奨ではありません) を使用すると、別名が「A」である「spx」がアンロードされます。 これは、望んだ結果ではないかもしれません。
mkdir /tmp/foo /tmp/bar
cp /usr/lib/drivers/pse/spx /tmp/foo/A
cp /bin/ls /tmp/bar/A
cd /tmp/foo
strload -d A # The loader knows the path and filename as
# "A" because "A" is found in the current
# directory
cd /tmp/bar
strload -q -d A # Reports "yes" because there is "A" in the
# current directory. Note that the file "A"
# in /tmp/bar is NOT the same file "A" in
# /tmp/foo, but the loader does not care
# because it identifies the file by
# pathname.
strload -u -d A # Unloads spx (also known as "A")!
以下はエラーのシナリオです。
mkdir /tmp/foo2 /tmp/bar2
cp /usr/lib/drivers/pse/spx /tmp/foo2/A
cd /tmp/foo2
strload -d A # The loader knows the path and filename as
# "A"because "A" is found in the current
# directory.
cd /tmp/bar2
strload -q -d A # Answers "no". There is no filename
# in /tmp/bar2 that matches "A", so strload
# prepends pathname "/usr/lib/drivers/pse" to
# "A". "/usr/lib/drivers/pse/A" is not found,
# so strload answers "no".
strload -u -d A # Fails - "A" does not exist.
以下はエラーのシナリオです。
cd /usr/lib/drivers/pse
strload -d spx # The loader knows the path and filename as
# "spx" because "spx" is found in the
# current directory.
cd /
strload -q -d spx # Answers "no". There is no filename in /
# that matches "spx", so strload prepends
# the pathname "/usr/lib/drivers/pse" to
# "spx". "/usr/lib/drivers/pse/spx" is found
# since it exists, so strload gives
# "/usr/lib/drivers/pse/spx" to the loader.
# The strcmp() fails since
# "/usr/lib/drivers/pse/spx" and "spx" do
# not match exactly.
strload -u -d spx # Fails - "spx" does not exist.
項目 | 説明 |
---|---|
argument | strload コマンドに対しては意味がありません。 このフィールドはオプショナルです。 構成ルーチンが呼び出されたときに拡張に渡されます。 その解釈はその拡張に固有です。 デフォルトの引数は、filename フィールドの値です。 |
node | 生成するノードの名前を指定します。 このフィールドはオプショナルです。 ドライバーにのみ適用され、ドライバーがロードされた際、生成ノード名として使用されます。 デフォルトでは、生成ノードは /dev/filename です。 |
minor | このドライバー用に作成する、追加の非クローン・ノードを指定します。 このフィールドはオプショナルです。 ノード名はマイナー番号をクローン化されたドライバー・ノード名に追加することによって生成されます。 5 つ以上のマイナー番号は指定できず (0 から 4 まで)、マイナー番号ごとに 1 つずつノードが生成されます。 |
-d フラグおよび -m フラグを指定すると、構成ファイルは、以下のようにコマンド・ラインに明示的に指定されていない限り無視されます。
strload -f /tmp/my.conf -d newdriver
注: -d フラグおよび -m フラグは、構成ファイルをオーバーライドしません。つまり、ドライバー dgb が構成ファイルを使用してロードされると、-d フラグはそれを再ロードしようとしますが失敗します。 構成ファイルは、-d フラグおよび -m フラグの前に処理されます。
-d フラグおよび -m フラグの List 変数は、それぞれが 1 つの PSE ドライバーまたはモジュールを含んでいるファイル名をコンマで区切ったリストです。構成プロセスは、以下の形式のうちの 1 つの行を構成ファイル内で見つけたかのように処理を続行します。
d filename
m filename
フラグ
項目 | 説明 |
---|---|
-d List | ロードまたはアンロードする PSE デバイス・ドライバーをリストします。 List 変数には、ドライバーのオブジェクト名をコンマで区切って指定します。 |
-f File | File 変数で示されるファイルに含まれる構成情報に従って PSE を構成します。 デフォルトの構成ファイルは /etc/pse.conf です。 |
-m List | ロードまたはアンロードする PSE モジュールをリストします。 List 変数には、モジュールのオブジェクト名をコンマで区切って指定します。 |
-q | 拡張のロード状況を報告します。 |
-u | 拡張をアンロードします。 |
セキュリティー
例
- 以下のコマンドを入力すると、PSE (まだロードされていない場合)、/usr/lib/drivers/pse/ ディレクトリーの dgb ドライバーと ssb ドライバー、および現行ディレクトリーの aoot モジュールをロードします。しかし、構成ファイルは使用しません。
root# strload -d dgb,ssb -m ./aoot
- aoot モジュールだけをアンロードするには、以下のように入力します。
root# strload -u -m ./aoot
- 以下のコマンドを入力して、spx ドライバーの存在の有無を尋ねます。
存在しない場合は、以下のように出力されます。root# strload -q -d spx
spx : no
- 以下に構成ファイルの例を示します。
1 行目は、dgb ドライバー拡張を /dev/dgb という名前のクローン化されたデバイスとしてロードします。 dgb 構成ルーチンに渡される引数は dgb です。#example configuration file d dgb #line 1 d mux - - 0 #line 2 ds foo #line 3 d+ xtiso tcp /dev/xti/tcp #line 4 d+ xtiso udp /dev/xti/udp #line 5 m aoot #line 6
2 行目は、mux ドライバー拡張を /dev/mux という名前のクローン化されたデバイスとしてロードし、 マイナー番号 0 (ゼロ) の標準デバイス名 /dev/mux0 を生成します。 (0 から 4 までのマイナー番号を使用して、5 つを超えるデバイス名を作成することはできません。)
3 行目は、foo ドライバー拡張を /dev/foo という名前の標準デバイス (クローン化されていない) としてロードします。 マイナー番号は 0 です。
4 行目と 5 行目は、xtiso ドライバー拡張をロードし、一度は tcp として、また一度は udp として、二度構成します。 生成されるクローン・ノードは /dev/xti/tcp および /dev/xti/udp です。 xtiso の構成ルーチンは、一度は引数 tcp で、一度は引数 udp で、二度呼び出されます。
6 行目は aoot モジュール拡張をロードします。 ノードは作成されず、構成ルーチンに値 aoot が渡されます。
- ストリーム dlpi ドライバーをロードするには、次のように入力します。
strload -f /etc/dlpi.conf
ファイル
項目 | 説明 |
---|---|
/usr/lib/drivers/pse/* | PSE カーネル・エクステンションが入っています。 |
/etc/pse.conf | デフォルトの PSE 構成ファイル。 |
/usr/sbin/strload | strload コマンドが入っています。 |