gpt4 book ai didi

linux - 如何移植在2.6内核中编译的linux驱动程序,而不用在其他新版本内核中编译

转载 作者:太空狗 更新时间:2023-10-29 11:09:39 25 4
gpt4 key购买 nike

感谢每一位,

这是我在一次面试中被问到的问题。

我有一个在 Linux 内核版本 2.6 中编译的 Linux 设备驱动程序。我想在具有内核 3.X 的 Linux PC 中移植相同的驱动程序,而无需在新版本中编译。

这可能吗?如果可能的话,请告诉我怎么做。如果不可能,请告诉我为什么不?

感谢和问候湿婆

最佳答案

不,你不能将为一个版本编译的模块移植到另一个版本。

原因如下

模块与特定内核版本中定义的数据结构和函数原型(prototype)紧密相关;
一个模块看到的接口(interface)可以从一个内核版本显着变化到
下一个。当然,对于开发内核尤其如此

内核不仅仅假定给定的模块是针对
正确的内核版本。构建过程中的步骤之一是链接您的模块
针对当前内核树中的文件(称为 vermagic.o);这个对象包含一个
关于构建模块的内核的大量信息,包括
目标内核版本、编译器版本,以及一些重要的设置
配置变量。当尝试加载模块时,此信息
可以测试与正在运行的内核的兼容性。如果不匹配,

模块没有加载;相反,您会看到如下内容:

#insmod hello.ko

插入“./hello.ko”时出错:-1 模块格式无效

查看系统日志文件(/var/log/messages 或任何您的系统配置使用)将揭示导致模块加载失败的具体问题。

内核接口(interface)经常在不同版本之间发生变化。如果您正在编写一个模块旨在与多个版本的内核一起工作(特别是如果它必须工作跨主要版本),您可能必须使用宏和#ifdef 结构使您的代码正确构建。

关于linux - 如何移植在2.6内核中编译的linux驱动程序,而不用在其他新版本内核中编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17830427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com