2.6.28内核中安装sctp模块的 问题

在Linux内核2.6.28版本中,作者遇到修改sctp模块后,insmod加载模块报错""Unknown symbol in module"",特别是关于crc32c_le符号的问题。通过使用modprobe成功加载模块,并发现crc32c模块需要编译进内核。文章对比了insmod和modprobe的区别,并介绍了与模块管理相关的工具如lsmod, depmod, modinfo的使用和功能。" 121065641,10864352,C语言实现泰勒公式计算sin(x),"['C语言编程', '数学计算', '数值方法']
摘要由CSDN通过智能技术生成

曾经在之前的较早的几个内核版本(2.6.12 和2.6.18)中修改过sctp的代码,当时编译sctp模块就直接用
make CONFIG_IP_SCTP=m -C /usr/src/linux-2.6.28 M=/usr/src/linux-2.6.28/net/sctp modules
然后insmod sctp.ko就ok了


但是在比较新的内核2.6.28中,修改了部分 源代码后,编译通过了,但是insmod sctp.ko 时报错:
insmod: error inserting 'sctp.ko': -1 Unknown symbol in module
dmesg打印出的信息是:
sctp: Unknown symbol crc32c_le
原以为是自己修改的代码中含有了未知的函数或符号,将所有新引入的的函数都使用EXPORT_SYMBOL导出后依然是有这个错误!!


后来使用了modprobe,居然安装成功了,lsmod |grep sctp之后可见:
sctp                  163480  2
libcrc32c               6528  1 sctp
ipv6                  230352  27 sctp
从左到右依次是:模块名、模块大小、被....使用

ipv6模块应该是编译进内核的,libcrc32c在2.6.28中应该是动态加载的
所以,问题出在了这里,在编译内核前,将crc32c编译进内核应该就可以直接insmod sctp.ko了


参考:
------------------------------------------------------------
http://blog.csdn.net/wenlifu71022/archive/2009/06/10/4256196.aspx
linux设备驱动有两种加载方式insmod和modprobe,下面谈谈它们用法上的区别
1、insmod一次只能加载特定的一个设备驱动,且需要驱动的具体地址。写法为:
        insmod drv.ko
2.  modprobe则可以一次将有依赖关系的驱动全部加载到内核。不加驱动的具体地址,但需要在安装文件系统时是按照make modues_install的方式安装驱动模块的。驱动被安装在/lib/modules/$(uname -r)/...下。写法为:
       modprob drv
------
modprobe 和insmod一样都是用来加载内核module的
不过modprobe比较智能,它可以根据module的依赖性来自动为你加载;
而insmod就做不到这点


http://blog.csdn.net/future_fighter/archive/2009/02/04/3862795.aspx
lsmod
功能:列出内核已载入模块的状态
用法:lsmod
描述:
    lsmod 以美观的方式列出/proc/modules的内容。
    输出为:
    Module(模块名)    Size(模块大小)   Used by(被...使用)
 
eg. ne2k_pci          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值