วิธีจับคู่อุปกรณ์ ttyUSBX กับอุปกรณ์ usb แบบอนุกรม


22

ไดรเวอร์ตัวเลือกที่ตรงกับ USB ID และโหลดไดรเวอร์สำหรับอุปกรณ์นี้อย่างถูกต้อง ตัวอย่างเช่น

# lsusb
Bus 001 Device 002: ID 19d2:0031 ONDA Communication S.p.A. ZTE MF636
Bus 001 Device 003: ID 12d1:14ac Huawei Technologies Co., Ltd.

นอกจากนี้ยังสร้างอุปกรณ์ ttyUSBX สำหรับจัดการฮาร์ดแวร์

crw-rw---- 1 root uucp 188, 0 Jul  4 13:48 /dev/ttyUSB0
crw-rw---- 1 root uucp 188, 1 Jul  4 13:49 /dev/ttyUSB1
crw-rw---- 1 root uucp 188, 2 Jul  4 13:35 /dev/ttyUSB2
crw-rw---- 1 root uucp 188, 3 Jul  4 13:37 /dev/ttyUSB3
crw-rw---- 1 root uucp 188, 4 Jul  4 13:37 /dev/ttyUSB4
crw-rw---- 1 root uucp 188, 5 Jul  4 13:37 /dev/ttyUSB5
crw-rw---- 1 root uucp 188, 6 Jul  4 13:37 /dev/ttyUSB6
crw-rw---- 1 root uucp 188, 7 Jul  4 13:37 /dev/ttyUSB7

อย่างไรก็ตามฉันมีอุปกรณ์แบบอนุกรม usb มากกว่าหนึ่งอุปกรณ์และฉันต้องการทราบว่า ttyUSB ตัวใดเป็น USBID ตัวใด อดีต / dev / ttyUSB1 -> 19d2: 0031

คุณรู้จุดที่ฉันสามารถรับข้อมูลนี้ได้หรือไม่?


หากคุณรู้รายละเอียดเช่นผู้จำหน่าย / ผลิตภัณฑ์คำตอบนี้ยอดเยี่ยม
earcam

คำตอบ:


13

ดูที่ระบบไฟล์ sysfs ตัวอย่างสำหรับซีเรียล USB ของฉัน:

$ lsusb
Bus 003 Device 016: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
$ ls -l /sys/bus/usb-serial/devices
lrwxrwxrwx 1 root root 0 Jul  4 17:37 ttyUSB0 -> ../../../devices/pci0000:00/0000:00:1c.0/0000:02:00.0/usb3/3-1/3-1:1.0/ttyUSB0
$ $ grep PRODUCT= /sys/bus/usb-serial/devices/ttyUSB0/../uevent
PRODUCT=67b/2303/300

อย่างที่คุณเห็นttyUSB0แผนที่067b:2303บนคอมพิวเตอร์ของฉัน สถานที่อื่น ๆ /sys/class/tty/ที่มีมูลค่าการสำรวจ ให้ความสนใจกับ symlink


คุณไม่ได้ทำสิ่งใดเพื่อให้รายการนั้นเป็นสินค้าด้วยหรือไม่
Igor Stoppa

@IgorStoppa ลองไปcatที่ueventไฟล์จากผลลัพธ์find /sys -name ttyACM0เช่น แทนที่ชื่อโหนดของอุปกรณ์อนุกรมของคุณ
sherrellbc

9

คุณสามารถลองดูว่าอุปกรณ์ของคุณลงทะเบียนภายใต้ / dev / serial / by-id /

ls -l / dev / serial / by-id

ชื่อเหล่านี้ควรสอดคล้องและจะชี้ (symlink) ไปยัง ttyUSBx ที่ถูกต้อง


คุณสามารถเพิ่มคำอธิบายตัวอย่าง ฯลฯ คำตอบออนไลน์ไม่นับว่าดีใน SE
Romeo Ninov

@RomeoNinov ตกลงฉันได้เพิ่มการชี้แจงตามที่คุณร้องขอ นี่ไม่ใช่เรื่องยากยิ่งไปกว่าการค้นหาในไดเรกทอรีอื่นดังนั้นฉันจึงไม่สามารถเห็นได้ว่าคำตอบที่ซับซ้อนกว่านี้คือจะปรับปรุงอะไร ขอโทษสำหรับเรื่องนั้น.
Waxhead

ฉันมีอะแดปเตอร์สองตัวที่เหมือนกัน (สอง Arduinos) เชื่อมต่อกับ Raspberry Pi ls -l /dev/serial/by-idคืนค่าอะแดปเตอร์เดียวเท่านั้น../../ttyUSB1ในขณะที่ls -l /sys/bus/usb-serial/devicesแสดงให้ฉันทั้งสอง ดังนั้นฉันไม่คิดว่านี่เป็นคำตอบที่ดี
Daniel F

6

ผมมีปัญหาที่คล้ายกัน

เขียนสิ่งนี้ไปที่ /etc/udev/rules.d/50-usb.rules

SUBSYSTEM=="tty", ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0031", SYMLINK+="ONDA"
SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="14ac", SYMLINK+="HUAWEI"

ไปยังจุดสิ้นสุด Reboot

ตอนนี้คุณสามารถใช้/dev/ONDAเพื่อไปยังอุปกรณ์ ONDA ของคุณ

หากคุณต้องการให้ผู้ใช้ที่ไม่ใช่รูทสามารถใช้สิ่งเหล่านี้ได้ให้เพิ่ม

, MODE="0666"

ถึงจุดสิ้นสุดของแต่ละบรรทัด


ฉันทำสิ่งนี้และตรวจสอบไฟล์ที่พวกเขาเชื่อมโยงไปถึง ผลิตภัณฑ์ที่ฉันมีมีอินเตอร์เฟซหลายอย่างเช่นดิสก์แข็งอนุกรม USB ในขณะที่ฉันคาดว่าการเชื่อมโยงไปยัง / dev / ttyACM0 แต่มันเป็น / dev / sda มีวิธีใดบ้างในการกำหนดในไฟล์กฎที่อุปกรณ์ควรใช้กฎประเภทใด ฉันเขียนกฎใน /etc/udev/rules.d/99-ftdi.rules
nurp

ตกลงพบ: เพิ่ม SUBSYSTEM == "tty" ในพารามิเตอร์กฎ ค่านี้สามารถพบได้ในผลลัพธ์ของ udevadm info --name=/dev/ttyACM0
nurp

3

ฉันจะใช้ udev และเขียนกฎบางอย่างที่สร้าง symlink สำหรับอุปกรณ์

เพื่อให้ได้ข้อมูลที่เพียงพอที่จะแยกแยะอุปกรณ์ต่าง ๆ ลองทำสิ่งนี้สำหรับอุปกรณ์ทั้งหมด:

$ udevadm info --query all --name /dev/ttyUSB0 --attribute-walk

1

คำสั่งต่อไปนี้จะให้ฉันรายการชื่ออุปกรณ์ ttyUSB ที่เชื่อมโยงกับ 19d2: 0016 (ซึ่งเป็นรหัส "โหมดโมเด็ม" ของ ZTE MF831 LTE stick คุณอาจแตกต่างกัน):

    for i in $(find -L /sys/bus/usb/devices/ -maxdepth 2 -name "ttyUSB*"); do
        egrep -i "v19d2p0016(.*)in02" $i/../modalias >/dev/null && echo "/dev/${i##*/}"
    done

สิ่งนี้จะวนซ้ำรายการไฟล์ที่มีชื่อไฟล์ ttyUSB * รวมถึง symlink ใน / sys / bus / usb / อุปกรณ์ ภายในผลลัพธ์เราจะค้นหาไฟล์ชื่อ modalias และค้นหาสตริงที่มีรหัสผู้จำหน่าย "v" "19d2" และรหัสผลิตภัณฑ์ "p" 0016 หากผลลัพธ์ตรงกันเราจะสะท้อนสตริงนำหน้าด้วย "/ dev / "ด้านหน้า USB ชื่อ. Afaik ตัวแรกหรือตัวสุดท้าย (หมายเลขสูงสุด) คือพอร์ตโมเด็มสำหรับอุปกรณ์ ZTE คุณสามารถ echo ผลลัพธ์ไปยังไฟล์ใน / tmp / และ head -n1 หรือ tail -n1 บรรทัดตามลำดับ หากคุณมีฮับคุณอาจต้องเพิ่มความลึกสูงสุด

นี่ไม่ใช่วิธีที่หรูหราที่สุด แต่มันจะทำงานกับตัวแปร Linux เกือบทุกชนิด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.