ฉันจะรีเซ็ตอุปกรณ์ USB โดยไม่ถอดปลั๊กใน Linux ได้อย่างไร


6

ทุกครั้งที่มีความจำเป็นในการรีเซ็ตอุปกรณ์ USB มีวิธีดำเนินการรีเซ็ตในซอฟต์แวร์โดยไม่ต้องถอดปลั๊กอุปกรณ์แล้วทำการเสียบกลับเข้าไปใหม่หรือไม่?

โดยเฉพาะอย่างยิ่งฉันมีเว็บแคมที่สับสนเมื่อเล่นมากเกินไปด้วยการตั้งค่าในguvcaptureและจากนั้นต้องรีเซ็ตเพื่อให้กลับมาอยู่ในการติดตาม

คำตอบ:


9

คุณสามารถลองใช้โปรแกรมของ Benjamin Closeresetusbเพื่อรีเซ็ตอุปกรณ์ทั้งหมด - ไม่มีไบนารี แต่การรวบรวมมันค่อนข้างง่าย บันทึกซอร์สโค้ดเป็นresetusb.cแล้วเรียกใช้:

gcc -lusb resetusb.c -o resetusb

resetusbขณะนี้คุณสามารถเรียกใช้เครื่องมือเป็น หรือ @unhammer ชี้ไปที่เวอร์ชันอุปกรณ์เดี่ยวของ Alan Stern (รวมถึงคำแนะนำบางประการเกี่ยวกับวิธีใช้งาน )

บางคนโชคดีที่เพิ่งลบและmodprobeนำโมดูลที่เกี่ยวข้องออก :

modprobe -vr ehci_hcd
modprobe -v ehci_hcd

(แน่นอนคุณสามารถสคริปต์นี้)

การแจกแจงบางอย่างอาจมีเครื่องมือของตนเองเพื่อรีสตาร์ทระบบย่อย USB Mandrake /etc/init.d/usbเห็นได้ชัดว่ามี


askubuntu.com/questions/645/…มีโปรแกรมที่คล้ายกันสำหรับการรีเซ็ตอุปกรณ์ usb เดียว
unhammer

$ sudo modprobe -vr ehci_hcdผลลัพธ์ใน modprobe: FATAL: Module ehci_hcd is builtin.kubuntu trusty
naught101

บนแล็ปท็อปของฉันที่มี debian 8 ehci_hcd ให้ข้อผิดพลาด อย่างไรก็ตามrmmod ehci_pci && sleep 2 && modprobe ehci_pciทำงานได้อย่างสมบูรณ์แบบ
Bharat G

เคล็ดลับ modprobe ทำงานบน CentOS 4 :-( บันทึกวันของฉัน!
Open SEO

4

/dev/sdcสมมติว่าผมต้องการที่จะตั้งค่า

# udevadm info -q all /dev/sdc | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1.4/2-1.4:1.0/host2/target2:0:0/2:0:0:0/block/sdc

ฉันทำตาม2-1.4ข้างต้น (คุณอาจจะ2-1- อุปกรณ์ของฉันเสียบเข้ากับฮับ) และทำ:

# echo 2-1.4 > /sys/bus/usb/drivers/usb/unbind
# echo 2-1.4 > /sys/bus/usb/drivers/usb/bind

1
ฉันได้ทำหนึ่งซับ (-ish) สำหรับ: DEV="sdc"; USB=$(udevadm info -q all /dev/$DEV | grep DEVPATH | grep -o '/usb[1-9]*/[1-9,-]*' | cut -d'/' -f3); echo $USB > /sys/bus/usb/drivers/usb/unbind; echo $USB > /sys/bus/usb/drivers/usb/bind ทำให้DEVไดรฟ์ที่คุณต้องการรีเซ็ตและเรียกใช้ - มันจะแยกหมายเลขพอร์ต USB และแยก / ผูก / ผูก (ยังไม่ทดลอง)
unfa

1

คุณสามารถรีสตาร์ทฮาร์ดแวร์ abstraction layer: sudo /etc/init.d/hal restart


2
ฉันคิดว่า HAL จะถูกแทนที่ด้วยสิ่งอื่นในรุ่นใหม่ล่าสุดของอูบุนตู .. ดังนั้นมันขึ้นอยู่กับแจก ..
ห้าม

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