Присоединение Последовательного устройства USB с пользовательским PID к ttyUSB0 на встроенном

Если Вы хотите выбрать @ и до первого , после этого необходимо указать его как @[^,]*,

Это @ сопровождаемый любым числом (*) из незапятых ([^,]) сопровождаемый запятой (,).

Тот подход работает эквивалентом @.*?,, но не для вещей как @.*?string, это - то, где то, что после, является больше, чем отдельный символ. Отрицание символа является легкими, но инвертирующими строками в regexps, является намного более трудным.

Другой подход должен предварительно обработать Ваш вход, чтобы заменить или предварительно ожидать string с символом, который иначе не происходит в Вашем входе:

gsub(/string/, "\1&") # pre-process
gsub(/@[^\1]*\1string/, "")
gsub(/\1/, "") # revert the pre-processing

Если Вы не можете гарантировать, что вход не будет содержать Ваш символ замены (\1 выше), один подход должен использовать механизм выхода:

gsub(/\1/, "\1\3") # use \1 as the escape character and escape itself as \1\3
                   # in case it's present in the input
gsub(/\2/, "\1\4") # use \2 as our maker character and escape it
                   # as \1\4 in case it's present in the input
gsub(/string/, "\2&") # mark the "string" occurrences

gsub(/@[^\2]*\2string/, "")

# then roll back the marking and escaping
gsub(/\2/, "")
gsub(/\1\4/, "\2")
gsub(/\1\3/, "\1")

Это работает на фиксированный strings, но не для произвольного regexps как для эквивалента @.*?foo.bar.

19
14.03.2013, 17:35
3 ответа

Вы не должны изменять ядро только к этому только однажды; можно переопределить его.

  1. Отключите устройство
  2. modprobe ftdi_sio
  3. echo 0403 6001 >/sys/bus/usb-serial/drivers/ftdi_sio/new_id
  4. Включите устройство

И Ваше устройство должно работать.

Ваша другая альтернатива должна использовать bind интерфейс sysfs; я предлагаю использовать lsusb -t выяснять корректный path+interface в этом случае.

Используя частичный пример от моей системы, устройства хранения USB (это было бы очень похоже для последовательного usb).

$ lsusb -t
...
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
    |__ Port 1: Dev 5, If 0, Class=Hub, Driver=hub/3p, 5000M
        |__ Port 3: Dev 6, If 0, Class=Hub, Driver=hub/3p, 5000M
            |__ Port 3: Dev 7, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
 ...
 $ echo '4-1.3.3:1.0' >/sys/bus/usb/drivers/usb-storage/bind

Формат числа: BUS-PORT(.PORT)+:1.INTERFACE. Единственное число это не видимо в выводе lsusb, является первой цифрой после двоеточия; и это всегда был a 1 по моему опыту. Кто-то с более глубоким знанием ядра может, вероятно, сказать мне, что это, и обеспечьте контрпример.

17
27.01.2020, 19:45
  • 1
    Работавший отлично, спасибо. Должен быть принятый ответ. –  Amr Bekhit 20.07.2014, 15:05
  • 2
    Просто удивление: если я передумал, и я не хочу, чтобы этот vid/pid использовал ftdi_sio драйвер, но другой, как я возвращаюсь этот шаг? –  Bram 08.02.2016, 12:11
  • 3
    vid/pid к remove_id для отмены эха к new_id. –  robbat2 10.02.2016, 03:21
  • 4
    @trycatch можно ли принять ответ? –  robbat2 06.10.2017, 02:14

Вам не нужно изменять ядро, вы можете автоматизировать такой процесс:

  1. Добавьте следующую одну строку в /etc/udev/rules.d/99 -фтди.рулы

    Действие == «Add», Attrs {Idvendor} == "0403", Attrs {IdProduct} == "6001", Run + = "/ sbin / modprobe ftdi_sio" Run + = = "/ bin / sh -c 'echo 0403 6001> / sys / bus / usb-serial / drivers / ftdi_sio / new_id' "

  2. Либо перезагрузите или запустить Sudo UDEvAdm Control --reload , чтобы забрать новое правило.

  3. Отключите устройство.

  4. Подключите устройство.

14
27.01.2020, 19:45

абсолютно аналогичная ситуация произошла с платой eval от SiLabs -чип USB -UART CP2102 с нестандартным VID/PID:

lsusb

Bus 001 Device 002: ID 10c4:804c Cygnal Integrated Products, Inc.

проблема решена загрузкой модуля cp210x и отправкой VID/PID, как упоминалось ранее:

sudo modprobe cp210x

sudo -s

echo 10c4 804c > /sys/bus/usb-serial/drivers/cp210x/new_id

соответствующий 99 -файл cp210.rules для udev выглядит следующим образом:

ACTION=="add", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="804c", RUN+="/sbin/modprobe cp210x" RUN+="/bin/sh -c 'echo 10c4 804c > /sys/bus/usb-serial/drivers/cp210x/new_id'"

1
27.01.2020, 19:45

Теги

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