发新话题
打印

说LINUX_VERSION_CODE 没定义,what is wrong?

说LINUX_VERSION_CODE 没定义,what is wrong?

在编译linux-wlan-ng-0.1.13(PCMCIA无线网卡驱动源程序)的时候,在下面处报错,
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,17))
                #define CONFIG_NETLINK                1
#endif
说是LINUX_VERSION_CODE 在这里不能用在 " >= " 前面,我觉得可能是说没有定义LINUX_VERSION_CODE。我查过内和的源码,内核里到处都在用这个宏,用法也和上面一样。可是在我的网卡驱动编译为什么不对,或者没定义?这个驱动程序是稳定版,应该不是他的问题。
      

TOP

LINUX_VERSION_CODE 是表示内核版本的一个宏定义,在内核编程里经常用到,当然,也有不用到的,则会通过在所有的源文件中加入一行 #define __NO_VERSION__

你的程序看起来是必须要使用LINUX_VERSION_CODE 的,所以你应该检查你的代码是否包含version.h,因为module.h 在有 __NO_VERSION__的定义的情况下不自动包含它,而很多情况下的编译flag里面都是有-D__NO_VERSION__的

不确定你的源码是否真的没有问题,但我真的已经改过很多网上下的有问题的驱动程序了,尤其是intel的网卡      

TOP

再问一个。。。-)

谢谢Dara.Wu ,
在驱动程序的源文件里,找不到version.h,也找不到LINUX_VERSION_CODE 的定义。我觉得这个宏是不是从kernel传过来的?
这里我不明白,驱动程序作为模块挂到kernel 上,驱动中的程序怎么用kernel中的资源?比如说,能引用kernel里的外部变量吗?kenerl怎么看到驱动里的变量和方法?      

TOP

sorry,也许我没有将清楚
verion.h是指:
如:/usr/src/linux-2.2.5/include/linux/version.h
而这个version.h里面放了这个内核的版本信息

当你编译驱动程序的时候,它可以根据该内核的版本信息来确定这个驱动是什么环境的版本。
如#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,17))
#define CONFIG_NETLINK 1
#endif
就是说,如果我编译该驱动程序的内核大于2.4.17的话,那么我就define CONFIG_NETLINK 为1,然后后面编译出来的驱动就会根据内核不同而有很大的不同。

明白了吗?如果还不明白,请跟贴说明。      

TOP

cygwin巨好,

cygwin巨好,可以在windows上提供unix/linux开发平台。这样用户可以在win和linux(cygwin的)中同时对一套程序进行处理。
在linux下编译,如果由编译错误或需要修改,则返回win2000上用ultraEditor编辑。
大致说,linux只是win2000的一个命令行窗口,两者用同一套文件系统。

cygwin还有更强大功能,可以把linux的源程序编译为win32应用程序。      

TOP

发新话题