linux模块编译后加载不成功

linux模块编译后加载不成功,第1张

从dmesg的输出来看,内核已经export了一个同样的symbol,你加载的驱动再次输出一遍就有问题了。

可能原因:

usbnet模块可能在系统启动后已经加载了,你不需要手动再次加载。这个又可能由两个原因造成:(1)你在menuconfig中选择USBNET模块为[*]模式(驱动集成到内核),而非[M]模式(驱动以模块方式动态插入内核);(2)你已经选择了[M]模式,但是按照系统的默认配置在系统启动过程中会自动动态加载这个驱动,无需手动加载;

虽然选择了USBNET模块并重新编译了内核,但是新编译的内核并没有更新到系统上,系统还是使用的老的内核。

现在你应该可以排除一下上面的猜测的几种可能原因吧?

路过看古董……

gcc 现在最新版本是 4.4.3 ……

gcc 2 时代必须完全相同的 gcc 版本才行,gcc3 开始才允许不同 gcc 版本编译出来的程序可以混用。前提是都是 gcc3 编译出来的。

内核的要求附加一个是必须是调用对应版本的内核 header 编译出来的。

楼主你先升级你的系统吧……

比如 Fedora 12 什么的。

由于 linux 内核升级了 lockdown 功能,导致签名验证不过的内核模块在安装时会报:

insmod: ERROR: could not insert module xxxxxxxx.ko: Operation not permitted

dmesg | grep secureboot

dmesg | grep lockdown

会打印相应的 lockdown 开启显示信息

将生成的密钥和证书改名为: signing_key.x509 和 signing_key.priv 放到 Linux kernel 源码根目录。

使用新编译的 kernel 重启系统后,使用如下命令查看已生效的签名证书:

dmesg | grep MODSIGN

会显示类似如下信息:

[2.450021] MODSIGN: Loaded cert 'GenFic: Kernel Signing Key: b923a5f44eae25bbad52c8bf2742e7b7e6fb0c0e'

可以将模块与内核一同编译,也可以以后单独编译,单独编译完的模块要用下面的命令对模块进行签名:

/usr/src/linux-headers-5.3.0-51-generic/scripts/sign-file sha512 /home/yangyuqi/ko_sign_key/private_key.priv /home/yangyuqi/ko_sign_key/public_key.der xxxxxxxx.ko

可以使用如下命令查看是否签名已添加到模块:

hexdump -C hello.ko | tail

可以使用如下命令移除签名:

strip --strip-debug hello.ko


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7490164.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存