如何从运行的内核模块确定Linux内核是32位还是64位

时间:2012-12-12 14:39:04

标签: c linux linux-kernel operating-system kernel

这是合约。我想编写一个内核模块,它取决于内核类型(32位或64位)。 当且仅当内核是32位并且如果内核是64位时应包含的某些代码行,我希望将一些代码行包​​含在模块中。

是否有像#if LINUX_VERSION_CODE<对于这种情况,KERNEL_VERSION(2,6,26)?

3 个答案:

答案 0 :(得分:6)

您可以检查CONFIG_X86_64和CONFIG_X86_32 - 如果拱门是x86。对于其他架构,有类似的CONFIG选项。

答案 1 :(得分:0)

在终端上查看

$ 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

如果系统为32-bit,当然可以在64-bit系统上运行multilib个应用。但您可以查看系统本身的某些部分,以验证它是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/

答案 2 :(得分:0)

如果使用gcc,您可以将_LP64__LP64__作为#define进行1测试:

  

这些宏定义为值1,if(且仅当)编译是针对目标的,其中long int和指针 使用64位和int使用32位。

对于gcc的预定义宏,请在此处阅读:http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html