रास्पबेरी पाई के साथ लिनक्स ड्राइवर विकास सीखना


13

मैं कुछ वास्तविक हार्डवेयर डिवाइस के लिए लिनक्स डिवाइस ड्राइवर लिखना चाहूंगा। रास्पबेरी पाई परिधीय एक अच्छा फिट क्या हैं? मूल रूप से मुझे निम्नलिखित की आवश्यकता है:

  1. यह एक शुरुआत के लिए काफी छोटा होना चाहिए (कुछ महीने सबसे कम, कुछ हफ्तों में)।

  2. डेटशीट उपलब्ध होनी चाहिए। पहले मैं USB- ईथरनेट एडेप्टर के बारे में सोच रहा था, लेकिन ऐसा लग रहा है कि इसमें बहुत सीमित डेटाशीट है।

कोई विचार? जीपीआईओ पर काम करने वाले सीरियल कंसोल बनाने जैसा कुछ हो सकता है?


2
लिनक्स ड्राइवर कर्नेल मॉड्यूल हैं, और तकनीकी रूप से उनके पास हार्डवेयर के साथ कुछ भी करने के लिए कुछ भी नहीं है, इसलिए पहली चीज जिसे आप आज़माना चाहते हैं वह है शायद एक चार डिवाइस इंटरफ़ेस - यानी, कुछ ऐसा जो एक चार डिवाइस फ़ाइल प्रदान करता है जो कर सकता है कुछ तुच्छ प्रयोजन के लिए (और खरीद में सामान की तरह) से / या लिखा जा सकता है।
गोल्डीलॉक्स

मैंने वह सब किया, जो ट्यूटोरियल पूरा किया और कर्नेल / ड्राइवर विकास पर किताबें पढ़ने के साथ-साथ छद्म उपकरणों के लिए कर्नेल मॉड्यूल भी लिखे। यह सब अच्छा है, लेकिन अब मैं वास्तविक हार्डवेयर के साथ काम करना चाहता हूं ..
ivan

ग्रेग केएच ने इसे कुछ समय पहले लिखा था (कुछ मायनों में यह शायद थोड़ा पुराना है): linuxjournal.com/article/7353 इसलिए आस-पास सार्वजनिक डेटा शीट वाले USB डिवाइस हैं। उसके पास कुछ रिवर्स इंजीनियरिंग टिप्स हैं (मैं इसे बहुत जटिल थो के साथ नहीं करना चाहूंगा)। GPIO पिन के लिए सामान्‍यत: मुझे लगता है कि आम तौर पर मौजूदा I2C आदि ड्राइवरों का उपयोग करके काम किया जाएगा, लेकिन आप बस इसे अनदेखा कर सकते हैं और कुछ खुद कर सकते हैं।
गोल्डीलॉक्स

जवाबों:


4

जटिल उपकरणों और / या जटिल बसों के साथ इंटरफेस करते समय लेखन ड्राइवरों को सीखना मुश्किल हो सकता है। उसके कारण मैं कुछ सरल और अच्छी तरह से ज्ञात उपकरणों (कर्नेल में अपने ड्राइवरों के मौजूदा कार्यान्वयन की अनदेखी) का उपयोग करने की सलाह दूंगा जैसे कि IIC / SPI उपकरण जो आमतौर पर माइक्रोकंट्रोलर के साथ उपयोग किए जाते हैं। उदाहरण के लिए आप Arduino समुदाय द्वारा "समर्थित" किसी भी उपकरण को पा सकते हैं (जिसका अर्थ है कि इसके लिए एक पुस्तकालय / प्रलेखन है) और रास्पबेरीपी के साथ इसका उपयोग करने का प्रयास करें।

यदि यह पर्याप्त नहीं है या आप बहुत अधिक हार्डवेयर नहीं खरीदना चाहते हैं, तो आप स्वयं बना सकते हैं। बस कुछ माइक्रोकंट्रोलर (जैसे एटमेगा या कुछ और) प्राप्त करें, इसके लिए कुछ डिवाइस बनने के लिए एक प्रोग्राम बनाएं और फिर लिनक्स ड्राइवरों का उपयोग करके इसके साथ इंटरफेस करने का प्रयास करें। इस तरह आप आसानी से ऐसे प्रोग्राम बना सकते हैं जो विभिन्न वर्गों के उपकरणों का अनुकरण करेंगे। और जब से आप अपने "फर्मवेयर" को स्वयं लिखेंगे, यह आपको डिबग समस्याओं में मदद करेगा।

आपको इसके लिए कुछ माइक्रोकंट्रोलर प्रोग्रामिंग कौशल की आवश्यकता है लेकिन Arduino के साथ प्रोग्रामिंग सीखना मुश्किल नहीं है और मेरा मानना ​​है कि यह वैसे भी ड्राइवर प्रोग्रामर के लिए उपयोगी ज्ञान है।


GPIO पिन के माध्यम से सॉफ्टवेयर में धारावाहिक संचार को लागू करने के बारे में कैसे? उदाहरण के लिए सीरियल को पीसी से कनेक्ट करें और कम से कम आउटपुट के लिए कंसोल के लिए प्रयास करें। क्या यह व्यवहार्य है?
ivan

