「10行でできる高精度ハードウェア自動認識」の高速化
仙石浩明の日記: 10行でできる高精度ハードウェア自動認識 (initramfs の init を busybox だけで書く)
すばらしい。確かに modules.alias を使う方が、簡単かつ確実に必要なモジュールを読み込むことができそう。さっそくこの方法を使って initramfs の init スクリプトを書き直してみた。
tmp=/tmp/dev2mod echo 'dev2mod(){ while read dev; do case $dev in' > $tmp sed 's/^alias *\([^ ]*\) *\(.*\)/\1)modprobe \2;;/' \ /lib/modules/`uname -r`/modules.alias >> $tmp echo 'esac; done; }' >> $tmp . $tmp rm $tmp cat /sys/bus/*/devices/*/modalias | dev2mod
tmp=/tmp/dev2mod.$$ echo 'dev2mod(){ while read dev; do case $dev in' > $tmp awk '/alias/{ print $2")modprobe "$3";;"}' \ /lib/modules/`uname -r`/modules.alias >> $tmp echo 'esac; done; }' >> $tmp . $tmp rm $tmp cat /sys/bus/*/devices/*/modalias | dev2mod
コメント行がなくなっていい感じ。文字数も少なくてすむのでちょっと省エネ。
比較すると、
# time ./dev2mod real 0m1.054s user 0m0.980s sys 0m0.056s # time ./dev2mod_awk real 0m1.006s user 0m0.964s sys 0m0.028s
あまり早くならなかった。ネックはそこじゃない。awkのreadlineあたりを使えばもっと良くなるかも。
でもよりよい実装が思い付かなかった。ダメだな俺。
手元のawkはGNU awk。busyboxのawkは未確認。busyboxのawkだと遅くなったりして。