曾经在之前的较早的几个内核版本(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
2.6.28内核中安装sctp模块的 问题
最新推荐文章于 2022-02-17 16:20:04 发布
在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通过智能技术生成