@ivan: मुझे यकीन नहीं है कि अगर मैं सही समझ गया। यदि, धारावाहिक से, आप UART / rs232 से और सॉफ्टवेयर से मतलब रखते हैं, तो इसका मतलब है कि आप इसे कड़वा कर रहे हैं, तो यह समय की कमी के कारण संभव नहीं है। यदि, दूसरी ओर, आप का मतलब है (पुनः) रास्पबेरीपीआईआरएआरटी हार्डवेयर का उपयोग करके लिनक्स सीरियल डिवाइस को लागू करना है, तो यह निश्चित रूप से उल्लेखनीय है। मेरा मानना ​​है कि इस हार्डवेयर के बारे में आवश्यक सभी जानकारी BCM2835 ARM Peripheralsदस्तावेज़ में पाई जा सकती है । लेकिन याद रखें कि इसका उपयोग करने के लिए, आपको पहले कर्नेल में मौजूदा ड्राइवर को अक्षम करना होगा।
Krzysztof Adamski

धन्यवाद, लेकिन क्या आप बिट-बैंग यूएआरटी की असंभवता के बारे में निश्चित हैं? मुझे यह लिंक मिला: ganssle.com/articles/auart.htm इसलिए यह कम बॉड दर के लिए संभावित रूप से उल्लेखनीय लगता है और कम से कम केवल भाग भेजने (जो आसान है) को लागू करने के लिए है।
ivan

@ivan: यह लेख लिनक्स जैसे सामान्य प्रयोजन ऑपरेटिंग सिस्टम वाले सिस्टम के बारे में नहीं लगता है। UART में आपके पास वास्तविक सख्त समय की कमी है जो वास्तविक समय ऑपरेटिंग सिस्टम के बिना मिलना बहुत कठिन है। कहा जा रहा है, कम बॉड्रेट पर ऐसा करना संभव हो सकता है लेकिन यह वास्तव में विश्वसनीय नहीं हो सकता है।
Krzysztof Adamski

ऐसा लगता है कि आप सही हैं: raspberrypi.stackexchange.com/questions/1987/… (हालाँकि वहाँ एक दिलचस्प समाधान है)। आपकी सहायता के लिए एक बार फिर से धन्यवाद।
ivan

3

व्यक्तिगत रूप से मैं एक बहुत ही सरल डिवाइस के साथ शुरू करूँगा, जैसे कि एक या एक से अधिक एलईडी सीधे GPIO पिन से जुड़े।

आप या तो प्लग इन करने के लिए तैयार डिवाइस खरीद सकते हैं, या अपना खुद का तार लगा सकते हैं।

इसका कारण मैं यह बताऊंगा कि डिबगिंग ड्राइवर आम तौर पर अधिक कठिन होता है, फिर एक सामान्य कार्यक्रम, इसलिए आरंभ करने के लिए एक सरल चुनौती उपयोगी है, साथ ही आप उस कोड को अधिक जटिल उपकरणों के लिए डिबग की विधि के रूप में उपयोग कर सकते हैं (स्थिति से बाहर एक GPIO पिन एक आस्टसीलस्कप को संलग्न करने के लिए) जहां समय महत्वपूर्ण है।

यदि यह रुचि है कि यहां LEDBorg के लिए एक कर्नेल ड्राइवर उपलब्ध है , तो स्रोत को नियमित अंतराल पर GPIO पिन ड्राइविंग के लिए एक उचित सरल उदाहरण होना चाहिए।


हाय @PiBorg। क्या आप कुछ संसाधनों को बता सकते हैं जो मुझे एक डिवाइस के लिए सरल ड्राइवर को कोड करने के लिए सीखने में मदद करते हैं जैसे कि एक या एक से अधिक एलईडी सीधे GPIO पिन से जुड़े हैं?
सागर

0

सबसे सरल "डिवाइस" जिसे आप एक हार्डवेयर ड्राइवर के लिए लिख सकते हैं (यदि हार्डवेयर ड्राइवर विकास आपकी चीज़ है) भी एलईडी की तरह सरल हो सकता है (मैंने उद्धरण चिह्नों को जोड़ा क्योंकि तकनीकी रूप से एक एलईडी एक उपकरण नहीं है, लेकिन यह अभी भी एक टुकड़ा है हार्डवेयर) जैसा @PiBorg ने सुझाव दिया है।

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

मन यह भी है कि आपको कर्नेल मॉड्यूल में अतिरिक्त मील खुदाई करने की आवश्यकता नहीं है। बेशक अगर आप ऐसा करना चाहते हैं कि कोई आपको रोक नहीं रहा है। :)

यहां एक निष्क्रिय इंफ्रारेड सेंसर लगाने का एक उदाहरण है (मैं जल्द ही इसका परीक्षण करने जा रहा हूं जब मेरा पीआईआर वितरित हो जाएगा: 3)। आप इसे ले सकते हैं और लिनक्स कर्नेल की दुनिया में गहराई से खुदाई शुरू कर सकते हैं, यह देखने के लिए कि आप उदाहरण के लिए एक कर्नेल ड्राइवर कैसे बना सकते हैं, जो पीआईआर के साथ काम करता है।

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