Как заблокировать id устройств на адреса портов?

Я хочу, чтобы посвятить определенные порты USB для некоторых устройств. Как я могу это сделать?

например: я хочу, чтобы ttyUSB0 была моей мышью, а ttyUSB1-моей клавиатурой (всегда). Я хочу быть уверен, что запуск Linux никогда не меняет их.

Acctually дело в том, что у меня есть XBee, который обычно идет к USB0 и второй FTDI, который идет к USB1, по соображениям безопасности я всегда хочу, чтобы они имели тот же адрес в моем коде я бегу.

с уважением

30
задан Christian
19.03.2023 1:48 Количество просмотров материала 2562
Распечатать страницу

2 ответа

имена, назначенные ядру, всегда назначаются в порядке обнаружения устройств, и вы не можете их изменить. (Не больше, во всяком случае – эта функция была удалена из-за различных условий гонки, вызванных правилами "постоянного имени".)

но ты можешь сказать udev создать ссылки С любыми именами вы выбираете. На самом деле, на современных системах нужно уже есть/dev/serial имени как пути к устройству , и его уникальный идентификатор; например:

  • /dev/serial/by-path/pci-0000:00:1a.0-usb-0:1.2:1.0ttyUSB0

  • /dev/serial/by-id/usb-Motorola_Inc._Motorola_Phone__C350_-if00ttyACM0

  • /dev/disk/by-id/ata-ST9640320AS_5WX1ZH91-part1sda1

  • /dev/disk/by-partlabel/Archsda3

  • /dev/input/by-id/usb-PIXART_USB_OPTICAL_MOUSE-mousemouse1

и так далее. Просто run tree /dev или ls -lR /dev найти устройство.

вы также можете запустить udevadm info /dev/ttyUSB0 и все символические ссылки для этого устройство будет указано как S: ... строки.


если этого недостаточно, вы можете написать свои собственные правила udev. Первый запуск udevadm info /dev/ttyUSB0 и выберите любое идентифицирующее свойство (например,ID_PATH для порта USB). Рекомендуется также всегда включать подсистему.

затем откройте (или создайте) файл в /etc/udev/rules.d/ (название, например, serial-symlinks.rules), и поставьте там правило udev.

например, если вывод для ttyUSB0 is:

$ udevadm info /dev/ttyUSB0
. . .
E: ID_PATH=pci-0000:00:1d.0-usb-0:1.2:1.0
. . .
E: SUBSYSTEM=tty
. . .

...можно написать такое правило:

SUBSYSTEM=="tty", ENV{ID_PATH}=="pci-0000:00:1d.0-usb-0:1.2:1.0", SYMLINK+="tty-xbee"

...и udev всегда будет симлинк /dev/tty-xbee к любому устройству tty, подключенному к порту USB #2.


(Примечание: не использовать те же имена для символических ссылок, что и в ядре для узлов устройств. Использование SYMLINK+="ttyUSB0" будет причиной плохих вещей.)

7
отвечен grawity 2023-03-20 09:36

вот что я делаю с USB последовательных устройств:

  1. cd /dev/serial/by-id
  2. ls -l

    например:

    root@toaster:/dev/serial/by-id# ls -l

    total 0

    lrwxrwxrwx 1 root root 13 Jan 1 1970 usb-FTDI_FT232R_USB_UART_A7035K2R-if00-port0 -> ../../ttyUSB0

  3. сделайте символическую ссылку из этого имени L-O-N-G на имя по вашему выбору в каталоге по вашему выбору. В моем случае это системное устройство, и только root управляет им, поэтому я делаю ссылку в /root, like:

    ln -s /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A7035K2R-if00-port0 /root/easydigi
    
  4. в ваших программах или что-то нужно имя устройства последовательного устройства, вы просто использовать ссылку, в моем случае выше "/ root / easydigi", в качестве замены для"/dev/ttyUSB0".

0
отвечен guitarpicva 2023-03-20 11:53

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх