जवाबों:
मेटा-उत्तर: लिनक्स कर्नेल के लिए होने वाला सभी कच्चा सामान lkml (लिनक्स कर्नेल मेलिंग सूची) से होकर जाता है । खोजपूर्ण सारांश के लिए, पढ़ें या खोज करें lwn (लिनक्स साप्ताहिक समाचार) ।
उत्तर: जोनाथन कार्बेट द्वारा ioctl () के नए तरीके से :
ioctl()कर्नेल के शेष हिस्सों में से एक है जो बिग कर्नेल लॉक (BKL) के तहत चलता है। अतीत में, बीकेएल के उपयोग नेioctl()असंबंधित प्रक्रियाओं के लिए लंबी विलंबता बनाने के लिए लंबे समय तक चलने वाले तरीकों के लिए संभव बना दिया है।
पेश किए गए unlocked_ioctlऔर compat_ioctl2.6.11 में पैच की व्याख्या का अनुसरण करता है । क्षेत्र का निष्कासनioctl बहुत बाद में हुआ, 2.6.36 में।
स्पष्टीकरण: जब ioctlनिष्पादित किया गया था, तो यह बिग कर्नेल लॉक (BKL) लिया गया था , इसलिए कुछ भी एक ही समय में निष्पादित नहीं किया जा सकता था। मल्टीप्रोसेसर मशीन पर यह बहुत बुरा है, इसलिए बीकेएल से छुटकारा पाने के लिए एक बड़ा प्रयास था। सबसे पहले, unlocked_ioctlपेश किया गया था। यह प्रत्येक ड्राइवर लेखक को यह चुनने देता है कि इसके बजाय किस लॉक का उपयोग करना है। यह मुश्किल हो सकता है, इसलिए संक्रमण की अवधि थी, जिसके दौरान पुराने ड्राइवरों ने अभी भी काम किया (उपयोग कर रहे थे ioctl) लेकिन नए ड्राइवर बेहतर इंटरफ़ेस ( unlocked_ioctl) का उपयोग कर सकते थे । आखिरकार सभी ड्राइवरों को परिवर्तित कर दिया गया और ioctlउन्हें हटाया जा सका।
compat_ioctlवास्तव में असंबंधित है, भले ही इसे उसी समय जोड़ा गया हो। इसका उद्देश्य 32-बिट उपयोगकर्ता के कार्यक्रमों को ioctl64-बिट कर्नेल पर कॉल करने की अनुमति देना है । अंतिम तर्क का अर्थ ioctlड्राइवर पर निर्भर करता है, इसलिए ड्राइवर-स्वतंत्र रूपांतरण करने का कोई तरीका नहीं है।
unlocked_ioctlएक में struct file_opsजब यह शुरू होता है, और वे से भर जाती है struct file_opsजब फ़ाइल को खोलने पर फ़ाइल वस्तु में। mknodइसमें कोई भूमिका नहीं।
mknodसे ही (के माध्यम से unlocked_ioctl) संबंधित फ़ाइल संचालन को पुनर्निर्देशित करने से पहले एक चरित्र डिवाइस के माध्यम से अपने इंटरफ़ेस को उजागर करना होगा ।
ऐसे मामले होते हैं जब कर्नेल 2.6.36 में कंपोजिट_आईएक्टल () के लिए (फाइल / लाइन / एफएचएच) स्ट्रक्चर फाइल_ऑपरेशन मेथड ioctl () शामिल नहीं है (जैसे कुछ डिवाइस ड्राइवर्स के लिए) और अनलॉक किए गए .ioctl () का उपयोग नहीं किया जाना चाहिए।
unlocked_ioctlऐसा होता है? तथ्य यह है कि एक फ़ंक्शन पॉइंटर प्रति फ़ाइल (इस मामले मेंstruct file) का उपयोग किया जाता है, ऐसा लगता है कि मैं करीब हो सकता हूं। क्याunlocked_ioctlड्राइवर की शुरुआत के बाद चरित्र फ़ाइलों के लिए पंजीकृत हैmknod?