ইউএসবি-এইচডি ডিভাইসের জন্য লিনাক্স কার্নেল ড্রাইভার বাইন্ড / আনবাইন্ড ইন্টারফেসটি কীভাবে ব্যবহার করবেন?


26

প্রথম পটভূমি। আমি লজিটেক গেম-প্যানেল ডিভাইসের জন্য ড্রাইভার বিকাশ করছি। এটির স্ক্রিনযুক্ত এটি একটি কীবোর্ড। ড্রাইভার দুর্দান্তভাবে কাজ করছে তবে ডিফল্টরূপে ডিভাইসটি এইচআইডি দ্বারা পরিচালিত হয়। আমার ড্রাইভারের আগে এইচআইডি ডিভাইসটি ধরে না নেওয়ার জন্য, আমি এটিকে hid-core.c এ ব্ল্যাকলিস্ট করতে পারি। এটি কাজ করে তবে সবচেয়ে ভাল সমাধান নয় কারণ আমি বেশ কয়েকটি ব্যক্তির সাথে কাজ করছি এবং আমাদের সকলকে আমাদের এইচআইডি মডিউলটি পঁচিয়ে রাখতে হবে যা একটি নৃত্যকেন্দ্র হয়ে উঠছে, বিশেষত এটি প্রায়শই ইনি্রামফ এবং এর মতো পুনর্নির্মাণের সাথে জড়িত।

আমি এই সমস্যা সম্পর্কে কিছু গবেষণা করেছি এবং আমি এই মেইলিং তালিকা পোস্টটি পেয়েছি , যা শেষ পর্যন্ত আমাকে এলডব্লিউএন-এর এই নিবন্ধে নিয়ে গেছে । এটি রানটাইমের সময় নির্দিষ্ট ড্রাইভারের সাথে ডিভাইসগুলি বাঁধার জন্য একটি প্রক্রিয়া বর্ণনা করে। এটি ঠিক আমার যা প্রয়োজন তা মনে হচ্ছে।

সুতরাং, আমি এটি চেষ্টা করেছিলাম। আমি এইচআইডি থেকে কীবোর্ডটি আনবাইন্ড করতে সক্ষম হয়েছি। এটি কাজ করেছে এবং প্রত্যাশার মতো আমি এটিতে আর টাইপ করতে পারি না। তবে আমি যখন এটি আমাদের ড্রাইভারকে আবদ্ধ করার চেষ্টা করেছি তখন আমি "ত্রুটি: এই জাতীয় কোনও ডিভাইস" পাইনি এবং অপারেশন ব্যর্থ হয়।

সুতরাং আমার প্রশ্নটি হল: আপনি যখন হিড-কোরে কোনও এইচআইডি ডিভাইসটিকে কালো তালিকাভুক্ত করেন এবং নিজের ড্রাইভার সরবরাহ করেন তখন কী ঘটে যায় তার প্রতিলিপি করতে আমি কীভাবে কার্নেল বাইন্ড / আনবাইন্ড অপারেশনগুলি ব্যবহার করব? - যা - হিড-কোর.প্যাচটি সর্বদা প্যাচ করার প্রয়োজন প্রতিস্থাপন করতে হবে?

আমাদের ড্রাইভারের উত্সটি এখানে: https://github.com/ali1234/lg4l

উত্তর:


27

ঠিক আছে, দেখা যাচ্ছে উত্তরটি আমাকে মুখে ঘুরপাক খাচ্ছে।

প্রথমত, আমাদের কাস্টম ড্রাইভার ব্যবহার করা, বা জেনেরিক যা সাধারণভাবে ডিভাইসটি গ্রহণ করে তা ব্যবহার করা, এটি এখনও চূড়ান্তভাবে এইচআইডি দ্বারা নিয়ন্ত্রিত, এবং ইউএসবি নয়।

পূর্বে আমি এটিকে এইচআইডি থেকে আবদ্ধ করার চেষ্টা করেছি যা যাবার উপায় নয়। এইচআইডি-র সাব-ড্রাইভার রয়েছে, যেগুলির এমন ডিভাইসগুলি গ্রহণ করে যার কোনও বিশেষ চালক নেই তাকে জেনেরিক-ইউএসবি বলা হয়। Hid-g19 এর সাথে আবদ্ধ হওয়ার আগে আমার এটি বন্ধন করা দরকার। এছাড়াও, আমার HID ঠিকানাটি ব্যবহার করা দরকার যা দেখতে "0003: 046 ডি: c229.0036" এবং "1-1.1: 1.1" দেখাচ্ছে এমন ইউএসবি ঠিকানা নয়।

রিব্যান্ডিংয়ের আগে আমি এটি ডেমসগে দেখব:

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

যেমনটি আমি বলেছিলাম, আমাকে মুখে তাকাচ্ছেন, কারণ ডিভাইসটি যখন আবদ্ধ থাকে তখন তথ্য দুটি মূল টুকরো হ'ল লাইনে থাকা প্রথম দুটি জিনিস ...


আপনি কি আপনার ড্রাইভারটিতে উল্লেখ করতে পারেন যে বিক্রেতা / পণ্যটি আপনার ড্রাইভারের সাথে সামঞ্জস্যপূর্ণ? অথবা "বাঁধাই" কেবল বিষয়টি জোর করে? আমি এমন একটি ডিভাইসের জন্য "এমন কোনও ডিভাইস" পাচ্ছি যা কালো তালিকাভুক্ত করা হয়েছে তবে আমি এটিকে আবদ্ধ হতে বাধ্য করতে চাই, এবং আমি কালো তালিকাভুক্তিটিকে কেবল "স্বয়ংক্রিয় বাঁধাই প্রতিরোধ" ভাবনা বলি না বরং "বাঁধাই বাঁধা" রোধ করি কি "জিনিস ধরণের।
dmansfield

বাঁধাই এটিকে জোর করে, তাই চালকের উত্সে আইডি দাবি করার প্রয়োজন নেই। আপনি যদি এটি স্বয়ংক্রিয়ভাবে লোড করতে চান তবে এটি।
ali1234

দুটি কারণে আমার সমস্যা হচ্ছিল: প্রথমত - ডিভাইসটি কার্নেলের hid_ignore_list এ তালিকাভুক্ত করা হয়েছে এবং সুতরাং এটি "hid" বাউন্ড ন্যামেটার কী পাবে না। আমাকে "usbhid.quirks = 0x0b0e: 0x0412: 0x40000000" যোগ করতে হবে কার্নেল কমান্ড লাইনে এবং পুনরায় বুট করতে। 0x40000000 পতাকাটি "উপেক্ষা করবেন না"। দ্বিতীয়ত, "0003: 046D: C229.0036" আইডিটির শেষ অংশটি '0036'। এটি কী উপস্থাপন করে? নিশ্চিত না. এটির সন্ধান করার একমাত্র উপায় হ'ল এটি ইতিমধ্যে আবদ্ধ হওয়া, তারপরে এটি আবদ্ধ করুন এবং এটি পুনরায় ফিরিয়ে দিন।
dmansfield

আপনি কি স্বয়ংক্রিয়ভাবে ফেরত দেওয়ার কোনও উপায় খুঁজে পেয়েছেন?
ভ্লাদিয়াস

আমার নিজের অটো-রিবন্ডিং সমাধান যুক্ত হয়েছে: unix.stackexchange.com/a/475277/96686
ভ্লাদিয়াস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.