Как связать USB-устройство под статическим именем?

Существуют, намного больше изменяют размер опций в imagemagick. -scale похож на то, в чем Вы нуждаетесь.

enter image description here

Кроме того, не используйте JPEG для идеальных для пикселя "миниатюр"; используйте PNG вместо этого (или, если невозможный, GIF). JPEG разработан для фотографий и использует сжатие с потерями, приводящее к искажению, явно примечательному после масштабирования Вашего обеспеченного образца JPEG.

Эта статья о масштабировании изображения могла бы быть интересной.

45
29.10.2018, 18:55
6 ответов

Как предложено, можно добавить некоторые правила udev. Я отредактировал /etc/udev/rules.d/10-local.rules содержать:

ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="my_uart"

Можно проверить на переменные устройства путем выполнения

udevadm info -a -p  $(udevadm info -q path -n /dev/ttyUSB0)

Существует больше подробно руководство, которое можно прочитать на http://www.reactivated.net/writing_udev_rules.html

43
27.01.2020, 19:34
  • 1
    Обработанный как очарование. Один вопрос: Как выйти udevam? И важно отметить это my_uart создает символьную ссылку под /dev/my_uart. Я сначала записал /dev/arduino первый раз и это перестали работать пока arduino достаточно. –  k0pernikus 07.03.2013, 21:11
  • 2
    udevadm должен выйти отдельно, когда это сделано. –  Kotte 08.03.2013, 09:31
  • 3
    Затем по некоторой неизвестной причине заморозило терминальный сеанс к моему Raspberry Pi при генерации отчета. –  k0pernikus 08.03.2013, 14:19

Синтаксис правил, приведенный выше, может работать на некоторых дистрибутивах, но не работает на моих (Raspbian). Так как я никогда не находил ни одного документа, который бы объяснял все входы и выходы, я написал свой собственный, который можно найти здесь . Вот до чего он сводится.
1. Узнай, что на TtyUSB:

dmesg | grep ttyUSB  

2. перечислите все атрибуты устройства:

udevadm info --name=/dev/ttyUSBx --attribute-walk

(с номером(ами) вашего устройства вместо x, конечно). Выберите набор уникальных идентификаторов, например idVendor + idProduct. Вам также может понадобиться SerialNumber, если у вас более одного устройства с одним и тем же idVendor и idProduct. SerialNumbers должен быть уникальным для каждого устройства.
3. Создайте файл /etc/udev/rules.d/99-usb-serial.rules с чем-то вроде этой строки:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="your_device_name" 

