/sbin/hotplug
/sbin/hotplugは kernelが USBやPCI機器を検出した際に 呼び出されるプログラムです。
通常のLinuxディストリビューションの場合、 さまざまなUSB/PCI機器に対応するために /sbin/hotplugは多くのファイルを参照する 複雑なスクリプトになっています。 N-Cardの場合、ファイル容量も限られていますので、 最小限のスクリプトとなっています。
N-Cardの/sbin/hotplugでは以下のことを行っています。
- 特定のUSBメモリが挿入されたときメッセージを出力 (マウントは行っていない)
- USB-Ethernetアダプタ Corega FEther USB-TXS 挿入時: メッセージの出力 (ドライバーは組込み済)
- USB-Ethernetアダプタ Corega FEther USB-TXC 挿入時: メッセージの出力、ドライバーの組込み
- USB無線LANアダプタ BUFFALO WLI-USB-KS11G挿入時: ドライバー組込み、 取り外し時: トライバー解除
- netデバイス(eth0)登録時: IPアドレス設定
- 無線lanデバイス(wlan0)登録時: IPアドレス設定等
他のUSBデバイスを使用する場合、 この /sbin/hotplug ファイルに処理を追加することで、 挿入時に自動的にデバイスを使用できるように することができます。
/sbin/hotplugのmesg関数の出力は syslogdを経由して RAMディスク上の /var/log/messages ファイルに 出力されていますので、参考にして下さい。
/sbin/hotplugの内容 #!/bin/sh # mesg () { /usr/bin/logger -t $0 "$@" } # DEBUG=yes export DEBUG if [ "$DEBUG" != "" ]; then mesg "arguments ($*) env (`env`)" fi if [ $# -lt 1 -o "$1" = "help" -o "$1" = "--help" ]; then echo USAGE: $0 usb exit 1 fi MEDIA=$1 case $MEDIA in usb) if [ $PRODUCT = "d7d/280/100" ]; then # USB-Memory if [ $ACTION = "add" ]; then mesg "USB Storage inserted" elif [ $ACTION = "remove" ]; then mesg "USB Storage removed" fi elif [ $PRODUCT = "7aa/d/101" ]; then # Corega FEther USB-TXS mesg "Corega FEther USB-TXS $ACTION"; elif [ $PRODUCT = "7aa/9601/101" ]; then # Corega FEther USB-TXC mesg "Corega FEther USB-TXC $ACTION"; if [ $ACTION = "add" ]; then /sbin/modprobe dm9601 fi elif [ $PRODUCT = "411/27/132" ]; then # BUFFALO WLI-USB-KS11G mesg "BUFFALO WLI-USB-KS11G $ACTION"; if [ $ACTION = "add" ]; then sleep 3 /sbin/modprobe prism2_usb prism2_doreset=1 elif [ $ACTION = "remove" ]; then /sbin/modprobe -r prism2_usb fi # 2005/01/29(Sat) 追加 elif [ $PRODUCT = "411/44/132" ]; then # BUFFALO WLI-USB-KB11 mesg "BUFFALO WLI-USB-KB11 $ACTION"; if [ $ACTION = "add" ]; then sleep 3 /sbin/modprobe prism2_usb prism2_doreset=1 elif [ $ACTION = "remove" ]; then /sbin/modprobe -r prism2_usb fi elif [ $PRODUCT = "7aa/1a/132" ]; then # Corega WLUSB-11 KEY mesg "Corega WLUSB-11 KEY $ACTION"; if [ $ACTION = "add" ]; then sleep 3 /sbin/modprobe prism2_usb prism2_doreset=1 elif [ $ACTION = "remove" ]; then /sbin/modprobe -r prism2_usb fi else mesg "Unknown USB device: PRODUCT=$PRODUCT ACTION=$ACTION" fi ;; net) if [ $ACTION = "register" ]; then if [ $INTERFACE = "eth0" ]; then /sbin/ifconfig $INTERFACE 192.168.0.100 mesg "$INTERFACE up" elif [ $INTERFACE = "wlan0" ]; then sleep 1 /sbin/wlanctl-ng wlan0 lnxreq_ifstate ifstate=enable /sbin/wlanctl-ng wlan0 lnxreq_autojoin ssid=2 authtype=opensystem /sbin/ifconfig $INTERFACE 192.168.1.100 mesg "$INTERFACE up" else mesg "Unknown net interface:$INTERFACE" fi elif [ $ACTION = "unregister" ]; then mesg "unregister $INTERFACE" else mesg "Unkown action:(net $ACTION)" fi ;; *) mesg Unknown media:$MEDIA exit 1 esac