FreeBSDでは、USBデバイスは/dev
(たとえば)などで表示されます/dev/ugen2.5
。/dev/ugen2.6
しかし、再起動後、時にはこれが別のデバイスを指していることがわかりました。これをロック/dev/my-usb-device
または再起動した後にそのノードが変更されないようにする方法はありますか?
答え1
ロックすることはできないようですが、非常に簡単な方法があります。etc/devd.conf
特定のデバイスが表示されたときにそれを処理するには、何かを追加する必要があります。デバイスの固有情報(シリアル番号など)を使用する必要があります。以下は、超人種のUSBシリアルポートを処理する例です。
# 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";
};
これはスクリプトを実行することです。これは汚れた方法で実際のシリアルポート番号を見つけ、プログラムが/dev
それを使用してデバイスにアクセスします。ここに私のスクリプトがあります。おそらくあなたが必要とするよりも多いでしょう。 FTDI USBポートシリアルチップを使用しているため、USBデバイス名がシリアルポート名に変換されます。おそらくもっと簡単なものが得られ、おそらく翻訳は必要ありません。
#!/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}`
デバイスのシリアル番号を入手してください
そのような場合は、製造元IDを使用すれば十分ですdevd.conf
。しかし、同じものが2つあるかもしれません(私はFT232 USBシリアルポートでした)。この場合、シリアル番号で区切ることができます(一部のFT232クローンはすべて同じシリアル番号を持っています!)。
シリアル番号を取得する方法はいくつかあります。 1つはポートをインストールすることですsysutils/usbutils
。これには、lsusb
すべてのデバイスを一覧表示するコマンドが含まれます。あなたはそれを使用することができます:
lsusb -v -s 0403:6001 | grep serial
シリアル番号を入手してください。