Module.symvers कैसे उत्पन्न करें?


14

मैं हाल ही में अनपैकिंग कर्नेल-सोर्स rpm ऑफ-सिस्टम (OpenSuse) के माध्यम से गया ? ; और जैसा कि मेरे मशीन पर 10 घंटे लगते हैं, मेरे आश्चर्य की कल्पना करें कि वहां वर्णित प्रक्रिया करने के बाद, मुझे Module.symversकहीं भी नहीं मिला !

जब मैं "मॉड्यूल मॉड्यूल उत्पन्न करता हूं" खोजता हूं, तो मुझे यह मिलता है:

ध्यान दें:
CONFIG_MODVERSIONS सेट होने पर भी "मॉड्यूल_प्रकार" मॉड्यूल का निर्माण नहीं करेगा । इसलिए,
मॉड्यूल वर्जनिंग कार्य करने के लिए एक पूर्ण कर्नेल बिल्ड को निष्पादित करने की आवश्यकता है ।
( लिनक्स कर्नेल डॉक्यूमेंटेशन :: kbuild: मॉड्यूल.txt )

... लेकिन मैं वास्तव में इसे प्राप्त नहीं करता हूं - कर्नेल पिछले चरण में नहीं बनाया गया था (ऊपर दिए गए लिंक में वर्णित है? मुझे यकीन है कि यह पता चला कि CC के लिए 10 h * का पूरा गुच्छा उत्पन्न करने में 10 घंटे लगते हैं।) फाइलें, और एलडी उन्हें लिंक करने के लिए, इसलिए कुछ बनाया गया होगा। लेकिन यदि हां, तो कहां है Module.symvers?

अधिक स्पष्ट शब्दों में, Module.symvers उत्पन्न करने के लिए मुझे वास्तव में किस कमांड पर कॉल करना चाहिए? मुझे पता है कि make prepareकाम नहीं करेगा - लेकिन वह कौन सी आज्ञा है?


FYI करें, openSUSE पर, आप प्राप्त कर सकते हैं Module.symversद्वारा zypper install kernel-source, और अन्य linux distro पर समान। फ़ाइल में स्थित है lib/modules/xxx/build
सिरिटिस मेजर

जवाबों:


16

Module.symvers(फिर से) उत्पन्न होती है जब आप (फिर) संकलन मॉड्यूल है। भागो make modules, और आपको Module.symversकर्नेल के पेड़ की जड़ में एक फ़ाइल मिलनी चाहिए ।

ध्यान दें कि यदि आप केवल दौड़े makeऔर नहीं make modules, तो आपने अभी तक कोई मॉड्यूल नहीं बनाया है। कर्नेल से ही प्रतीक ( vmlinuxया वास्तुकला-निर्भर छवि स्वरूपों में से एक) में हैं System.map


उसके लिए बहुत धन्यवाद, @ गाइल्स - मेरे पास तब से उत्तर भी था : Module.symvers फ़ाइल ; और पुष्टि कर सकता है कि make modulesवास्तव में बनाता है Module.symversmakeऔर के बीच के अंतर को स्पष्ट करने के लिए भी धन्यवाद make modules, और करने के लिए संबंध System.map। चीयर्स!
सादाऊ

क्या होगा अगर "मेक" मशीन पर अनुपलब्ध है?
बज़ुपनिक

3
@bzupnick इसे स्थापित करें। यह लिनक्स कर्नेल मॉड्यूल बनाने के लिए आवश्यक उपकरणों में से एक है। बनाने के लिए बहुत से सॉफ्टवेयर की आवश्यकता होती है।
गिल्स एसओ- बुराई को रोकें '25

मैं एक एलकेएम को दूसरी मशीन से क्रॉस-कंपाइल करने की कोशिश कर रहा हूं। पहले बॉक्स पर चीजों को स्थापित करना संभव नहीं है।
बज़ुप्निक

@bzupnick आपको वैसे भी मॉड्यूल का निर्माण करने की आवश्यकता है। यह सब बिल्ड मशीन पर हो रहा है, इसके अलावा टारगेट मशीन पर कुछ नहीं करना है insmod
गिल्स एसओ-

4

डेरेक मोलॉय के नमूने LKM में से एक को संकलित करते समय आपको जो चेतावनी मिलती है, उसे टालते हुए लोगों के लिए: आप बस एक खाली कर सकते हैं touch Modules.symvers। यदि आपका कर्नेल मॉडर्नों का उपयोग नहीं करता है (ऑपरेटिंग सिस्टम द्वारा उपयोग किए जाने वाले सीआरसी कर्नेल से मेल खाने का आश्वासन देता है) और आपके मॉड्यूल का अन्य मॉड्यूल पर कोई निर्भरता नहीं है, तो यह चेतावनी को दबाने के लिए पर्याप्त होगा।

WARNING: Symbol version dump ./Module.symvers
         is missing; modules will have no dependencies and modversions.

खाली फ़ाइल सिर्फ gcc द्वारा जनरेट की गई सामग्री के समान ही अच्छी है, जिसमें 0x00000000बिना किसी मॉडरेशन के सिस्टम पर समान CRC मान के साथ सभी चिह्न हैं ।


2

CentOS, और शायद अन्य RedHat वेरिएंट पर, अपने चलने वाले कर्नेल के लिए संबंधित फ़ाइल निकालें:

zcat /boot/symvers-$(uname -r).gz > ./Module.symvers

उबंटू और शायद अन्य डेबियन वेरिएंट पर, फ़ाइल सीम स्वचालित रूप से पाई जाएगी। हालाँकि, यदि आपको इसकी आवश्यकता है, तो फ़ाइल यहाँ है:

/usr/src/linux-headers-$(uname -r)/Module.symvers

मुझे linux-headers-$(uname -r)
किंग स्टोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.