因爲linux內核變化非常快,每個小版本之間數據結構、接口都有可能發生變化,因此爲我們寫內核模塊的兼容性帶來了一些問題,經常在某版本上能正常編譯的模塊,換另一個模塊就編譯失敗了,這時候我們就需要做內核版本兼容了,解決方法如下:
在內核時面有一個linux/version.h頭文件,裏面有兩個宏LINUX_VERSION_CODE和KERNEL_VERSION,可利用這兩個宏來協助完成兼容處理,例子代碼如下:
static struct nf_hook_ops mrs_ops_forward = {
.hook = mrs_hook_forward,
.owner = THIS_MODULE,
.pf = PF_INET,
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25))
.hooknum = NF_INET_FORWARD,
#else
.hooknum = NF_IP_FORWARD,
#endif
.priority = NF_IP_PRI_FIRST,//NF_IP_PRI_RAW,
};
同時可以嵌套多層#if else以支持更多的內核版本,在實踐中出真理去吧。
kamailio/opensips技術交流QQ羣:118791050