लिनक्स कर्नेल ड्रॉपिंग कस्टम कीबोर्ड स्कैन कोड


16

मेरे पास एक विंटेज आईबीएम 122 कुंजी मॉडल एम कीबोर्ड है जिसे मैं आधुनिक कंप्यूटर पर उपयोग के लिए एडाप्ट कर रहा हूं। मैं एक Teensy 2.0 का उपयोग कर रहा हूँ एन्कोडिंग करने के लिए और चीजों के USB पक्ष को संभालने के लिए। मैंने विनम्र हैकर कीबोर्ड प्रोजेक्ट ( https://github.com/humblehacker/keyboard ) से फर्मवेयर उधार लिया और मैंने बिल्ड कॉन्फ़िगरेशन में अतिरिक्त कुंजियाँ जोड़ीं। अब तक सब ठीक है।

सभी "नियमित" चाबियाँ काम करती हैं, लेकिन कर्नेल अतिरिक्त कुंजी ( F13- F24, आदि) को छोड़ता हुआ प्रतीत होता है ।

रनिंग /lib/udev/keymap -i input/event0सभी सामान्य कुंजी के स्कैन कोड दिखाता है, लेकिन अतिरिक्त कुंजी के लिए कुछ भी नहीं।

wiresharkपैकेट पर कब्जा करने के लिए USB पोर्ट पर चलना दिखाता है कि कीबोर्ड IS स्कैन कोड भेज रहा है, लेकिन ऐसा लगता है कि कर्नेल सिर्फ सिद्धांत पर उन्हें गिरा रहा है।

मुझे ऐसा लगता है कि कर्नेल ड्राइवरों में यह कुछ ऐसा है जो केवल स्कैन कोड प्रदान नहीं कर रहा है जो इसकी उम्मीद नहीं करता है।

मुझे लगता है कि .hकर्नेल स्रोत में कुछ फ़ाइल में "मास्टर" कुंजी मैप का कुछ प्रकार होगा, लेकिन अभी तक, मैं इसे खोजने के अपने प्रयासों में सफल नहीं हुआ हूं।

यह ध्यान देने योग्य है कि मैं एक्स में अतिरिक्त कुंजियों को मैप करने के बारे में नहीं पूछ रहा हूं, जैसे कि मुझसे पहले कई अन्य। यह एक निम्न स्तर है, जाहिरा तौर पर कर्नेल संबंधी, समस्या। उस पल के लिए मान लें कि मैं एक्स का उपयोग बिल्कुल नहीं करूंगा। स्कैन कोड के लिए मुझे क्या चाहिए, जब मैं दौड़ता /lib/udev/keymap -iहूं, तो मैं वहां से बाकी काम कर सकता हूं।


मुझे पता है कि यह मदद नहीं करता है: लेकिन आप टेनेसी का उपयोग क्यों कर रहे हैं? उस कीबोर्ड को सीधे PS2 / USB एडॉप्टर के साथ काम करना चाहिए।
गोल्डीलॉक्स

कीबोर्ड एक पुराने IBM टर्मिनल से आया है, यह PS / 2 संगत प्रोटोकॉल का उपयोग नहीं करता है।
user2543941

वाह। यह वास्तव में हो सकता है कि ड्राइवर ईवेंट को पास नहीं कर रहा है ( यहां अंतिम भाग पर एक नज़र डालें )। आप के evtestबजाय की कोशिश कर सकते हैं /lib/udev/keymap -i, अगर यह किसी भी अलग से बाहर आ जाएगा।
गोल्डिलॉक्स

1
जब अतिरिक्त कुंजियों का उपयोग किया जाता है तो स्पष्ट रूप से कुछ भी नहीं दिखता है।
user2543941

1
लगता है शायद अगर आप उन चाबियों का उपयोग करना चाहते हैं, तो आपकी परियोजना बस थोड़ी बड़ी हो गई, योग्य। कीबोर्ड ड्राइवर लिखने के बारे में सबसे मुश्किल बात एपीआई सीखना होगा, अन्यथा वे इतने जटिल नहीं लगते हैं। मैंने कुछ समय में कोई कर्नेल सामान नहीं किया है, लेकिन यह: LDD3 अभी भी 3.x के लिए मान्य है, मुझे लगता है।
गोल्डीलॉक्स

जवाबों:


1

कर्नेल अजीब स्कैन कोड देखता है और उन्हें छोड़ देता है। मैं उन स्कैन कोड मूल्यों को प्राप्त करने की कोशिश करूंगा और फिर हार्डवेयर डेटाबेस इंडेक्स को अपडेट करूंगा। तो संक्षेप में यह योजना है:

  • dmesg आउटपुट से कोड प्राप्त करें - अज्ञात कीकोड को दबाने पर dmesg को कुछ इस तरह आउटपुट करना चाहिए:

    Unknown key pressed (translated set 2, code 0xa0 on isa0060/serio0)
    

a0 कोड मूल्य होने के नाते।

  • कस्टम कीकोड मानचित्रण फ़ाइल बनाएँ। उदाहरण और सहायता डिफ़ॉल्ट फ़ाइल में हैं
    ( /usr/lib/udev/hwdb.d/60-keyboard.hwdbआर्क के लिए, यह अन्य वितरणों में भिन्न हो सकती है)।

  • कमांड चलाकर हार्डवेयर डेटाबेस को अपडेट और ट्रिगर करें:

    > udevadm hwdb --update
    > udevadm trigger /dev/input/eventXX
    

जहां eventXXआपके कीबोर्ड से मेल खाती है (आप इसे चलाकर प्राप्त कर सकते हैं evtest)। आप ट्रिगर करने के बजाय रिबूट भी कर सकते हैं।

में देखो आर्क विकी और अधिक विस्तृत विवरण के लिए डिफ़ॉल्ट कीकोड मैपिंग फ़ाइल (या अपने वितरण दस्तावेज में अगर यह नहीं आर्क है)।

यह विश्वसनीय और सरल विधि है, कर्नेल स्तर पर मैपिंग करता है इसलिए जो भी प्रदर्शन सर्वर, DE आदि काम करता है।


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