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. 그러나 동일한 것이 두 개 있을 수 있습니다(저는 FT232 USB 직렬 포트였습니다). 이 경우 일련번호로 구분할 수 있습니다(일부 FT232 클론은 모두 동일한 일련번호를 가지고 있습니다!).

일련번호를 얻는 방법에는 여러 가지가 있습니다. 하나는 포트를 설치하는 것입니다 sysutils/usbutils. 여기에는 lsusb모든 장치를 나열하는 명령이 포함되어 있습니다. 당신은 그것을 사용할 수 있습니다 :

lsusb -v -s 0403:6001 | grep serial  

일련번호를 받으세요.

관련 정보