मैं एक लिनक्स कर्नेल मॉड्यूल लिख रहा हूं जिसे फ़ाइलों को खोलने और पढ़ने की आवश्यकता है। इसे पूरा करने का सबसे अच्छा तरीका क्या है?लिनक्स कर्नेल मॉड्यूल में फ़ाइल I/O
उत्तर
क्या मैं पूछ सकता हूं कि आप फ़ाइल खोलने का प्रयास क्यों कर रहे हैं?
मुझे लिनक्स विकास का पालन करना पसंद है (जिज्ञासा से, मैं कर्नेल डेवलपर नहीं हूं, मैं जावा करता हूं), और मैंने पहले इस प्रश्न की चर्चा देखी है। मैं इसके बारे में LKML message ढूंढने में सक्षम था, मूल रूप से इसका उल्लेख करना आमतौर पर एक बुरा विचार है। मैं लगभग सकारात्मक हूं कि एलडब्ल्यूएन ने पिछले साल इसे कवर किया था, लेकिन मुझे लेख ढूंढने में परेशानी हो रही है।
यदि यह एक निजी मॉड्यूल है (जैसे कुछ कस्टम हार्डवेयर और मॉड्यूल वितरित नहीं किया जाएगा) तो आप यह कर सकते हैं, लेकिन मुझे लगता है कि यदि आप अपना कोड मुख्य लाइन पर सबमिट करने जा रहे हैं तो यह स्वीकार नहीं किया जा सकता है।
इवान टेरन ने sysfs का उल्लेख किया, जो मुझे एक अच्छा विचार लगता है। यदि आपको वास्तव में कड़ी कस्टम सामग्री करने की ज़रूरत है तो आप हमेशा नए ioctrls बना सकते हैं।
संपादित करें:
ठीक है, मैं लेख मैं खोज रहा था पाया, यह Linux Journal से है। यह बताता है कि इस तरह की चीजें क्यों करना आम तौर पर एक बुरा विचार है, फिर भी आपको यह बताने के लिए चला जाता है कि वैसे भी इसे कैसे किया जाए।
यह एक कस्टम मॉड्यूल है, इसे वितरित नहीं किया जाएगा।मुझे एक फ़ाइल खोलने की ज़रूरत है जिसमें inodes => चेकसम का मैपिंग शामिल है। – mipadi
@ मिपाडी: मुझे वह आलेख मिला जो मैं सोच रहा था, यह बताता है कि कर्नेल से फ़ाइल को खोलने और पढ़ने के तरीके ("ऐसा न करें" भाग के बाद)। मैंने अपनी पोस्ट को प्रतिबिंबित करने के लिए संपादित किया है और लिंक शामिल किया है। सौभाग्य। – MBCook
मानते हुए कि आपके open
/read
/close
सिस्टम कॉल से प्रासंगिक समारोह संकेत की ओर इशारा प्राप्त कर सकते हैं, तो आप कुछ इस तरह कर सकते हैं:
mm_segment_t fs = get_fs();
set_fs(KERNEL_DS);
fd = (*syscall_open)(file, flags, mode);
if(fd != -1) {
(*syscall_read)(fd, buf, size);
(*syscall_close)(fd);
}
set_fs(fs);
आप "syscall_*
" समारोह संकेत मैं बनाने की आवश्यकता होगी हालांकि दिखाया गया है। मुझे यकीन है कि एक बेहतर तरीका है, लेकिन मेरा मानना है कि यह काम करेगा।
आप इस Linux Kernel Module Programing Guide में sys_call_open के बारे में कुछ जानकारी भी प्राप्त कर सकते हैं।
हाँ, मैंने इसे देखा है। संयोग से, मैं _am_ खुले (2) सिस्टम कॉल को पैच कर रहा हूं, और मुझे वास्तव में एक फ़ाइल _inside_ मेरे पैच किए गए संस्करण को पढ़ने की आवश्यकता है। – mipadi
आम तौर पर, यदि आपको कर्नेल मॉड्यूल से फ़ाइलों को पढ़ने/लिखने की आवश्यकता है, तो आप कुछ गलत वास्तुशिल्प कर रहे हैं।
कर्नेल मॉड्यूल को उपयोगकर्तास्पेस सहायक प्रक्रिया से बात करने की अनुमति देने के लिए तंत्र (उदाहरण के लिए नेटलिंक - या सिर्फ एक वर्ण डिवाइस पंजीकृत करें) मौजूद हैं। वह उपयोगकर्तास्पेस सहायक प्रक्रिया जो कुछ भी चाहती है वह कर सकती है।
आप उपयोगकर्ता स्पेस में खोले गए फाइल डिस्क्रिप्टर को लेने और कर्नेल से इसे पढ़ने/लिखने के लिए सिस्टम कॉल (या जैसे) को भी कार्यान्वित कर सकते हैं।
यह शायद कर्नेल स्पेस में फ़ाइलों को खोलने की कोशिश करने से पहले साफ होगा।
कुछ अन्य चीजें हैं जो कर्नेल स्पेस से पहले ही फाइलें खोलती हैं, आप उन्हें देख सकते हैं (लूप ड्राइवर स्प्रिंग्स दिमाग में?)।
मैंने वास्तव में/proc में फ़ाइल से पढ़ने के लिए तंत्र को बदल दिया है, इसलिए मुझे शायद फ़ाइल को सीधे पढ़ने की आवश्यकता नहीं होगी। – mipadi
/proc फाइल सिस्टम निजी उपयोग के लिए भी अच्छा है, और यह आसान है।
http://www.linuxtopia.org/online_books/Linux_Kernel_Module_Programming_Guide/x773.html
- 1. लिनक्स कर्नेल मॉड्यूल
- 2. लिनक्स कर्नेल - मॉड्यूल
- 3. लिनक्स कर्नेल मॉड्यूल में आवधिक कार्य
- 4. लिनक्स कर्नेल मॉड्यूल: try_module_get/module_put
- 5. लिनक्स कर्नेल मॉड्यूल - सुरक्षा जोखिम?
- 6. लिनक्स कर्नेल मॉड्यूल का स्थान
- 7. लिनक्स कर्नेल मॉड्यूल में थ्रेड स्थानीय डेटा
- 8. सिस्टम कॉल लिनक्स कर्नेल मॉड्यूल में अवरोधन (कर्नेल 3.5)
- 9. लिनक्स कर्नेल
- 10. लिनक्स में परीक्षण IO प्रदर्शन
- 11. लिनक्स कर्नेल
- 12. मुझे लिनक्स कर्नेल मॉड्यूल कब लिखना चाहिए?
- 13. लिनक्स कर्नेल मॉड्यूल को कैसे कोड करें?
- 14. गैर कर्नेल हेडर समेत लिनक्स कर्नेल (2.6) मॉड्यूल संकलित करें
- 15. कर्नेल मॉड्यूल
- 16. लिनक्स कर्नेल
- 17. लिनक्स कर्नेल
- 18. फ़ाइल io
- 19. लिनक्स कर्नेल
- 20. लिनक्स कर्नेल में मॉड्यूल के साथ कार्यक्षमता ओवरराइडिंग
- 21. लिनक्स कर्नेल मॉड्यूल में निष्पादन योग्य पृष्ठ आवंटित कैसे करें?
- 22. क्या लिनक्स में कर्नेल मॉड्यूल के लिए आकार सीमा है?
- 23. कर्नेल मॉड्यूल
- 24. लिनक्स कर्नेल
- 25. लिनक्स कर्नेल
- 26. लिनक्स कर्नेल
- 27. लिनक्स कर्नेल
- 28. लिनक्स कर्नेल
- 29. लिनक्स कर्नेल
- 30. लिनक्स कर्नेल
संभावित डुप्लिकेट [पढ़ने के लिए कैसे/एक लिनक्स कर्नेल मॉड्यूल के भीतर फाइलें लिखने?] (Http://stackoverflow.com/questions/1184274/how-to-read-write-files-within-a- लिनक्स-कर्नेल-मॉड्यूल) –