पर उपयोगकर्ता स्थान कोड पोर्ट करना मेरे पास मुख्य रूप से सी में लिखा गया एक बड़ी प्रणाली है जो उपयोगकर्ता स्थान में चल रही थी। अब मुझे कोड को कर्नेल मॉड्यूल के रूप में संकलित करने की आवश्यकता है। इसके लिए, मुझे कम से कम कोड को फिर से लिखना चाहिए और malloc
, calloc
, free
, printf
उनके कर्नेल समकक्षों के साथ कार्यों को प्रतिस्थापित करना चाहिए, क्योंकि वे पूरी तरह से उपयोगकर्ता-स्थान फ़ंक्शन हैं। समस्या यह है कि, मेरे पास सिस्टम में उपयोग की जाने वाली कुछ कस्टम-निर्मित पुस्तकालयों का स्रोत कोड नहीं है, और उन पुस्तकालयों में उनके कार्यों के अंदर malloc
आदि को कॉल किया गया है। इसलिए, मूल रूप से, मुझे पूरी लाइब्रेरी को फिर से लागू करने की आवश्यकता हो सकती है।कर्नेल स्पेस
अब सवाल: यह एक सच में गंदा हैक हो जाएगा, अगर मैं कुछ इस तरह kmalloc
के चारों ओर एक आवरण के रूप में malloc
के अपने खुद के कार्यान्वयन लिखना चाहते हैं,:
void *malloc(size_t size) {
return kmalloc(size, GFP_USER);
}
फिर प्रणाली को यह कार्यान्वयन लिंक कोड, जो सभी मॉड्यूल त्रुटियों में अज्ञात प्रतीक को खत्म कर देगा।
असल में मैंने सोचा कि यह एक आम समस्या होगी और कोई पहले से ही इस तरह के एक किमीलोक रैपर लिखा होगा, लेकिन अब मैं कुछ दिनों के लिए googling रहा है और कुछ भी उपयोगी नहीं मिला।
संपादित करें: ऐसा करने का कारण यह है कि जिस प्रणाली के बारे में मैं बात कर रहा हूं वह एक वास्तविक समय एप्लिकेशन VxWorks रीयलटाइम ओएस पर चल रहा था और अब हम इसे लिनक्स आरटीएआई पर इस्तेमाल करने के लिए पोर्ट करना चाहते हैं, जहां ऐप्स ज्यादातर कर्नेल में चलते हैं अंतरिक्ष। लेकिन मुझे लगता है कि उपयोगकर्ता स्थान में रीयल-टाइम होने की भी संभावना है, इसलिए, शायद मुझे माइक ने सुझाव दिया होगा कि कोड को कर्नेल और उपयोगकर्ता-स्पेस पार्ट्स में अलग करें और साझा स्मृति के साथ संवाद करें।
मैंने जीसीसी के लिए [यह हैक] (http://stackoverflow.com/a/14728092/912144) देखा जो आपके लिए उपयोगी हो सकता है। – Shahbaz
आम तौर पर लोग अन्य तरीकों की बजाय कर्नेल से चीज़ों को स्थानांतरित करने का प्रयास करते हैं। मेरा व्यक्तिगत अनुभव यह है कि यदि आपको लगता है कि आपको अपने प्रोग्राम का कर्नेल मॉड्यूल बनाने की आवश्यकता है, तो आप शायद इसे गलत कर रहे हैं। –
@ जोआचिमपिलबोर्ग शायद उन्हें यह सोचने के लिए मिला कि यह कर्नेल स्पेस – Ulterior