0

「LinuxDeviceDrivers3rd ed」の勉強を始めましたが、次のスクリプトの構文を理解するのに苦労しています。私は基本的なシェルスクリプトを知っており、基本的なプログラムを作成するためにawkユーティリティを使用できます

Q1)/ sbin / insmod ./$module.ko $ * || 出口1a)insmodのフルパスを述べる必要は何でしたか?b)実行可能ファイルを呼び出すために./を使用しましたが、コマンドの途中で./が表示されたことはありません。c)$ module = scul ??? d)$ *はどういう意味ですか?e)ダブルバットは何のために?

Q2)major = $(awk "\ $ 2 = = \" $ module \ "{print \ $ 1}" / proc / devices)このawkステートメントがスカルデバイスを取得するために実行する手順は何ですか?二重スラッシュ'\'と二重等号は取得できません。

#!/bin/sh
module="scull"
device="scull"
mode="664"
# invoke insmod with all arguments we got
# and use a pathname, as newer modutils don't look in . by default
/sbin/insmod ./$module.ko $* || exit 1   
# remove stale nodes   
rm -f /dev/${device}[0-3]   
major=$(awk "\\$2= =\"$module\" {print \\$1}" /proc/devices)
mknod /dev/${device}0 c $major 0
mknod /dev/${device}1 c $major 1
mknod /dev/${device}2 c $major 2
mknod /dev/${device}3 c $major 3
4

2 に答える 2

1

Q1

a)パスで定義されていない場所にいる場合でも常にアクセスできるため、insmodのフルパスを指定する必要があります
。b)./somethingは、現在のパスにあるファイルであることを意味します。./$module.koは、ファイル./scull.koを意味します。c
)bと同じです
。d)$ *は、シェルスクリプトに指定するパラメータを意味します。
e)ダブルパイプ(またはバット)はORを意味します。これは、モジュールをinsmodするか、失敗した場合は戻り値1で終了することを意味します。

Q2の回答がありません。ごめん。

于 2013-01-08T07:39:36.197 に答える
0

A1.a: 環境に $PATH 変数が含まれていない場合、または $PATH に "/sbin" パスが含まれていない場合は、insmod の絶対パスが必要です。A1.b: 質問はどこですか? "./" - 相対パスです。現在のディレクトリからファイル オブジェクトにアクセスする必要がある場合に使用します。「./」式の一般的なケースでは、「ドット」は $(pwd) コマンドの出力を置き換えますが、高速で短くはありません。A1.c: はい、このコード モジュールでは "scull" という名前が読み込まれます。何の質問?A1.d: "$*" は、このスクリプト パラメータに渡されるすべてを含む特別なシェル変数です。A1.d: "||" 論理「or」演算子です。

Advanced Bash-Scripting Guideなど、bashについていくつか読む必要があります。このガイドは、少し前に私を助けてくれます。

Q2:

major=$(awk "\\$2= =\"$module\" {print \\$1}" /proc/devices)

この行で

awk "\\$2= =\"$module\" {print \\$1}" /proc/devices

「メジャー」変数に割り当てられたサブシェルおよび標準出力として実行されます。私の Linux ボックスでは、この awk-command は構文エラーのために機能しませんが、ここでは awk-actions を認識しています。この場合、/proc/devices の内容が解析され、2 番目の単語が "module" 変数の値と等しい場合、中括弧内のコードが実行されます。つまり、行の 2 番目の単語が「scull」の場合、それらの行の最初の単語を出力します。私のLinuxボックスでは、この行は正常に機能します:

major=$(awk "\$2 == \"$module\" {print \$1}" /proc/devices)
于 2013-01-08T08:37:00.763 に答える