4

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

对于这种情况,是否有类似 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26) 的内容?

4

3 回答 3

6

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

于 2012-12-12T14:51:03.760 回答
1

在终端上检查这个

$ 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-bitmultilib. 但是您可以查看系统本身的某些部分来验证它是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/

于 2012-12-12T14:54:47.370 回答
0

如果使用你可以gcc测试_LP64或被'ed 为:__LP64__#define1

如果(且仅当)编译是针对 long int 和pointer使用 64 位且 int 使用 32 位的目标时,这些宏被定义为值为 1。

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

于 2012-12-12T14:55:06.333 回答