これが取引です。カーネルタイプ(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
か、次の__LP64__
ようにすることが#define
でき1
ます。
これらのマクロは、コンパイルが long int とポインターの両方が 64 ビットを使用し、int が 32ビットを使用するターゲット用である場合 (およびその場合にのみ)、値 1 で定義されます。
gcc
の定義済みマクロについては、こちらをお読みください: http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html