FreeBSD: Nós permanentes para dispositivos usb

2

No FreeBSD, os dispositivos USB aparecem em /dev as (por exemplo) /dev/ugen2.5 , /dev/ugen2.6 , etc ...

No entanto, notei que após uma reinicialização, às vezes, eles estão apontando para dispositivos diferentes. Existe uma maneira de bloqueá-los ou de obter um nó como /dev/my-usb-device que não é alterado após a reinicialização?

    
por gravitation 31.03.2015 / 21:36

1 resposta

3

Eu não acho que você possa bloquear, mas há uma maneira bastante fácil de fazer isso. Você precisa adicionar algumas coisas ao etc/devd.conf , que lida com o dispositivo específico quando ele aparecer. Você precisará usar algo exclusivo sobre o dispositivo (por exemplo, seu número de série). Aqui está um exemplo para a porta serial USB que lida com a minha campainha:

# Set up symlink to doorbell serial port
attach 200 {
        device-name     "uftdi[0-9]";
        match           "vendor"        "0x0403";
        match           "product"       "0x6001";
        match           "sernum"        "A10167K1";
        action          "/root/bin/cuaconfig $device-name doorbell $sernum";
};  

Observe que a ação é executar um script. Isso elabora o verdadeiro número de porta serial por meios desonestos e, em seguida, adiciona um link simbólico em /dev . Seus programas usam isso para acessar o dispositivo. Aqui está o meu script, que provavelmente é mais do que você precisa. Este traduz o nome do dispositivo USB para um nome de porta serial, porque estou usando um chip serial FTDI porta USB. Você provavelmente terá algo muito mais simples e provavelmente não precisará dessa tradução.

#!/bin/sh

# configure cuaU? ports - called from devd.conf
# arg 1 - device name, of the form uftdi?
# arg 2 - symlink to create/delete in /dev (any existing one deleted)
# arg 3 - serial number

dev=$1
link=$2
sernum=$3

# get FTDI unit number
ftunit=${dev#uftdi}

# generate full tty name
ttyname="/dev/cua$(sysctl -n dev.uftdi.$ftunit.ttyname)"

# generate full symlink name
symlink="/dev/${link}"

# delete any existing symlink to the port, then create the new one
echo "creating symlink ${symlink} to ${ttyname} on serial ${sernum}" > /dev/console
rm -f ${symlink}
ln -s ${ttyname} ${symlink}'

Como obter o número de série de um dispositivo

Pode ser o suficiente para usar os IDs do fabricante no material devd.conf . No entanto, você pode ter dois o mesmo (eu tenho, eles são portas seriais FT232 USB). Nesse caso, você pode diferenciá-los por número de série (cuidado, alguns clones FT232 têm o mesmo número de série!)

Existem várias maneiras de obter o número de série. Uma é instalar a porta sysutils/usbutils . Contém o comando lsusb , que listará todos os dispositivos. Você pode usar:

lsusb -v -s 0403:6001 | grep serial  

para obter o número de série.

    
por 09.07.2017 / 13:06