2011-09-22 14 views
12

लोड करते समय अज्ञात प्रतीक मुझे समझने में मदद की ज़रूरत है कि जब मैं मॉड्यूल डालने पर त्रुटि प्राप्त करता हूं। मैंने सफलता के बिना this को आजमाया है।कर्नेल मॉड्यूल

$ sudo modprobe lpfc_scst 
FATAL: Error inserting lpfc_scst (/lib/modules/2.6.32-33-generic/extra/lpfc_scst.ko): Unknown symbol in module, or unknown parameter (see dmesg) 

$ dmesg | tail 
[ 1201.262842] lpfc_scst: Unknown symbol scst_register_target 
[ 1201.262949] lpfc_scst: Unknown symbol lpfc_tm_term 
[ 1201.263161] lpfc_scst: no symbol version for scst_register_session 
[ 1201.263164] lpfc_scst: Unknown symbol scst_register_session 
[ 1201.263284] lpfc_scst: no symbol version for scst_rx_mgmt_fn 
[ 1201.263286] lpfc_scst: Unknown symbol scst_rx_mgmt_fn 
[ 1201.263395] lpfc_scst: no symbol version for scst_unregister_session 
[ 1201.263398] lpfc_scst: Unknown symbol scst_unregister_session 
[ 1201.263573] lpfc_scst: no symbol version for scst_rx_data 
[ 1201.263575] lpfc_scst: Unknown symbol scst_rx_data 

$ cat /proc/kallsyms | grep scst_register_target 
dffd2a10 r __ksymtab_scst_register_target [scst] 
dffd302e r __kstrtab_scst_register_target [scst] 
dffd2b34 r __kcrctab_scst_register_target [scst] 
dffd2a20 r __ksymtab___scst_register_target_template_non_gpl [scst] 
dffd3063 r __kstrtab___scst_register_target_template_non_gpl [scst] 
dffd2b3c r __kcrctab___scst_register_target_template_non_gpl [scst] 
dffd2c10 r __ksymtab___scst_register_target_template [scst] 
dffd308b r __kstrtab___scst_register_target_template [scst] 
dffd2de8 r __kcrctab___scst_register_target_template [scst] 
dff913a0 t __scst_register_target_template [scst] 
dff90dd0 T scst_register_target [scst] 
dff91840 T __scst_register_target_template_non_gpl [scst] 

$ 

बहुत धन्यवाद।

उत्तर

9

मैं इस समस्या के रूप में this forum पर सुझाव दिया समाधान कर लिया है:

  1. संकलित scst
  2. जेनरेट Module.symvers को /lib/modules/<version>/build/Module.symvers (हैक) में शामिल किया गया है। पता नहीं क्यों कर्नेल को निर्यात किए गए प्रतीकों को नहीं देखा गया)।
  3. scst से /lib/modules/<version>/extra पर प्रतिलिपि बनाई गई।
  4. depmod -a
  5. संकलित lpfc_scst
  6. कोई समस्या नहीं के साथ सम्मिलित मॉड्यूल lpfc_scst

एक अच्छा दिन है।

+0

यह मेरे लिए थोड़ा उलटा तरीका काम करता है: 1. कर्नेल स्रोत पेड़ की जड़ में Module.symvers कॉपी करें। 2. संकलन मॉड्यूल, आदि ... –

1

यदि आप किसी कर्नेल स्रोत पेड़/हेडर के विरुद्ध बनाए गए मॉड्यूल को इन्सोडोड करने का प्रयास कर रहे हैं जो चल रहे कर्नेल का वास्तविक स्रोत नहीं है, तो सबसे संभावित कारण यह है कि कुछ कर्नेल कॉन्फ़िगरेशन चल रहे कर्नेल और एक के खिलाफ आप मॉड्यूल बनाया।

लिनक्स कर्नेल के अंदर लिंकर वास्तव में फ़ंक्शन पैरामीटर और रिटर्न वैल्यू का एक हैश, मिलान करने का प्रयास करते समय विभिन्न कॉन्फ़िगरेशन विकल्प (प्रीempt/non preempt) सहित प्रतीकों के मिलान के प्रतीक के अलावा चीजों का एक गुच्छा देखता है। प्रतीक नाम मुझे लगता है कि आपके मामले में इसे विभिन्न कॉन्फ़िगरेशन विकल्पों के कारण सही मिलान नहीं मिलता है

+0

नहीं, यह मेरा मामला नहीं है। मैंने कर्नेल मॉड्यूल को वास्तविक चल रहे कर्नेल के खिलाफ बनाया है, इसलिए मैंने 'insmod' करने का प्रयास किया। –

2

इसका मतलब है कि कर्नेल मॉड्यूल को उस चर को देखने की अनुमति नहीं दे रहा है। यह दिखता है जैसे आप प्रतीकों की सूची गिरी निर्यात करने के लिए नहीं किया है, आपकी चर:

EXPORT_SYMBOL_NOVERS(scst_register_target); 
+0

लाइनों 'EXPORT_SYMBOL (scst_register_target); 'स्रोत फ़ाइलों में प्रस्तुत हैं। –

+0

2.6 में 'EXPORT_SYMBOL_NOVERS' अप्रचलित है? –

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