[英]How to determine whether a linux kernel is 32bit or 64bit from a running kernel module
這是交易。 我想編寫一個內核模塊,它取決於內核類型(32位或64位)。 當且僅當內核為32位並且如果內核為64位時應包含的某些代碼行,我希望將一些代碼行包含在模塊中。
對於這種情況,有沒有類似#if LINUX_VERSION_CODE <KERNEL_VERSION(2,6,26)的內容?
您可以檢查CONFIG_X86_64和CONFIG_X86_32 - 如果拱是x86。 對於其他架構,有類似的CONFIG選項。
在終端上檢查這個
$ uname -m
x86_64
檢查二進制文件以確定系統
$ file /usr/bin/file
/usr/bin/file: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.8, dynamically linked (uses shared libs), stripped
如果系統是multilib
,當然可以在64-bit
系統上運行32-bit
應用程序。 但是你可以查看系統本身的部分內容,以驗證它是64-bit
。 例如,像這樣
$file /sbin/init
/sbin/init: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.16, dynamically linked (uses shared libs), stripped
參考
如果使用gcc
你可以測試_LP64
或__LP64__
被#define
編輯為1
:
這些宏定義為值1,if(且僅當)編譯是針對目標的,其中long int和指針都使用64位而int使用32位。
對於gcc
的預定義宏,請在此處閱讀: http : //gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.