这是交易。我想编写一个取决于内核类型(32 位或 64 位)的内核模块。当且仅当内核是 32 位时,我希望将一些代码行包含在模块中,并且当内核是 64 位时应该包含一些代码行。
对于这种情况,是否有类似 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26) 的内容?
这是交易。我想编写一个取决于内核类型(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
如果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
引用自
如果使用你可以gcc
测试_LP64
或被'ed 为:__LP64__
#define
1
如果(且仅当)编译是针对 long int 和pointer都使用 64 位且 int 使用 32 位的目标时,这些宏被定义为值为 1。
对于gcc
的预定义宏,请在此处阅读:http: //gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html