Внесение в черный список / удаление драйвера для определенного VID / PID

awk '{print $1, $2, "1"}' inputfile
2
13.04.2017, 15:36
2 ответа

Хорошо.Документы sysfs, похоже, говорят, что вы не можете удалить встроенные идентификаторы из драйвера (если вы не исправите исходный код). Таким образом, вам нужно будет вручную отвязать драйвер каждый раз, когда он привязывается автоматически. (Я считаю, что также можно отключить автоматическую привязку для всех USB-устройств, но это звучит как ужасная идея).

Вам нужно будет сопоставить KERNEL = "ttyUSB *" , а также идентификаторы USB, чтобы действовать после привязки драйвера. Ваш скрипт должен будет найти родительское USB-устройство. Я заметил странные / sys / bus / usb-serial , а также / sys / bus / usb , я просто надеюсь, что здесь это не помешает.

Я не уверен, как заполнить код, потому что не знаю, как выглядит ваш DEVPATH (и мне лень писать для этого цикл). Я ожидаю чего-то вроде USBID = $ (basename $ (dirname $ TTY_DEVPATH))

# udev rule
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", KERNEL=="ttyUSB*" RUN+="/usr/local/bin/unbind_ftdi.sh %p"

#!/bin/bash
# unbind_ftdi.sh
TTY_DEVPATH="$1"

# traverse sysfs to find the USB ID
# of the USB device which is parent/ancestor of ttyUSB*
# something like "1-1.6:1.0"
....

echo "$USBID" > /sys/bus/usb/drivers/ftdi_sio/unbind
0
20.08.2021, 12:00

Я столкнулся с почти такой же проблемой и выполнил сценарий, вдохновленный sourcejedi. Мне не пришлось передавать путь к устройству, поскольку udev предоставляет достаточно много информации через окружение (используйте export > /tmp/vars, если вам интересно, что получает ваш скрипт). В частности, я использую $DEVNAME, которое является именем устройства в /dev (например, ttyUSB0).

/etc/udev/rules.d/ftdi.rules

ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", KERNEL=="ttyUSB*" RUN+="/etc/udev/scripts/unbind_ftdi.sh"

/etc/udev/scripts/unbind_ftdi. sh

#!/bin/sh

# traverse sysfs to find the USB ID
# of the USB device which is parent/ancestor of ttyUSB*
# something like "1-1.6:1.0"
TTYDEV=$(basename $DEVNAME)
BOUND_DEVICES=/sys/bus/usb/drivers/ftdi_sio/*/
for DEVICE in ${BOUND_DEVICES}; do
    if [ -e $DEVICE/$TTYDEV ]; then
        USBID=$(basename $DEVICE)
        break
    fi
done

echo "$USBID" > /sys/bus/usb/drivers/ftdi_sio/unbind
2
20.08.2021, 12:00

Теги

Похожие вопросы