2010-10-15 18 views
22

Tôi đang viết một ổ đĩa thiết bị USB cho Linux. nó là một cần điều khiển. mỗi lần cắm nó vào, linux tải một trình điều khiển giấu. có cách nào để nói với Linux để tải của tôi khi tôi cắm nó vào? hoặc ít nhất không tải cái mặc định?Làm cách nào để gắn trình điều khiển với thiết bị USB?

Tôi có thể lặp lại id trong unbind của trình điều khiển mặc định và echo nó trong ràng buộc của trình điều khiển của tôi; nhưng tôi muốn một cái gì đó tự động hơn .. cảm ơn

+0

"Linux lad a hid driver" nghĩa là gì? –

+0

@Marcelo Cantos: Tôi nghĩ anh ấy muốn viết "Linux tải trình điều khiển HID." HID = Thiết bị giao diện người. –

+0

Nếu bạn có toàn quyền truy cập vào cây nguồn hạt nhân, bạn có thể thêm trình điều khiển vào mảng 'hid_have_special_driver' trong' drivers/hid/hid-core.c'. Điều đó sẽ khiến 'hid-generic' bỏ qua thiết bị. Nhưng tôi rất hy vọng rằng có một giải pháp có thể làm việc mà không sửa đổi các mô-đun hiện có, và do đó sẽ phù hợp với các mô-đun bổ sung được thêm thông qua DKMS hoặc tương tự. Thật không may có vẻ như không có 'usbhid' quirk cho trường hợp sử dụng này. – MvG

Trả lời

10

riêng USB lái xe tham gia được ưu tiên hơn usbhid

Nếu bạn muốn ngăn chặn liên kết với các tài xế usbhid, bạn có thể sử dụng HID_QUIRK_IGNORE (= 4) thiết lập của nó. Để tuân thủ ví dụ Karl Bielefeldt được sử dụng, hãy thêm

options usbhid quirks=0x15c2:0x0043:0x04 

vào một số /etc/modprobe.d/*.conf tệp (và có thể tạo lại initramfs của bạn). Điều đó sẽ cho biết hid-core để bỏ qua thiết bị đó. Vì vậy, usbhid sẽ có một cái nhìn vào nó, nhưng để lại nó cho một số trình điều khiển khác để thay thế.

riêng tài xế HID dùng ưu tiên hơn HID-generic

Tuy nhiên, nếu người lái xe khác của bạn là một trình điều khiển HID không phải là một trình điều khiển USB, sau đó bạn cầnusbhid để ràng buộc vào người lái xe vào mức độ USB, và bạn cần trình điều khiển HID của riêng bạn để được ưu tiên hơn hid-generic. Đây là vấn đề tôi đang phải đối mặt với bản thân mình, và tôi chưa tìm được giải pháp nào, không được liên kết và khôi phục lại thiết bị sau này.

4

Here's một chủ đề có bản sửa lỗi cho một vấn đề tương tự. Nói tóm lại, bạn thêm một cái gì đó như sau để một trong /etc/udev/rules.d tập tin của bạn:

SYSFS{idVendor}=="15c2", SYSFS{idProduct}=="0043", MODE="0666", PROGRAM="/bin/sh -c 'echo -n $id:1.0 >/sys/bus/usb/drivers/usbhid/unbind;\ 
echo -n $id:1.1 >/sys/bus/usb/drivers/usbhid/unbind'" 
1

http://lwn.net/Articles/143397/ rất giống với câu trả lời ở trên, có lẽ một số chi tiết.

+0

Câu trả lời chỉ liên kết được khuyến khích trên StackOverflow. Câu trả lời chính nó nên chứa các thông tin hữu ích cần thiết. Liên kết tốt như tài liệu tham khảo. –