簡體   English   中英

如何從運行的內核模塊確定Linux內核是32位還是64位

[英]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

參考

http://www.linuxquestions.org/questions/linux-general-1/how-to-check-linux-kernel-is-32-bit-or-64-bit-612352/

如果使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM