เหตุใด“ cat ttyUSB0” จึงไม่สร้างผลผลิต


13

ฉันเชื่อมต่อตัวรับสัญญาณอินฟราเรดเข้ากับพอร์ต USB ... (บรรทัดสุดท้ายของ dmesg บอกไฟล์อุปกรณ์)

$ dmesg
[10496.596063] usb 7-2: new full-speed USB device number 2 using uhci_hcd
[10496.751112] usb 7-2: New USB device found, idVendor=0df7, idProduct=0620
[10496.751117] usb 7-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[10496.751120] usb 7-2: Product: USB-Serial Controller
[10496.751124] usb 7-2: Manufacturer: Prolific Technology Inc.
[10496.787441] usbcore: registered new interface driver usbserial
[10496.787467] usbcore: registered new interface driver usbserial_generic
[10496.787483] usbserial: USB Serial support registered for generic
[10496.795104] usbcore: registered new interface driver pl2303
[10496.795129] usbserial: USB Serial support registered for pl2303
[10496.795160] pl2303 7-2:1.0: pl2303 converter detected
[10496.807238] usb 7-2: pl2303 converter now attached to ttyUSB0

จากนั้นฉันก็ไปลอง ...

$ sudo cat /dev/ttyUSB0

แต่ไม่มีเอาต์พุตเพียงแฮงค์ แม้ว่าในขณะที่ฉันกดปุ่มใด ๆ บนรีโมทคอนโทรลของฉันอุปกรณ์รับสัญญาณอินฟราเรดก็จะกระพริบเพื่อที่จะใช้งานได้

ทำไมเป็นเช่นนั้น


บันทึก:

  • คำสั่งข้างต้นออกจากเมื่อฉันลบอุปกรณ์ออกจากพอร์ต USB และพิมพ์ "cat: ttyUSB0: ไม่มีอุปกรณ์ดังกล่าว" และ dmesg พิมพ์ 3 บรรทัด:

     [13707.264086] usb 7-2: USB disconnect, device number 2 
     [13707.264894] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0
     [13707.264915] pl2303 7-2:1.0: device disconnected)
    
  • ด้วยไฟล์อุปกรณ์สำหรับแป้นพิมพ์ใช้งานได้เช่น:

     $ sudo cat /dev/input/by-id/usb-USB_USB_Keykoard-event-kbd 
    

    สร้างตัวละครแปลก ๆ มากมายบนคอนโซลขณะที่ฉันกดแป้นใด ๆ บนแป้นพิมพ์

  • เกิดขึ้นเช่นเดียวกันในพอร์ต USB อื่น ๆ ด้วย

2
ลองstty raw -echo < /dev/ttyUSB0; cat -vte /dev/ttyUSB0แทน
Stéphane Chazelas

@ Stephane Chazelas: ไม่มีอะไรเกิดขึ้น
nlognfan


หากคุณไม่ได้รับผลลัพธ์ใด ๆ ฉันก็สงสัยว่าเป็นปัญหาไดรเวอร์หรือฮาร์ดแวร์ตรวจไม่พบ / ระบุได้อย่างถูกต้อง สิ่งนี้อาจพิสูจน์ได้ว่ามีประโยชน์เช่นกัน: help.ubuntu.com/community/Lirc_USB-UIRT
slm

โปรดทราบว่าการใช้ตัวรับส่งสัญญาณอินฟราเรดด้วย USB-to-serial-bridges มักจะไม่ทำงาน
groxxda

คำตอบ:


3

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

ลองminicomหรือscreen(เช่นscreen /dev/ttyUSB0 115200- แทนที่ 115200 ด้วยอัตรา baud ของตัวรับสัญญาณ IR ของคุณ)


1

ไม่ต้องสนใจคำตอบเกี่ยวกับความจำเป็นในการเริ่มการเชื่อมต่อ USB - มันถูกเริ่มต้นแล้วเมื่อคุณเสียบอุปกรณ์

หากคุณต้องการตรวจสอบว่ามันใช้งานdd if=/dev/ttyUSB0ได้หรือไม่ให้ใช้ หากคุณต้องการอ่านตัวอักษรเหล่านั้นจริง ๆ คุณต้องใช้เทอร์มินัลอนุกรม ใช้minicom(CLI, ต้องมีคู่มือ), picocom(อาจเข้าใจด้วยตัวเอง), cutecom(ส่วนต่อประสานกราฟิกที่ดี, ง่าย) หรือscreen(CLI, แต่ง่ายจริงๆ) คุณจะต้องรู้อัตราการรับรู้ .. 90% เป็น 115200 หรือ 9600 และ 57600, 38400 หรือ 19200

