2012-09-16 4 views
2

GNU/Linux의 연결된 장치에 대한 USB VID 및 PID가 있습니다. 예를 들어 입니다. 나는 VID:PID에 대해 lsusb의 출력을 grep하도록 바인딩을 원하고 udevadm 조회에 적합한 형식으로 마사지합니다. 마지막으로 결과 경로의 기본 이름을 사용합니다. 같은 뭔가 :장치 공급 업체의 USB 공급 업체 및 제품 ID

bus_dev=$(lsusb|grep VID:PID...) # Grep/Sed magic to extract bus and device from VID and PID. 
path=$(udevadm info -q path -n /dev/bus/usb/$bus_dev) # e.g., -n /dev/bus/usb/003/018 
basename $path # e.g., /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.3/3-2.3.1 
# e.g., yields 3-2.3.1 

나는 다음과 같이 사용할 수 있습니다 :

echo 3-2.3.1|sudo tee /sys/bus/usb/drivers/usb/unbind 

는 A USB 공급 업체 및 제품 ID 바인딩을 얻을 수있는 좋은 방법은 무엇입니까?

답변

1

이런 뜻입니까?

vidpid="1d6b:0002" 
bus_dev=`lsusb | grep "ID\s$vidpid" | sed 's/^.*Bus\s\([0-9]\+\)\sDevice\s\([0-9]\+\).*$/\1\/\2/g' | tail -n 1` 
path=$(udevadm info -q path -n /dev/bus/usb/$bus_dev) 
basename $path 
+1

내가 찾고있는 것이 아닙니다. 나는 "SED/Grep magic"부분 (실제로 피하려고하는 부분)이 필요하지 않습니다. 나는 이미 그 일을 잘 해냈지만 좀 더 평범하고 덜 익살스러운 것을 찾기를 희망했다. udev에서 쿼리 할 수있는 방법이 있습니까? 광산은 당신과 매우 유사 : # $ 1 - VID의 [: PID] usb_id_to_bind() { 선언 -r dev_name = "$ (lsusb | 나오지도 -rn 'S_^버스 ([0-9] {3}) dev/bus/usb/\ 1/\ 2_p ') " declare -r dev_path ="$ (udevadm info -q path -n "$ dev_name") " 기본 이름"$ dev_path " } –