From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Sat, 10 Feb 2018 15:12:32 +0300 From: Vladislav Zavjalov To: ALT Linux Sisyphus discussions Message-ID: <20180210121231.GA29978@imap.altlinux.org> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.5.23.88.hg577987ca2d02 (2014-03-12) Subject: [sisyphus] =?koi8-r?b?zsHT1NLPysvBIHVzYi3V09TSz8rT1Ncg1yB1ZGV2?= X-BeenThere: sisyphus@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Sisyphus discussions List-Id: ALT Linux Sisyphus discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 10 Feb 2018 12:12:32 -0000 Archived-At: List-Archive: List-Post: Добрый день! Задача такая: есть десяток простых и дешевых примерно одинаковых USB-устройств, которые хочется использовать одновременно. Проблема в том, что, с точки зрения USB, устройства не имеют уникальных ID. При этом, разумеется, хочется быть уверенным, что если я пишу на /dev/my_dev7, то это будет именно устройство 7, а не какое-то другое. Что я делаю. Сперва собираю информацию об устройствах (у них всех usb vendor:product равен 0416:5011): --------- lsusb | sed -n -r -e '/0416:5011/{s/Bus ([0-9]+) Device ([0-9]+).*/\1 \2/p}' | while read bus dev; do udevadm info -a /dev/bus/usb/$bus/$dev > dev$dev done --------- Действительно, различий немного: --------- $ diff dev084 dev085 8,9c8,9 < looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.3': < KERNEL=="1-2.3" --- > looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.4': > KERNEL=="1-2.4" 26,27c26,27 < ATTR{devnum}=="84" < ATTR{devpath}=="2.3" --- > ATTR{devnum}=="85" > ATTR{devpath}=="2.4" --------- Моя гипотеза состоит в том, что можно различить их по devpath. Они подключены у меня к нескольким простым 4-портовым USB-хабам, и, действительно, devpath соответствует порядку их портов: 1.1, 1.2, 1.3, 1.4, 2.1 и т.д. Поэтому я пишу такие правила для udev (в /etc/udev/rules.d/) --------- ACTION=="add",\ ATTRS{idVendor}=="0416", ATTRS{idProduct}=="5011",\ ATTRS{devpath}=="1.1", GROUP="users", SYMLINK+="my_dev7" и т.д. --------- Естественно, придется все промаркировать и заботиться о том, чтобы все всегда было воткнуто в нужном порядке. Я довольно смутно представляю себе концепцию usb и udev, поэтому хочется попросить о критике этого рецепта. Насколько на devpath можно полагаться, какие могут быть проблемы и т.п. Ну и, если все нормально, то, может быть, оно кому-то еще пригодится.