FreeBSD:USBデバイス用の永続ノード

FreeBSD:USBデバイス用の永続ノード

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  

シリアル番号を入手してください。

関連情報