由於Linux版本的在不斷更新,當裝置驅動去相容不同版本的核心時,需要知道當前使用的核心原始碼版本,以此來呼叫對應版本的核心API,這兩個宏定義在檔案
/usr/include/linux/version.h
#define LINUX_VERSION_CODE 263213
#define KERNEL_VERSION(a,b,c) (((a)<<16)+((b)<<8)+(c))
我安裝完linux-header之後,在下面這個目錄找到了version.h這個檔案
/usr/lib/modules/4.4.45-1-MANJARO/build/include/generated/uapi/linux/version.h
使用的Linux系統為MANJARO,核心版本號為4.4.45,對應的LINUX_VERRSION_CODE 為263213,計算方法如下:
-
首先將4.4.45 轉為16進製為 0x04.0x04.0x2D
-
然後宏 KERNEL_VERSION(0x04,0x04,0x2D)展開之後得到04042D 這個16進位制的數字
-
最後將0x040423 轉化為十進位制就得到了十進位制的263213 即為 LINUX_VERSION_CODE的值263213
-
可以利用下面的程式碼根據linux核心版本號的不同呼叫不同的API函式:
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
....//3.10.0 之前的API呼叫
#else
....//3.10.0 版本之後的API呼叫
#endif