我在 Asus RT-AC68R/U 上使用 Advanced Tomato。这是 Shibby Tomato,只做了一些 GUI 修改。我想通过 USB 测量单元连接并为其创建专用的唯一设备。此时,Tomato 创建名为 /dev/usbdevX.Y 的设备,其中 X 和 Y 是随机数。以下是我的热插拔脚本的一部分。这不是最终版本,只是我解决问题的调查的一部分。
PRODID="5555/1/600"
SYMLINK="arco"
if [ "${PRODUCT}" = "${PRODID}" ];
then if [ "${ACTION}" = "add" ];
then
DEVICE_NAME=$(ls /sys/$DEVPATH)
echo $DEVICE_NAME > /tmp/arco1
echo $DEVPATH > /tmp/arco2
if [ -z ${DEVICE_NAME} ];
then echo " Hotplug Warning DEVICE_NAME is empty" > /tmp/arco
exit
fi
变量 DEVPATH 返回值:
/sys/devices/pci0000:00/0000:00:0b.0/usb3/3-2/3-2:1.0
变量 DEVICE_NAME 返回 /sys/devices/pci0000:00/0000:00:0b.0/usb3/3-2/3-2:1.0 目录的内容列表。
lsusb 返回该设备值:
Bus 003 Device 007: ID 5555:0001
子目录 /sys/devices/pci0000:00/0000:00:0b.0/usb3/3-2/3-2:1.0 包含以下文件:
root@asus:/sys/devices/pci0000:00/0000:00:0b.0/usb3/3-2/3-2:1.0# ls
bAlternateSetting bInterfaceProtocol bus interface supports_autosuspend
bInterfaceClass bInterfaceSubClass ep_02 modalias uevent
bInterfaceNumber bNumEndpoints ep_81 subsystem
并且文件 uevent 包括:
DEVTYPE=usb_interface
PHYSDEVBUS=usb
DEVICE=/proc/bus/usb/003/007
PRODUCT=5555/1/600
TYPE=0/0/0
INTERFACE=255/255/255
MODALIAS=usb:v5555p0001d0600dc00dsc00dp00icFFiscFFipFF
请注意以下行:
DEVICE=/proc/bus/usb/003/007
对应于该设备的 lsusb 输出。因此,这肯定是我的新连接设备
我的问题是。在这种情况下,我如何为这种随机创建的设备创建到 /dev/arco 的符号链接?
答案1
最后我找到了解决方案。这是我的工作热插拔脚本。它创建 /dev/arco 的符号链接到新创建的名为 /dev/usbdev3.Y 的“通用”设备,其中 Y 是随机数。我使用 Advanced Tomato,因此脚本添加到 NAS&USB -> USB 支持 -> 热插拔脚本部分
PRODID="5555/1/600"
SYMLINK="arco"
if [ "${PRODUCT}" = "${PRODID}" ];
then if [ "${ACTION}" = "add" ];
then
echo $DEVICE > /tmp/arco1
if [ -z ${DEVICE} ];
then echo " Hotplug Warning DEVICE is empty" > /tmp/arco
exit
fi
usb=`echo -n $DEVICE | tail -c 1`
echo " Hotplug Device name of ARCO is $DEVICE" > /tmp/arco
ln -s /dev/usbdev3.$usb /dev/${SYMLINK}
echo " Hotplug Symlink from $DEVICE to /dev/${SYMLINK} created" > /tmp/arco
fi
fi
if [ "${PRODUCT}" = "${PRODID}" ];
then if [ "${ACTION}" = "remove" ];
then rm /dev/${SYMLINK}
echo " Hotplug Symlink /dev/${SYMLINK} removed" > /tmp/arco
fi
fi
就这样 ;-)