加载内核模块时的未知符号

我需要帮助了解为什么当我插入模块时出现错误。 我试过这个没有成功。

$ 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] $ 

非常感谢。

Solutions Collecting From Web of "加载内核模块时的未知符号"

我已经解决了这个问题,建议在这个论坛上 :

  1. 编译scst
  2. 将生成的modulee.symvers到现有的/lib/modules/<version>/build/modulee.symvers modulee.symvers不知道为什么内核没有看到导出的符号 )。
  3. scst复制到/lib/modules/<version>/extra
  4. depmod -a
  5. 编译lpfc_scst
  6. 插入模块lpfc_scst没有问题。

祝你今天愉快。

这意味着内核不允许模块看到这个变量。 它看起来好像没有将变量添加到内核导出的符号列表中:

 EXPORT_SYMBOL_NOVERS(scst_register_target); 

如果你正在尝试insmod一个针对内核源代码树/头文件而不是正在运行的内核的实际源代码的模块,最可能的原因是某些内核配置在运行的内核和你构建的内核之间是不同的模块反对。

Linux内核中的链接器实际上是在符号名称之外查找符号名称,包括函数参数和返回值的哈希,尝试匹配符号名称时的各种配置选项(抢占/非抢占)。 我想你的情况下,由于不同的配置选项,找不到正确的匹配