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.