(предполагая, что вам не нужен серийный номер там, и конечно же с номерами для idVendor и idProduct, которые вы нашли в шаге 2.
4. Загрузите новое правило:

sudo udevadm trigger

5. Проверьте, что произошло:

ls -l /dev/your_device_name  

покажет, к какому номеру ttyUSB пришла сим-ссылка. Если это /dev/ttyUSB1, то проверьте, кто владеет этим номером и к какой группе он принадлежит:

ls -l /dev/ttyUSB1   

Тогда просто ради забавы:

udevadm test -a -p  $(udevadm info -q path -n /dev/your_device_name)
35
27.01.2020, 19:34

Мне также удалось найти уникальное устройство в / dev / serial / by-id . Я еще не пробовал перезагрузку, но файлы в этом каталоге были просто ссылками на соответствующий файл устройства ( ttyACM [0-9] ). «

Я использую Arch Linux на Raspberry Pi , но я наткнулся на них, просто выполнив find для имен файлов, содержащих "Arduino". Мои программы на Python отлично работают, используя эти файлы в качестве устройств для чтения / записи данных в / из моих Arduinos (пока что два на одном Pi).

1
27.01.2020, 19:34

Проблема с несколькими идентичными USB-устройствами

У меня Rasperry Pi с четырьмя камерами. Я беру пиксель с помощью fswebcam , который идентифицирует камеры как / dev / video0 .. video3 . Иногда камера video0 , vide02 , video4 и video6 , но пока об этом можно забыть.

Мне нужен постоянный идентификатор для идентификации номера камеры, например, video0 всегда одна и та же камера, потому что я подписываю изображения. К сожалению, это происходит ненадежно - при загрузке камеры нумеруются как video0 .. video3 , но не всегда одинаково.

Все камеры имеют одинаковый идентификатор и серийный номер.

Решение этой проблемы связано с правилами udev, но там также есть много рыболовных крючков.

Если вы введете команду

udevadm info –attribute-walk –path=/dev/video0

, вы получите готовый результат, но основные биты будут

KERNEL=”video0”, SUBSYSTEM=”video4linux” and KERNELS=”1:1.2.4:1.0”.

. Бит KERNELS - это порт концентратора USB. С четырьмя камерами их четыре - они не меняются при перезагрузке, но видео {x} , связанное с портом , может измениться.

Итак, нам нужно правило udev, чтобы привязать номер видео к порту USB-концентратора - что-то вроде:

KERNEL==”video0”,SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0”,SYMLINK+=”camera0” 

Выглядит просто - доступ к камере с помощью

fswebcam –d  $realpath /dev/camera0

За исключением того, что это не работает - если вы поместите это в udev правило, и система выделила video0 (при загрузке) на другой порт, правило udev игнорируется.Символьная ссылка на / dev / camera0 в основном говорит об отсутствии такого устройства . Квадратная.

Мы хотим привязать символическую ссылку к адресу USB-концентратора, а не к номеру видео {x} . Потребовалась программа на Python.

Первым шагом было выполнение

fswebcam –d /dev/video${x}  tst.jpg

для x между 1 и 8. Наличие tst.jpg после каждого вызова определяет, есть ли камера на этом номере видео. Из этого составьте список активных номеров видео. По моему опыту, это либо 0,1,2,3 , либо 0,2,4,6 для камер, которые я использовал.

Другие, конечно, могут составить этот список, используя другой процесс.

Затем для каждого номера видео в списке запустите

udevadm info –attribute-walk –path=/dev/videox > dd

и извлеките KERNELS = строку из dd . В результате вы получите список адресов USB-портов для камер. Отсортируйте этот список так, чтобы на следующем шаге вы всегда обрабатывали его в том же порядке. Назовите это «список адресов».

Запустите команду udevadm…> dd еще раз и создайте список, который выглядит как

KERNEL==”video0”, SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0 ”,SYMLINK+=”camerax”. Call this the “video list”.

Теперь просмотрите список адресов - для каждой записи найдите соответствующую запись в списке видео. Создайте новый список, который выглядит как набор строк, например

KERNEL==”video0”, SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0 ”,SYMLINK+=”camera2”

. X (номер символической ссылки) заменяется порядковым номером в списке адресов.

Теперь у вас есть работающее правило udev. Символьная ссылка, привязанная к адресу USB-концентратора, независимо от того, какой номер видео назначен этому порту при загрузке.

Запишите окончательный список в файл /etc/udev/rules.d/cam.rules . Запустите триггер udevadm , чтобы активировать его, и работа будет выполнена. / dev / camera2 будет той же камерой (USB-порт) независимо от ее номера видео.

10
27.01.2020, 19:34

Просто хочу сказать, что описанное выше сработало для меня, а также автоматически монтировало устройство после того, как я поместил запись в /etc/fstab (, а также вызывает umount после извлечения флешки)

т.е.

/etc/fstab

# See /etc/udev/rules.d/5-usb-disk.rules
/dev/backup     /vol/backup     ext4    defaults,errors=remount-ro 0       1

cat /etc/udev/rules.d/5 -usb -stick.rules

#
# the next line creates a symlink to this disk drive called /dev/backup 
# i.e.
#   root:# ls -la /dev/backup 
#   lrwxrwxrwx 1 root root 3 Jul 22 19:33 /dev/backup -> sg0

# Backup usb stick - create /dev/backup
# ATTRS{model}=="Cruzer Blade    "
ACTION=="add", ATTRS{model}=="Cruzer Blade    ", SYMLINK+="backup"

# Clean up after removal  
ACTION=="remove", ATTRS{model}=="Cruzer Blade    ", RUN+="/bin/umount /vol/backup"

Таким образом, после вставки USB-накопителя я получаю:

root:# mount | grep sd
/dev/sda1 on /vol/backup type ext4 (rw,relatime,errors=remount-ro,data=ordered)
0
27.01.2020, 19:34

Здесь есть много хороших ответов, но все они подходят для определенного VID :PID. После долгих экспериментов с правилами udev для последовательных адаптеров разных марок я обнаружил, что это простое правило udev работает лучше всего для меня:

ACTION=="add", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", DRIVERS=="usb", SYMLINK+="tty.usb-$attr{devpath}"

Он дает постоянные символические ссылки на основе пути к устройству на шине USB, например:

$ lsusb -t # output filtered for tty devices only
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 5, If 0, Class=, Driver=, 480M
        |__ Port 2: Dev 6, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 3: Dev 20, If 1, Class=CDC Data, Driver=cdc_acm, 12M
            |__ Port 3: Dev 20, If 0, Class=Communications, Driver=cdc_acm, 12M
            |__ Port 2: Dev 7, If 0, Class=Hub, Driver=hub/5p, 480M
                |__ Port 3: Dev 17, If 0, Class=Vendor Specific Class, Driver=cp210x, 12M
                |__ Port 4: Dev 16, If 0, Class=Vendor Specific Class, Driver=cp210x, 12M
                |__ Port 5: Dev 10, If 0, Class=Hub, Driver=hub/5p, 480M
                    |__ Port 5: Dev 12, If 0, Class=Vendor Specific Class, Driver=cp210x, 12M
$ ls -alF /dev/tty.usb*
lrwxrwxrwx 1 root root 7 Aug  2 10:33 /dev/tty.usb-1.2.2.3 -> ttyUSB2
lrwxrwxrwx 1 root root 7 Aug  2 10:33 /dev/tty.usb-1.2.2.4 -> ttyUSB1
lrwxrwxrwx 1 root root 7 Aug  2 09:04 /dev/tty.usb-1.2.2.5.5 -> ttyUSB0
lrwxrwxrwx 1 root root 7 Aug  2 10:40 /dev/tty.usb-1.2.3 -> ttyACM0
3
02.08.2020, 07:43

Теги

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