6

私は本[Linuxデバイスドライバー]のこのスクリプト行を読みました。それは何をするためのものか?

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

文脈のように:

#!/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
....
4

3 に答える 3

8

これを記述するより良い方法は次のとおりです。

major=$(awk -v mod=$module '$2==mod{print $1}' /proc/devices)
于 2012-12-19T12:20:07.193 に答える
2

私もこれを読みましたが、その行は私にとってはうまくいきませんでした。に変更する必要がありました

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

最初の部分\$2 == \"$module\"はパターンです。これが満たされる場合、つまり、2 番目の列が「scull」に等しい場合print \$1、最初の列を出力するコマンドが実行されます。この値は変数 major に格納されます。$awk にそのまま渡す必要があるため、エスケープする必要があります。

于 2012-12-19T11:54:06.860 に答える
1

/proc/devices各モジュールに現在構成されている文字およびブロックデバイスが含まれます。

コンテキスト内のいくつかの変数を展開し、等式の構文エラーを修正すると、コマンドは次のようになります。

awk '$2=="scull" {print $1}' /proc/devices

これは、「2番目の列の値が、の場合scull、最初の列を出力する」ことを意味します。

このコマンドはサブシェルで実行されます— $(...)—そして出力は変数に割り当てられます$major

目的の説明は本にあります:

したがって、動的番号が割り当てられたモジュールをロードするスクリプトは、でファイルを作成するためにawkから情報を取得するなどのツールを使用して作成できます。/proc/devices/dev

配布された例では、の行がscull_loadVivekの修正と一致していることに注意してください。

于 2012-12-19T11:45:31.383 に答える