linux內核模塊開發之內核兼容

因爲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以支持更多的內核版本,在實踐中出真理去吧。


新浪微博:@安靜的發狂者
QQ:229675152
專注於移動互聯網音視頻通信領域,歡迎交流;本文爲原創,轉載請保留版權並聯系作者
kamailio/opensips技術交流QQ羣:118791050

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章