อย่างไรก็ตามคุณใช้เครื่องรับชนิดใด คุณสามารถให้ลิงค์ไปยังหน้าผลิตภัณฑ์หรือคำอธิบายได้หรือไม่


1

สิ่งนี้อาจช่วยไม่ได้ แต่นี่เป็นปัญหาที่คล้ายกันที่ฉันเคยมีในอดีต เมื่อฉันแมวไฟล์อุปกรณ์สำหรับเมาส์ของฉันโดยตรง (เช่นการใช้cat /dev/input/by-id/usb-<mymouse>) ฉันได้รับผลลัพธ์ที่คล้ายกับสิ่งที่คุณได้รับด้วยแป้นพิมพ์ของคุณ (เช่นพูดพล่อยๆ) อย่างไรก็ตามการเคลื่อนไหวของเมาส์บางอย่างเช่นคลิกซ้ายจะไม่สร้างตัวอักษรที่พิมพ์ได้ดังนั้นเครื่องจะไม่แสดงอะไรเลย

แน่นอนว่าเมาส์ยังคงทำอะไรบางอย่างเราไม่สามารถมองเห็นมันได้โดยcat'อิงไฟล์อุปกรณ์ โชคดีที่เคอร์เนลมีคุณสมบัติประณีตที่เรียกว่า usbmon ซึ่งมีประโยชน์สำหรับการดักข้อมูลบนเอาต์พุตไบนารีดิบของอุปกรณ์ usb เมื่อใช้สิ่งนี้เราจะเห็นว่าเกิดอะไรขึ้นเมื่อเราทำการคลิกซ้ายโดยที่การทำสิ่งเดียวกันผ่านทาง/devมักจะไม่แสดงอะไรเลย

อีกครั้งสิ่งนี้อาจไม่ช่วย แต่นี่เป็นวิธีการใช้ usbmon:

  1. ตรวจสอบให้แน่ใจว่าเคอร์เนลของคุณเปิดใช้งาน usbmon ผลลัพธ์ของ:
    zcat /proc/config.gz | grep USB_MON
    ควรมีอย่างใดอย่างหนึ่ง=mหรือ=yอยู่ในนั้น

  2. หากเป็น=mเช่นนั้นโหลดโมดูลด้วยsudo modprobe usbmon

  3. เพื่อให้แน่ใจว่าซ็อกเก็ต usb ทั้งหมดปรากฏขึ้นในตำแหน่งที่ถูกต้องให้รัน:
    ls /sys/kernel/debug/usb/usbmon
    คุณควรเห็นสิ่งต่อไปนี้:
    0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u

ตัวเลขที่แตกต่างกันอ้างถึงพอร์ต USB ที่แตกต่างกันและหมายเลขที่อยู่ด้านหน้า 0 จะให้เอาต์พุตรวมของพอร์ต USB ทั้งหมด ตัวอย่างเช่นการรันcat /sys/kernel/debug/usb/usbmon/0uแสดงให้เห็นว่าอุปกรณ์กำลังทำอะไรอยู่แม้ในกรณีที่ไม่มีcatไฟล์อยู่/devก็ตาม

ไม่ว่าจะแก้ปัญหาของคุณได้หรือไม่ก็อาจจะเป็นประโยชน์ในอนาคตเพราะมันมักจะเป็นวิธีที่เป็นประโยชน์มากขึ้นในการดักฟังบนอุปกรณ์ USB /devกว่า

โชคดี :)


1

สำหรับฉันมันเป็น Baudrate ต่ำเกินไป ผลลัพธ์ปรากฏขึ้นเมื่อฉันกำหนดค่าระบบใหม่ (อุปกรณ์และพอร์ต) ให้ใช้ 300 แทน 150


-1

ฉันดูเหมือนจะจำได้ว่า USB เป็นโปรโตคอลที่ต้องใช้คอมพิวเตอร์ในการเริ่มต้นการสื่อสาร ไม่อนุญาตให้พูดด้วยตนเอง ดังนั้นผู้ขับขี่จึงพูดถึงอุปกรณ์ดิบแล้วจับเอาท์พุท อย่างไรก็ตามนั่นเป็นเพียงลางสังหรณ์ฉันจะรออีกคำตอบเพื่อยืนยันข้อสงสัยของฉัน


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