से समझाया गया है, एक बाहरी मॉड्यूल एक और बाहरी मॉड्यूल से प्रतीकों निर्यात उपयोग करता है। अपरिभाषित प्रतीकों के बारे में चेतावनी थूकने से बचने के लिए kbuild को सभी प्रतीकों का पूर्ण ज्ञान होना चाहिए। इस स्थिति के लिए तीन समाधान मौजूद हैं।
नोट: शीर्ष-स्तरीय केबिल्ड फ़ाइल के साथ विधि की अनुशंसा की जाती है लेकिन कुछ स्थितियों में अव्यवहारिक हो सकती है।
एक शीर्ष स्तर kbuild फ़ाइल का प्रयोग करें आप दो मॉड्यूल, foo.ko और bar.ko, जहां foo.ko bar.ko से प्रतीकों की जरूरत है, तो आप तो दोनों एक सामान्य शीर्ष-स्तरीय kbuild फ़ाइल का उपयोग कर सकते मॉड्यूल समान निर्माण में संकलित किए गए हैं। निम्न निर्देशिका लेआउट पर विचार करें:
./foo/ <= contains foo.ko ./bar/ <= contains bar.ko
The top-level kbuild file would then look like:
#./Kbuild (or ./Makefile): obj-y := foo/ bar/
And executing
$ make -C $KDIR M=$PWD
will then do the expected and compile both modules with full
या तो मॉड्यूल से प्रतीकों का ज्ञान।
एक अतिरिक्त मॉड्यूल.symvers फ़ाइल का उपयोग करें जब कोई बाहरी मॉड्यूल बनाया जाता है, एक मॉड्यूल.symvers फ़ाइल उत्पन्न होती है जिसमें सभी निर्यात किए गए प्रतीकों होते हैं जिन्हें कर्नेल में परिभाषित नहीं किया जाता है। bar.ko से प्रतीकों तक पहुंच प्राप्त करने के लिए, moo.sको संकलित करने के लिए module.symvers फ़ाइल को कॉपी करें जहां foo.ko बनाया गया है। मॉड्यूल बिल्ड के दौरान, kbuild बाहरी मॉड्यूल की निर्देशिका में Module.symvers फ़ाइल को पढ़ेगा, और जब निर्माण समाप्त हो जाएगा, तो एक नया Module.symvers फ़ाइल बनाई गई है जिसमें सभी प्रतीकों का योग परिभाषित है और भाग नहीं है कर्नेल का।
उपयोग चर KBUILD_EXTRA_SYMBOLS "बनाना" यदि यह एक अन्य मॉड्यूल से प्रतिलिपि Module.symvers के लिए अव्यावहारिक है, तो आप अपने निर्माण फ़ाइल में KBUILD_EXTRA_SYMBOLS करने के लिए फ़ाइलों के एक अंतरिक्ष पृथक सूची प्रदान कर सकते हैं। की प्रारंभिक तालिका के दौरान इन फ़ाइलों को मॉडपोस्ट द्वारा लोड किया जाएगा।
बढ़िया! मैंने यह खो दिया। धन्यवाद गोस्कर! – MirkoBanchi