栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何构建Linux内核模块,使其与所有内核版本兼容?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何构建Linux内核模块,使其与所有内核版本兼容?

简而言之 :您 几乎 无法编写有用的内核模块,该模块可以加载到相对广泛的版本的内核中。

当针对编译时使用的内核构建模块时

CONFIG_MODVERSIONS
(如您的情况),对于从内核导出的每个符号,该符号的CRC都存储在模块文件中。CRC是某种
控制总和 ,除其他事项外,还考虑了用于函数参数的类型布局。例如,如果假设的布局
struct A
在两个内核
f(struct A*a)
中不同,则这些内核中功能的CRC也将不同。

将模块加载到正在运行的内核时,会将模块中所有功能的CRC与内核的功能进行比较。如果它们不同,则内核拒绝加载模块。要了解有关此机制的更多信息,请参阅内核的文档(documentation
/ kbuild /
modules.txt

)。

因此,为了使一个模块可加载到两个不同的内核中,您仅受参数在两个内核中具有相同布局的函数的限制。特别是,如果类型的布局

structmodule
不同,则无法为两个内核加载单个模块。


有几种方法可以交付适用于多个内核的驱动程序。最简单的方法是交付驱动程序的
并将其添加到中

dkms
。这样,如果正在运行的内核没有构建驱动程序,则将使用其源代码 自动 编译驱动程序。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/401122.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号