2011-09-03 7 views
6

के लिए प्रतिस्थापन मैं इंटरफ़ेस डिज़ाइन के लिए दिशानिर्देश के रूप में POSIX का उपयोग करके छोटे माइक्रोक्रोनरोलर अनुप्रयोगों के लिए डिवाइस ड्राइवर I/O मॉडल विकसित कर रहा हूं। 2008 सूचियों ioctl() और <stropts.h> रूप अप्रचलित: उदाहरण के UART बॉड दर, I2C दास पता, आदिioctl() फ़ंक्शन

मैं दिखाई देता है तो POSIX के लिए - मैं ड्राइवर/हार्डवेयर मानकों को नियंत्रित करने का एक साधन के रूप ioctl() कार्यान्वित किया। डिवाइस ड्राइवर के साथ संवाद करने के लिए अनुशंसित वैकल्पिक तंत्र क्या है?

उत्तर

8

पॉज़िक्स केवल ioctl() कार्यक्षमता के बहुत सीमित सबसेट को परिभाषित करता है - जो स्ट्रीम्स से संबंधित है। चूंकि स्ट्रीम्स सुविधा अश्लील है, इसके लिए इंटरफ़ेस भी POSIX में अश्लील है।

हालांकि, ioctl() 'हमेशा के लिए' यूनिक्स का हिस्सा रहा है (यह निश्चित रूप से 7 वें संस्करण यूनिक्स में था, और मैं सहनशील रूप से निश्चित हूं कि यह तब भी नया नहीं था)। यह खुले होने के बाद डिवाइस ड्राइवरों को नियंत्रित करने का 'तरीका' है। एकमात्र मुद्दा यह है कि इस तरह के इंटरफेस और नियंत्रण मानकीकृत नहीं हैं।

आप टर्मिनल को नियंत्रित करने के लिए लिखे गए कार्यों के सेट के लिए <termios.h> फ़ाइलों को देख सकते हैं। मुझे उम्मीद है कि ठेठ कार्यान्वयन ioctl() या अन्य समान विशिष्ट तंत्र का उपयोग करता है, लेकिन जब इसे मानकीकृत किया गया था तो इंटरफ़ेस सामान्य बना दिया गया था (<termios.h> इंटरफ़ेस किसी भी पिछले इंटरफ़ेस, या तो 7 वें संस्करण या सिस्टम III या किसी अन्य इंटरफ़ेस के समान नहीं है)। यदि आप चाहते थे, तो आप अपने ioctl() इंटरफ़ेस के ऊपर मानक फ़ंक्शन लिख सकते हैं जो आपके उपयोगकर्ता उपयोग करेंगे; आप उन कार्यों को अपने ioctl() इंटरफ़ेस पर कॉल करने के लिए लागू करेंगे।

तो, ioctl() दूर नहीं जा रहा है; डिवाइस ड्राइवरों को नियंत्रित करने का यह सही तरीका है। पॉज़िक्स का थोड़ा अलग एजेंडा है, यह सब कुछ है।

+4

इस पर विस्तार करने के लिए, 'ioctl' से बाहर POSIX का चरण यह इंगित नहीं करता है कि' ioctl' का उपयोग नहीं किया जाना चाहिए, बल्कि POSIX के बजाय हार्डवेयर उपकरणों को कैसे काम करना चाहिए यह निर्दिष्ट करने में रुचि नहीं है। चूंकि 'ioctl' का उपयोग स्ट्रीम्स के साथ भी किया जाता था, इसलिए पॉज़िक्स पहले निर्दिष्ट किया गया था * 'ioctl' (डिवाइस के साथ कोई अन्य उपयोग नहीं) के उस पहलू *, लेकिन अब स्ट्रीम्स अजीब हैं, निर्दिष्ट करने के लिए कुछ भी नहीं बचा है। –

+0

धन्यवाद - हाँ, यह बिल्कुल सही है जो मेरा मतलब था। –

+3

ioctl() वापस रास्ता जाता है ... व्यक्तिगत रूप से मैंने इसे 1 9 80 के दशक में उपयोग किया। जबकि 1 9 83 सिस्टम वी मैनुअल मैंने अभी भी ioctl() का वर्णन किया है, इसका उपयोग करने के तरीके पर वास्तविक गंदगी एचएच फाइलों और तकनीकी मैनुअल में मिली थी। मैं आपको यह सुनिश्चित करने के लिए डिवाइस के लिए .h फ़ाइल में अपने ioctls पर सभी विवरण डालने का आग्रह करता हूं कि यह हमेशा डेवलपर्स के लिए उपलब्ध है। – Gilbert

संबंधित मुद्दे