我创建了一个小的usbtest驱动程序来测试我的USB设备。我有linux内核版本3.2.0和ubuntu 12.04。
我可以很好地在我的电脑上成功加载该驱动程序而没有任何问题,我可以在没有任何故障情况下使用该加载的驱动程序。
我的Linux PC信息:: uname -a的输出 Linux ci5lub021305 3.2.0-29-generic-pae#46-Ubuntu SMP Fri 7月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 7月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内核版本上加载编译的驱动程序,具体取决于特定的内核版本。
请尽快帮助我解决上述问题,因为这对我来说是一个关键问题。
提前感谢您的支持。
答案 0 :(得分:2)
您正在编写一个旨在使用内核的多个版本的模块,您可能必须使用宏和#ifdef
结构来正确构建代码。
您需要使用linux/version.h
中的定义。