Apakah mungkin untuk mengatur ulang koneksi perangkat USB, tanpa secara fisik memutus / menghubungkan dari PC?
Secara khusus, perangkat saya adalah kamera digital. Saya menggunakan gphoto2
, tetapi akhir-akhir ini saya mendapatkan "kesalahan baca perangkat", jadi saya ingin mencoba melakukan pengaturan ulang perangkat lunak dari koneksi tersebut.
Dari apa yang dapat saya katakan, tidak ada modul kernel yang dimuat untuk kamera. Satu-satunya yang terlihat terkait adalah usbhid
.
command-line
usb
cmcginty
sumber
sumber
Jawaban:
Simpan yang berikut ini sebagai
usbreset.c
Jalankan perintah berikut di terminal:
Kompilasi program:
Dapatkan Bus dan ID Perangkat dari perangkat USB yang ingin Anda atur ulang:
Jadikan program terkompilasi kami dapat dijalankan:
Jalankan program dengan hak istimewa sudo; buat penggantian
<Bus>
dan<Device>
id yang diperlukan seperti yang ditemukan dengan menjalankanlsusb
perintah:Sumber program di atas: http://marc.info/?l=linux-usb&m=121459435621262&w=2
sumber
echo $(lsusb | grep Mouse) mouse=$( lsusb | grep Mouse | perl -nE "/\D+(\d+)\D+(\d+).+/; print qq(\$1/\$2)") sudo /path/to/c-program/usbreset /dev/bus/usb/$mouse
usbreset /dev/bus/usb/011/001
itu adalah salah satu dari 2 hub usb root 3.0 dilsusb
, itu kesalahan: "Kesalahan di ioctl: Apakah direktori", ada ide? Saya mencoba pada kedua hub usb 3.0Saya belum menemukan diri saya dalam keadaan khusus Anda sebelumnya, jadi saya tidak yakin apakah itu akan cukup, tetapi cara paling sederhana yang saya temukan untuk menyetel ulang perangkat USB adalah perintah ini: (Tidak perlu aplikasi eksternal)
Itulah yang sebenarnya saya gunakan untuk mengatur ulang Kinect saya karena libfreenect tampaknya tidak memiliki API untuk membuatnya kembali tidur. Itu ada di kotak Gentoo saya, tetapi kernel seharusnya cukup baru untuk menggunakan struktur path yang sama untuk sysfs.
Jelas Anda tidak akan
1-4.6
tetapi Anda dapat menarik jalur perangkat itu dari log kernel Anda (dmesg
) atau Anda dapat menggunakan sesuatu sepertilsusb
untuk mendapatkan vendor dan ID produk dan kemudian menggunakan perintah cepat seperti ini untuk mendaftar bagaimana jalur terkait dengan vendor yang berbeda / pasangan ID produk:sumber
echo 1 > /sys/bus/usb/devices/whatever/authorized
skrip di dalam untuk mengaktifkan kembali perangkat segera setelah dinonaktifkan. Saya melakukannya pada mouse dan keyboard usb saya dan saya berakhir dengan sistem yang benar-benar tuli :)| sudo tee ...
pendekatan keistimewaan/sys
menulis: Itu rusak jika Anda belum memiliki kredensial sudo Anda di-cache.sudo sh -c "..."
berfungsi seperti yang diharapkan ketika sudo perlu meminta kata sandi.Ini akan mengatur ulang semua port USB1 / 2/3 yang terpasang [1]:
Saya percaya ini akan menyelesaikan masalah Anda. Jika Anda tidak ingin mengatur ulang semua titik akhir USB, Anda dapat menggunakan ID perangkat yang sesuai
/sys/bus/pci/drivers/ehci_hcd
Catatan: [1]:
*hci_hcd
driver kernel biasanya mengontrol port USB.ohci_hcd
danuhci_hcd
untuk port USB1.1,ehci_hcd
untuk port USB2 danxhci_hcd
untuk port USB3. (lihat https://en.wikipedia.org/wiki/Host_controller_interface_(USB,_Firewire) )sumber
ls: cannot access /sys/bus/pci/drivers/ehci_hcd/: No such file or directory
ini telah menyelesaikan masalah, mouse sudah mulai bekerja segera. +1*hci_hcd
dengan*hci-pci
, sebagai driver hci_hcd sudah dikompilasi ke dalam Kernel.for i in /sys/bus/usb/drivers/*/*:*; do
Saya perlu mengotomatisasi ini dalam skrip python, jadi saya mengadaptasi jawaban LiLo yang sangat membantu sebagai berikut:
Dalam kasus saya, itu adalah driver cp210x (yang dapat saya katakan
lsmod | grep usbserial
), sehingga Anda dapat menyimpan cuplikan di atas sebagai reset_usb.py dan kemudian melakukan ini:Ini mungkin juga berguna jika Anda belum memiliki setup kompiler ac di sistem Anda, tetapi Anda memiliki python.
sumber
USBDEVFS_RESET
. Apakah selalu sama untuk semua sistem?USBDEVFS_RESET
sama untuk semua sistem. Untuk MIPS adalah 536892692.-t
argumen (mode pohon) untuk menunjukkan info driver yang diharapkan skrip ini, tetapi skrip kemudian memerlukan beberapa pembaruan untuk mengurai jalur output berbeda yang dihasilkannyaSaya telah membuat skrip Python yang menyederhanakan seluruh proses berdasarkan jawaban di sini.
Simpan skrip di bawah ini sebagai reset_usb.py atau tiruan repo ini .
Pemakaian:
Naskah:
sumber
Karena kasus khusus dari pertanyaan adalah masalah komunikasi gphoto2 dengan kamera pada USB, ada opsi di gphoto2 untuk mengatur ulang koneksi USB-nya:
Mungkin opsi ini tidak ada pada 2010 ketika pertanyaan diajukan.
sumber
Cara tercepat untuk mengatur ulang adalah mengatur ulang pengontrol USB itu sendiri. Melakukan hal itu akan memberlakukan udev untuk membatalkan registrasi perangkat saat terputus, dan pendaftaran kembali setelah Anda mengaktifkannya.
Ini harus bekerja untuk sebagian besar lingkungan PC. Namun, jika Anda menggunakan beberapa perangkat keras khusus, Anda cukup mengulanginya melalui nama perangkat. Dengan metode ini Anda tidak perlu mencari tahu nama perangkat dengan lsusb. Anda dapat memasukkan dalam skrip otomatis juga.
sumber
ehci_hcd
denganehci-pci
. Info lebih lanjut tentang solusi ini (mungkin dari mana asalnya?): Davidjb.com/blog /Saya menggunakan semacam palu godam dengan memuat ulang modul. Ini skrip usb_reset.sh saya:
Dan ini adalah file layanan systemd saya /usr/lib/systemd/system/usbreset.service yang menjalankan usb_reset.sh setelah manajer permainan saya mulai:
sumber
rmmod: ERROR: Module xhci_pci is builtin.
Saya membuat skrip python yang akan mereset perangkat USB tertentu berdasarkan nomor perangkat. Anda dapat mengetahui nomor perangkat dari perintah lsusb.
sebagai contoh:
Dalam string ini 004 adalah nomor perangkat
sumber
Berikut ini skrip yang hanya akan mereset ID produk / vendor yang cocok.
sumber
$DIR
hilang dan tidak terlihat?Apakah ada yang memesan palu? Ini disatukan dari berbagai jawaban lain di sini.
sumber
$@
dalam proxy sudo hanya kekuatan habbit, setelah itu mencegah bug jika saya kemudian memutuskan untuk menambahkan argumen (dan lupa untuk memperbarui proxy sudo).Terkadang saya ingin melakukan operasi ini pada perangkat tertentu, seperti yang diidentifikasi oleh VID (vendor id) dan PID (id produk). Ini adalah skrip yang saya temukan berguna untuk tujuan ini, yang menggunakan perpustakaan libusb yang bagus.
Lari pertama:
Kemudian, resetDeviceConnection file c ++ ini harus melakukan tugas ini, mengatur ulang koneksi perangkat seperti yang diidentifikasi oleh vid dan pid.
(Dicuri dari katalog TIL pribadi saya: https://github.com/Marviel/TIL/blob/master/unix_tools/Reset_specific_USB_Device.md )
sumber
saya membuat skrip bash sederhana untuk mengatur ulang perangkat USB tertentu.
sumber
Mungkin ini bekerja untuk kamera juga:
Setelah menghidupkan kembali
USB 3.0
HDD yang kelaparan di3.4.42
Linux (kernel.org) di pihak saya.dmesg
diberitahu, bahwa itu adalah penghentian perintah setelah 360s (maaf, saya tidak dapat menyalin syslog di sini, tidak terhubung jaringan) dan drive tergantung sepenuhnya. Proses mengakses perangkat diblokir di kernel, tidak dapat digunakan.NFS
digantung,ZFS
digantung,dd
digantung.Setelah melakukan ini, semuanya bekerja kembali.
dmesg
diberitahu hanya satu baris tentangUSB
perangkat yang ditemukan.Saya benar-benar tidak tahu apa yang dilakukan berikut secara detail. Tapi itu berhasil.
Contoh output berikut adalah dari Debian Squeeze dengan
2.6.32-5-686
kernel, jadi saya pikir ini berfungsi untuk 2.6 dan di atasnya:Jika ini tidak berhasil, mungkin orang lain dapat mengetahui cara mengirim setel nyata ke perangkat.
sumber
Coba ini, ini mencabut perangkat lunak (Keluarkan).
Terkadang tidak berfungsi hanya melepaskan ikatan perangkat untuk beberapa perangkat.
Contoh:
Saya ingin menghapus atau mengeluarkan "Genius NetScroll 120" saya.
Maka saya pertama-tama Periksa perangkat usb saya yang terpasang
Ok, saya menemukan mouse saya, ini memiliki Bus 002, Device 009, idVendor 0458 dan idProduct 003a, jadi ini adalah informasi perangkat referensi tentang mouse.
Ini penting, nomor Bus adalah jalur nama mulai ke perangkat dan saya akan memeriksa Id produk dan Vendor untuk memastikan perangkat yang benar untuk dihapus.
Perhatikan folder-folder, periksa permulaan dengan folder nomor 2, saya akan memeriksa ini karena Bus saya adalah 002, dan satu per satu saya telah memeriksa setiap folder yang berisi idVendor dan idProduct yang benar tentang info mouse saya.
Dalam hal ini, saya akan mengambil info dengan perintah ini:
Oke, path /sys/bus/usb/drivers/usb/2-1.3/ cocok dengan mouse info saya! XDDD.
Sudah waktunya untuk menghapus perangkat!
Tancapkan kembali perangkat usb dan berfungsi lagi!
sumber
Jika Anda tahu nama perangkat Anda, skrip python ini akan berfungsi:
sumber