[已解决]如何解决加载module时内核版本不一致的问题

内核编译和嵌入式产品的设计与开发
回复
头像
wxf
帖子: 50
注册时间: 2008-05-28 8:50

[已解决]如何解决加载module时内核版本不一致的问题

#1

帖子 wxf » 2024-02-20 9:52

要重新编译?
还是只能按网上文章里提供的哪些特别复杂的办法去做?
内核发展了这么多年了,有没有提供简单优雅的办法来解决这种问题吗?

顺便请教一下:为什么windows内核可以保持稳定,linux内核却要不断更新,而且经常不能保持前后兼容,linus就不考虑兼容问题吗
上次由 wxf 在 2024-02-20 17:14,总共编辑 1 次。
头像
astolia
论坛版主
帖子: 6451
注册时间: 2008-09-18 13:11

Re: [求助]如何解决加载module时内核版本不一致的问题

#2

帖子 astolia » 2024-02-20 13:51

wxf 写了: 2024-02-20 9:52 要重新编译?
还是只能按网上文章里提供的哪些特别复杂的办法去做?
内核发展了这么多年了,有没有提供简单优雅的办法来解决这种问题吗?
最好是用dkms或其他类似的机制在内核更新时自动重新编译。当然你要用modprobe -f也没人能拦你
wxf 写了: 2024-02-20 9:52 顺便请教一下:为什么windows内核可以保持稳定
谁告诉你的?无论你指的是api稳定还是abi稳定,windows内核都算不上。估计你没弄清楚stable和backward compatibility的区别。你也可以关注一下windows内核相关的第三方工具,比如xp时代的冰刃icesword,win7时代的xuetr/pchunter,你找来看看在现在的win10/11下还能用不?
wxf 写了: 2024-02-20 9:52 linux内核却要不断更新,而且经常不能保持前后兼容,linus就不考虑兼容问题吗
请自行阅读 https://www.kernel.org/doc/Documentatio ... nsense.rst
头像
wxf
帖子: 50
注册时间: 2008-05-28 8:50

Re: [求助]如何解决加载module时内核版本不一致的问题

#3

帖子 wxf » 2024-02-20 14:58

多谢 :Faint
上次由 wxf 在 2024-02-20 15:36,总共编辑 2 次。
头像
astolia
论坛版主
帖子: 6451
注册时间: 2008-09-18 13:11

Re: [求助]如何解决加载module时内核版本不一致的问题

#4

帖子 astolia » 2024-02-20 15:10

另外上面说的都是kernel space内部,linux内核对userspace的syscalls的向下兼容一直都是很好的
头像
wxf
帖子: 50
注册时间: 2008-05-28 8:50

Re: [求助]如何解决加载module时内核版本不一致的问题

#5

帖子 wxf » 2024-02-20 15:36

astolia 写了: 2024-02-20 15:10 另外上面说的都是kernel space内部,linux内核对userspace的syscalls的向下兼容一直都是很好的
我就是觉得linux里做点工作好烦,编译个ko出来,在别的内核版本的虚拟机里insmod失败了。假如用户的内核版本不一致或者开启了内核升级功能,那我岂不是得编译好多个ko,安装的时候要检查内核版本号做适配,或者得盯着用户的内核版本,给他的ko做升级,想一想就可怕。
网上哪些解决方法,看了一阵看不懂,而且总觉得不像正常的开发思路

windows里就简单了,编译一个sys,不考虑数字签名的的话,win7/10/11里都可以加载的。
上次由 wxf 在 2024-02-20 17:10,总共编辑 1 次。
头像
astolia
论坛版主
帖子: 6451
注册时间: 2008-09-18 13:11

Re: [求助]如何解决加载module时内核版本不一致的问题

#6

帖子 astolia » 2024-02-20 16:40

wxf 写了: 2024-02-20 15:36 我就是觉得linux里做点工作好烦
这就是GPL+高度可定制化的代价。对开发者麻烦,对用户来说就是一种保护了。
wxf 写了: 2024-02-20 15:36 假如用户的内核版本不一致或者开启了内核升级功能,那我岂不是得编译好多个ko
GPL就是来限制你只分发二进制文件的
wxf 写了: 2024-02-20 15:36 安装的时候要检查内核版本号做适配,或者得盯着用户的内核版本,给他的ko做升级,想一想就可怕。
光检查版本号是没用的,高度可定制化没法保证别人用的内核是不是砍掉了你需要的东西或加上了你不想要的东西。像我自用的内核,都是开了强制模块签名,外来模块不经过我自己的私钥签名,内核直接拒绝加载。
debug4
帖子: 85
注册时间: 2020-10-29 7:34

Re: [已解决]如何解决加载module时内核版本不一致的问题

#7

帖子 debug4 » 2024-02-23 18:55

Linux 内核版本太多了,碎片化

------------------
mainline: 6.8-rc5 2024-02-18
stable: 6.7.6 2024-02-23

longterm: 6.6.18 2024-02-23

longterm: 6.1.79 2024-02-23 * (Debian 12 的主线默认内核版本)
longterm: 5.15.149 2024-02-23

longterm: 5.10.210 2024-02-23 * (Debian 11 的主线默认内核版本)
longterm: 5.4.269 2024-02-23

longterm: 4.19.307 2024-02-23 * (Debian 10 的主线默认内核版本)
------------------

顺便说下个人的感受:
我用的是 Debian 11, 前几天内核升级到了 5.10.0-28-am64

之前 -26 的 无线网卡驱动,不能用了,又要重新编译生成。
(当然,如果你的 无线网卡芯片,是 内核自带驱动程序的,那就非常省心了)

另外,很多 realtek 的无线网卡驱动,Ubuntu PPA 里都有 dkms 的 驱动包(但大部分都是只支持 5.14 及以前的内核版本 )。
如果用的是 Debian 12, (6.1 的内核),可能这个网卡就没法用了,除非自己能打驱动补丁,或者找到支持新版本内核的驱动源码。

其它的硬件,比如 显卡,特别是 nvidia 家的,也是经常有用户反馈驱动的问题了。

也许,只有等到哪天 Linuz 退出江湖了,内核版本众多的问题,才能真正改善。
回复