लिबासब कर्नेल सामान तक कैसे पहुँचता है?


10

मैं जो कुछ समझता हूं:

  • सामान्यतया, एक ड्राइवर कर्नेल स्थान में चलता है और इसे उपयोगकर्ता स्थान से बुलाया जा सकता है।
  • केवल कर्नेल स्पेस में कोड usb को निम्न स्तर की चीजें कह सकते हैं / ioctl
  • libusb एक पुस्तकालय है, इसलिए यह उपयोगकर्ता स्थान में संकलित और चलेगा

तो libusbनिम्न स्तर यूएसबी कैसे प्राप्त करता है ?

जवाबों:


10

Libusb उसी तरह से USB उपकरणों के साथ बातचीत करने के लिए एक पुस्तकालय है जो शाप पाठ टर्मिनलों के साथ बातचीत करने के लिए एक पुस्तकालय है, ALSA (अधिक सटीक रूप से इसका लिबासाउंड घटक) ऑडी उपकरणों के साथ बातचीत करने के लिए एक पुस्तकालय है, आदि। कर्नेल हार्डवेयर इंटरैक्शन को संभालता है। यह प्रदान करता है डिवाइस फ़ाइलों कि अनुप्रयोगों के माध्यम से, हार्डवेयर के साथ बातचीत करने के लिए खोल सकते हैं read, writeऔर सिस्टम कॉलioctl

ioctl एक सिस्टम कॉल है: यह अनुप्रयोगों (उपयोगकर्ता-स्तरीय कोड) को उन अनुरोधों को जारी करने की अनुमति देता है जो कर्नेल द्वारा प्रक्रियाएं हैं।

लिबस एप्लिकेशन को कॉलबैक फ़ंक्शन को पंजीकृत करने की अनुमति देता है जो तब निष्पादित होते हैं जब डिवाइस में रिपोर्ट करने के लिए कुछ होता है। यहाँ हुड के नीचे सूचना प्रवाह का एक संक्षिप्त अवलोकन है:

  • बस पर विद्युत संकेत USB नियंत्रक पर एक घटना को ट्रिगर करता है।
  • USB नियंत्रक मुख्य प्रोसेसर पर एक बाधा संकेत उठाता है।
  • प्रोसेसर ऑपरेटिंग सिस्टम कर्नेल में इंटरप्ट हैंडलर को निष्पादित करता है।
  • कर्नेल नोटिस करता है कि एक प्रक्रिया वर्तमान में डिवाइस फ़ाइल पर एक अवरुद्ध read, writeया ioctlसिस्टम कॉल में है और उस सिस्टम कॉल को वापस करने का कारण बनती है।
  • उपयोगकर्ता भूमि प्रक्रिया में, जब सिस्टम कॉल करता है, तो लाइब्रेरी कोड निष्पादित होता है।
  • लाइब्रेरी कोड एप्लिकेशन प्रोग्रामर द्वारा पंजीकृत कॉलबैक फ़ंक्शन को निष्पादित करता है।

इसलिए usb डिवाइस के लिए डिवाइस ड्राइवर लिखने की आवश्यकता नहीं है? (जब तक कि शायद गति अनुकूलन के लिए न हो)
थॉमस

@ थोमस आपको एक कर्नेल ड्राइवर लिखने की आवश्यकता है यदि आप एक ऐसे फ्रेम में प्लग करना चाहते हैं जो ट्रांसपोर्ट-इंडिपेंडेंट हो: कीबोर्ड, स्टोरेज, इथर, आदि, अन्यथा, मुझे लगता है कि आपको केवल एक ड्राइवर की आवश्यकता होती है यदि उपयोगकर्तालैंड प्रोग्राम की विलंबता बहुत अधिक है।
गिल्स एसओ- बुराई को रोकना '

यदि कोई डिवाइस कंप्यूटर द्वारा मान्यता प्राप्त नहीं है (इसके लिए कोई ड्राइवर नहीं है), तब libusbभी क्या वह इसे एक्सेस कर पाएगा?
थॉमस

@ थोमस मैं नहीं जानता कि क्या लीबस यूएसबी प्रोटोकॉल के सभी पहलुओं का सामना कर सकता है, लेकिन सिद्धांत रूप में, हाँ। एक उपयोगकर्ता कार्यक्रम किसी भी RS232 सीरियल डिवाइस के माध्यम से संवाद कर सकता है /dev/ttyS*। USB एक ही सिद्धांत है, केवल तेज और अधिक जटिल।
गिल्स एसओ- बुराई को रोकना

3

लिनक्स दो रिंग रिंग का उपयोग करता है 0 को कर्नेल-स्तर कहा जाता है, रिंग 3 को उपयोगकर्ता-स्तर कहा जाता है। उपयोगकर्ता से कर्नेल तक का कनेक्शन किया जाता है (जैसा कि यह पहले ही कहा गया था) syscalls के माध्यम से। उनके बीच पुस्तकालय हैं, जैसा कि उपयोगकर्ताभूमि से देखा जाता है। अतः कर्नेल के लिए सबसे निम्न स्तर का उपयोग पुस्तकालयों में लागू किया जाता है, स्थिरता, सुरक्षा, सिंक्रनाइज़ेशन, रिक्ति को बचाने और इसी तरह के कारणों के लिए। कर्नेल-चालक यूजरलैंड को अलग-अलग इंटरफेस प्रदान करता है: (ioctl, sysfs, सॉकेट्स, कैरेक्टर और ब्लॉक डिवाइस वगैरह) यूजर स्पेस इंटरफेस । इसलिए यदि आप चाहते हैं, तो आप पुस्तकालयों को छोड़ कर कर्नेल चालक तक अपनी पहुँच को लागू कर सकते हैं, या बहुत आसान स्थैतिक लिंक किए गए पुस्तकालयों के साथ अपने बाइनरी को संकलित कर सकते हैं।

एक अच्छा प्रारंभिक बिंदु libusb स्रोतों को पढ़ना है, वे अच्छी तरह से प्रलेखित हैं।


0

यह कर्नेल ( ) द्वारा तैयार syscalls (2) और डिवाइस फ़ाइलों का उपयोग करता है/dev/bus/usb/*


तो सब कुछ काम करता है जैसे कि कर्नेल अज्ञात उपकरणों के लिए एक विशेष ड्राइवर बनाता है जो पढ़ता और लिखता है? हमें इंटरप्ट और इतने पर कैसे सूचित किया जाता है?
थॉमस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.