Saya memiliki peluncur roket USB yang ingin saya coba libusb
. Namun, libusb tidak dapat mengklaim antarmuka; mungkin karena keluaran dari usb-devices
daftar 'usbhid' sebagai driver untuk perangkat.
Dari membaca di internet, saya hanya sampai pada kesimpulan bahwa saya perlu melepaskan driver ini dari perangkat sehingga saya dapat menggunakannya dengan libusb. Namun, saya belum menemukan satu cara pasti untuk melakukan itu, hanya beberapa ide dan laporan bug yang berbeda.
Jadi, apakah ada cara untuk melepaskan driver usbhid dari perangkat yang akan relevan dengan kernel dan alat-alat yang disertakan dengan Ubuntu 11.04?
EDIT:
Saya mencoba membuat file
/etc/udev/rules.d/10-usbhid.rules
dan menulis yang berikut ini:
ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0701", OPTIONS=="ignore_device"
Menyimpan, lalu me-reboot. File tersebut masih ada, tetapi tampaknya tidak berfungsi sama sekali.
EDIT:
Oke, saya coba ini:
sudo -i
echo -n "0003:0A81:0701.0006" > /sys/bus/hid/drivers/generic-usb/unbind
Setelah itu, navigasikan ke /sys/bus/hid/devices/0003♥A81/0701.0006 dan ls menghasilkan:
drwxr-xr-x 2 root root 0 2011-05-29 15:46 power
lrwxrwxrwx 1 root root 0 2011-05-29 13:19 subsystem -> ../../../../../../../../../bus/hid
-rw-r--r-- 1 root root 4096 2011-05-29 13:19 uevent
Itu tidak lagi mencantumkan symlink "driver" seperti sebelumnya, jadi saya akan berasumsi bahwa itu tidak mengikatnya. Namun, semua bukti tampaknya menunjukkan bahwa pengemudi masih usbhid. Misalnya usb-devices menghasilkan:
T: Bus=02 Lev=03 Prnt=07 Port=00 Cnt=01 Dev#= 9 Spd=1.5 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0a81 ProdID=0701 Rev=00.01
S: Manufacturer=Dream Link
S: Product=USB Missile Launcher v1.0
C: #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
libusb masih mengembalikan -1 pada usb_claim_interface () ....
Saya pikir aturan udev berikut akan melakukan apa yang Anda inginkan:
Pengguna Anda harus menjadi anggota grup plugdev untuk mendapatkan akses. Tidak perlu dijalankan sebagai root dengan aturan ini di tempat.
sumber
Bagi saya (Debian sid / stretch),
$id
atribut udev kosong ketika saya mencolokkan perangkat USB saya. Ini$kernel
berisi string yang diperlukan untuk dilewatkan ke USBHID yang tidak mengikat.Berikut adalah aturan udev yang saya gunakan:
Ganti idVendor dan idProduct dengan ID perangkat Anda, tentu saja.
Untuk menulis aturan semacam ini, perintah berikut akan menunjukkan semua atribut yang dapat Anda gunakan (untuk perangkat USB yang diberikan):
Akhirnya,
$id
dan$kernel
bukan variabel shell; mereka digantikan oleh parser udev. Untuk daftar lengkap variabel-variabel ini,man udev
dan cari%k
.sumber