「10行でできる高精度ハードウェア自動認識」にコメントを頂いた:
最近の modprobe は、 自分で勝手に modules.alias を探してくれるようになっているようです。 この機能を使うと、 より簡単かつ高速に自動認識が可能になります。
そうだったのか... orz
いままで、 modules.alias から modporbe すべきモジュールを検索するために、 以下のような感じで sh スクリプト (/tmp/dev2mod) を生成し、 それを読み込んで (. $tmp) いたのだが、
tmp=/tmp/dev2mod echo 'dev2mod(){ while read dev; do case $dev in' > $tmp sort -r /lib/modules/`uname -r`/modules.alias \ | sed -n 's/^alias *\([^ ]*\) *\(.*\)/\1)modprobe \2;;/p' >> $tmp echo 'esac; done; }' >> $tmp . $tmp rm $tmp cat /sys/bus/*/devices/*/modalias | dev2mod
modprobe が自分で modules.alias を探してくれるとなると、 sh スクリプトを動的生成する必要が無くなってしまい、 上記コードは次のように書けてしまう:
dev2mod(){ while read dev; do modprobe $dev; done } cat /sys/bus/*/devices/*/modalias | dev2mod
わずかに 2行 (^^;)
/sys/bus/*/devices/*/modalias の内容を手当たり次第 modprobe するので、 modprobe が「failed to load module」というエラー・メッセージを出してしまうが、 特に問題は無さげである。
PCMCIA や USB につないだデバイスも、 以下のように dev2mod を二度呼び出すだけで、 自動認識してしまう。
dev2mod(){ while read dev; do modprobe $dev; done } cat /sys/bus/*/devices/*/modalias | dev2mod modprobe pcmcia cat /sys/bus/*/devices/*/modalias | dev2mod
う~んすごい。