2009-01-20 22 views
9

मैं एलकेएम के माध्यम से एक नया सिस्टम कॉल जोड़ना चाहता हूं, लेकिन मुझे यकीन नहीं है कि यह कैसे करें। यही है, मुझे पता है कि अगर मैं पूरी तरह से नया सिस्टम कॉल जोड़ना चाहता हूं, तो मैं sys_call_table को देख सकता हूं और sys_ni_syscall ढूंढ सकता हूं और बस इसे प्रतिस्थापित कर सकता हूं, लेकिन अगर पर जोड़ना संभव था तो मैं उत्सुक था। मुझे एहसास है कि यह शायद संभव नहीं है, यह देखते हुए कि यह एक निश्चित आकार सरणी है, लेकिन मैं सोच रहा था कि एक अप्रयुक्त सिस्टम कॉल नंबर को ओवरराइड किए बिना सिस्टम कॉल जोड़ने के लिए कोई और चालाक तरीका है या नहीं।क्या एलकेएम के माध्यम से सिस्टम कॉल जोड़ना संभव है?

+0

संभावित डुप्लिकेट [एलकेएम का उपयोग कर लिनक्स सिस्टम कॉल लागू करना] (https://stackoverflow.com/questions/12623066/implementing-linux-system-call-using-lkm) –

उत्तर

1

चेक "लिनक्स कर्नेल मॉड्यूल प्रोग्रामिंग गाइड" (http://www.tldp.org/LDP/lkmpg/2.6/html/index.html) के लिए लिनक्स प्रलेखन परियोजना वेबसाइट। विशेष रूप से, सिस्टम कॉल के लिए यहां देखें: http://www.tldp.org/LDP/lkmpg/2.6/html/x978.html। इससे आपको कम से कम शुरुआत मिलनी चाहिए।

+4

इसके माध्यम से पढ़ें, हालांकि ऐसा लगता है कि sys_call_table है अब 2.6 कर्नेल में निर्यात नहीं किया गया है। Syscall.c में टिप्पणी देखें – FreeMemory

3

यहाँ एक उदाहरण है
linux system calls

संपादित करें:
उपरोक्त उदाहरण से पता चलता howto एक सिस्टम कॉल को लागू, एक लोड करने योग्य मॉड्यूल से एक को लागू करने के रूप में जहाँ तक; AFAIK, यह संभव नहीं है, जब तक कि आप किसी मौजूदा व्यक्ति को ओवरराइट नहीं करते हैं क्योंकि सरणी का आकार # परिभाषित है।

ध्यान रखें उपयोगकर्ता स्थान के रूप में अच्छी तरह से आवश्यक है, कम से कम अगर आप वास्तव में नई प्रणाली कॉल का उपयोग करने में सक्षम होना चाहते परिवर्तन होते हैं।

1

यह एक पुराना सवाल है, लेकिन फिर भी मैं अपना समाधान प्रस्तावित करना चाहता हूं। "सिस्टम-कॉल-जैसे" वातावरण को लागू करने का सबसे आसान तरीका नकली डिवाइस पर भरोसा करना है। विशेष रूप से, आप एक नया डिवाइस ड्राइवर बना सकते हैं जो वास्तव में कुछ भी नहीं चला रहा है। फिर भी, इस पर लिखना, स्थापित मॉड्यूल को आवश्यक क्रियाएं करने का कारण बन सकता है। इसके अतिरिक्त, यदि आप कई सेवाओं की पेशकश करना चाहते हैं, तो आप उन्हें ioctl संचालन के लिए मानचित्र बना सकते हैं।

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