USB-HID उपकरणों के लिए लिनक्स कर्नेल ड्राइवर बाइंड / अनबाइंड इंटरफ़ेस का उपयोग कैसे करें?


26

पहली पृष्ठभूमि। मैं लॉजिटेक गेम-पैनल डिवाइस के लिए ड्राइवर विकसित कर रहा हूं। यह एक स्क्रीन पर एक कीबोर्ड है। ड्राइवर अच्छी तरह से काम कर रहा है लेकिन डिफ़ॉल्ट रूप से डिवाइस को HID द्वारा नियंत्रित किया जाता है। अपने ड्राइवर से पहले HID को डिवाइस पर ले जाने से रोकने के लिए, मैं इसे hid-core.c में ब्लैकलिस्ट कर सकता हूं। यह काम करता है लेकिन सबसे अच्छा समाधान नहीं है जैसा कि मैं कई लोगों के साथ काम कर रहा हूं और हम सभी को अपने HID मॉड्यूल को पैच करते रहना होगा जो कि एक कोर बन रहा है, विशेष रूप से क्योंकि इसमें अक्सर इनट्रामर्फ और ऐसे पुनर्निर्माण होते हैं।

मैंने इस समस्या पर कुछ शोध किया और मुझे यह मेलिंग सूची पोस्ट मिली , जो अंततः मुझे LWN पर इस लेख में ले गई । यह रनटाइम पर विशिष्ट ड्राइवरों के लिए उपकरणों को बाध्य करने के लिए एक तंत्र का वर्णन करता है। यह वैसा ही लगता है जैसा मुझे चाहिए।

इसलिए, मैंने इसकी कोशिश की। मैं HID से कीबोर्ड को हटाने में सक्षम था। यह काम किया और उम्मीद के मुताबिक मैं अब इस पर टाइप नहीं कर सकता। लेकिन जब मैंने इसे अपने ड्राइवर को बांधने की कोशिश की तो मुझे "त्रुटि: कोई ऐसा उपकरण नहीं मिला" और ऑपरेशन विफल हो गया।

तो मेरा सवाल यह है कि मैं कर्नेल बाइंड / अनबाइंड ऑपरेशंस का उपयोग कैसे करूं, यह बताने के लिए कि क्या होता है जब आप एक HID डिवाइस को hid-core में ब्लैकलिस्ट करते हैं और अपने खुद के ड्राइवर को सप्लाई करते हैं? - वह है - हर समय hid-core.c पैच करने की आवश्यकता को बदलना?

हमारे ड्राइवर का स्रोत यहां है: https://github.com/ali1234/lg4l

जवाबों:


27

ठीक है, पता चला है कि जवाब मुझे चेहरे पर घूर रहा था।

सबसे पहले, चाहे हमारे कस्टम ड्राइवर का उपयोग कर रहे हों, या सामान्य रूप से डिवाइस को संभालने वाले जेनेरिक का उपयोग कर रहे हों, फिर भी यह सब अंतत: HID द्वारा नियंत्रित होता है, और USB से नहीं।

पहले मैंने इसे HID से हटाने की कोशिश की थी, जो जाने का रास्ता नहीं है। HID में उप-ड्राइवर होते हैं, वह उपकरण जो ऐसे उपकरणों को लेता है जिनके पास कोई विशेष ड्राइवर नहीं है, उन्हें जेनेरिक-यूएसबी कहा जाता है। यह वही है जिसे मुझे छिपाने के लिए, hid-g19 के लिए बाध्य करने से पहले आवश्यक था। इसके अलावा, मुझे "0003: 046d: c229.0036" की तरह दिखने वाले पते का उपयोग करने की आवश्यकता है, न कि USB पते की जो "1-1.1: 1.1" दिखता है।

इसलिए रिबॉन्डिंग करने से पहले मैं इसे dmesg पर देखूंगा:

generic-usb 0003:046D:C229.0036: input,hiddev0,hidraw4: USB HID v1.11 Keypad [Logitech G19 Gaming Keyboard] on usb-0000:00:13.2-3.2/input1

तब मैं करता हूं:

echo -n "0003:046D:C229.0036" > /sys/bus/hid/drivers/generic-usb/unbind
echo -n "0003:046D:C229.0036" > /sys/bus/hid/drivers/hid-g19/bind

और फिर मैं dmesg पर देखता हूं:

hid-g19 0003:046D:C229.0036: input,hiddev0,hidraw4: USB HID v1.11 Keypad [Logitech G19 Gaming Keyboard] on usb-0000:00:13.2-3.2/input1

तो जैसे मैंने कहा, मुझे चेहरे पर घूर रहे हैं, क्योंकि जानकारी के दो प्रमुख टुकड़े लाइन पर पहली दो चीजें हैं जब डिवाइस काटता है ...


क्या आपको अपने ड्राइवर में निर्दिष्ट करना होगा कि वह विक्रेता / उत्पाद आपके ड्राइवर के साथ संगत है? या "बाइंड" केवल मुद्दे को मजबूर करता है। मुझे एक ऐसे उपकरण के लिए "कोई ऐसी डिवाइस नहीं" मिल रही है जिसे ब्लैकलिस्ट किया गया हो, लेकिन मैं इसे बाध्य होने के लिए बाध्य करना चाहता हूं, और मैं ब्लैक लिस्ट कर रहा हूं, यह केवल "स्वचालित बंधन को रोकने" के बारे में नहीं सोचता है, लेकिन एक "बाध्यकारी घुमंतू को रोकना" है। क्या बात है "।
डेमन्सफील्ड

बाइंड इसे बाध्य करता है, इसलिए चालक स्रोत में आईडी का दावा करना आवश्यक नहीं है। यदि आप इसे स्वचालित रूप से लोड करना चाहते हैं, तो यह है।
अली 1234

दो कारणों से मुझे परेशानी हो रही थी: पहली - डिवाइस को कर्नेल के hid_ignore_list में सूचीबद्ध किया गया है और इसलिए इसे "हाइड" बाउंड नॉमर्टर नहीं मिलेगा। मुझे "usbhid.quirks = 0x0b0e: 0x0412: 0x40000000" को कर्नेल कमांड लाइन और रिबूट में जोड़ना था। झंडा 0x40000000 "अनदेखा न करें" है। दूसरा, आईडी का अंतिम भाग "0003: 046D: C229.0036" '0036' है। यह क्या दर्शाता है? निश्चित नहीं। इसे खोजने का एकमात्र तरीका (ऐसा लगता है) यह पहले से ही बाध्य होना चाहिए, फिर इसे अनबाइंड करें और इसे रिबंड करें।
dmansfield

क्या आपको स्वचालित रूप से विद्रोह करने का रास्ता मिला?
व्लाडियस

अपने स्वयं के रिबॉन्डिंग
व्लादिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.