linux 核心 LINUX_VERSION_CODE 和 KERNEL_VERSION 宏定義 版本資訊

yooooooo發表於2024-10-28

由於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 
 

相關文章