系统相关
首页 > 系统相关> > 如何移植在2.6内核中编译的linux驱动程序,而不在其他新版本的内核中编译

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

作者:互联网

谢谢大家,

这是我面对的一次采访中提出的问题.

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

可能吗 ?如果可以的话,请告诉我.如果不可能,请告诉我为什么不这样做?

谢谢&问候
西瓦

解决方法:

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

原因如下

模块与特定内核版本中定义的数据结构和功能原型紧密相关.
模块看到的界面可以从一个内核版本显着更改为
下一个.当然,对于开发内核尤其如此

内核不只是假设已经针对
正确的内核版本.构建过程中的步骤之一是链接模块
针对当前内核树中的文件(称为vermagic.o);该对象包含一个
有关构建模块的内核的大量信息,包括
目标内核版本,编译器版本以及许多重要的设置
配置变量.尝试加载模块时,此信息
可以测试与正在运行的内核的兼容性.如果情况不符,

模块未加载;相反,您会看到类似以下内容的内容:

#insmod hello.ko

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

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

内核接口经常在版本之间变化.如果您要编写的模块是
旨在与内核的多个版本一起使用(尤其是如果它必须可以工作)
跨主要版本),您可能必须使用宏和#ifdef构造
使您的代码正确构建.

标签:linux-device-driver,linux
来源: https://codeday.me/bug/20191123/2064156.html