0

我创建了一个小型 usbtest 驱动程序来测试我的 USB 设备。我有 3.2.0 和 ubuntu 12.04 的 linux 内核版本。

我可以很好地在我的 PC 上成功加载该驱动程序而不会出现任何问题,并且我可以使用该加载的驱动程序而不会出现任何故障情况。

我的 Linux PC 信息 :: uname -a Linux ci5lub021305 3.2.0-29-generic-pae #46-Ubuntu SMP Fri Jul 27 17:25:43 UTC 2012 i686 i686 i386 GNU/Linux 的输出

驱动程序加载失败的另一台 PC 的 Linux PC 信息 :: uname -a Linux ci5lub021302 3.2.0-51-generic-pae #77-Ubuntu SMP Wed Jul 24 20:40:32 UTC 2013 i686 i686 i386 GNU/Linux

但是,当我尝试将该驱动程序加载到另一个具有不同内核版本的 Linux 平台时,那时它会在加载该驱动程序时跟随它。

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

我在 dmesg 中看到显示有关模块版本的错误

usbtest:不同意符号 module_layout 的版本

我还在另一个论坛上看到过有关此问题的信息,他们建议在另一台 PC 上再次编译驱动程序。但我认为这不是一个适当的解决方案。

有没有人知道如何解决这个版本依赖问题,因为我的客户想要来自 2.6.30 到 3.9 内核之间任何内核的驱动程序。

所以,我需要一些特定的解决方案,以便编译的驱动程序可以加载到任何 Linux 内核版本上,这取决于特定的内核版本。

请帮助我尽快解决上述问题,因为这对我来说是一个关键问题。

预先感谢您的支持。

4

1 回答 1

2

您正在编写一个旨在与多个版本的内核一起使用的模块,您可能必须使用宏和#ifdef构造来使您的代码正确构建。

您需要使用linux/version.h.

于 2013-09-11T10:53:26.237 回答