カーネルコードをビルドするときのLinux/Androidカーネルのアーキテクチャ情報の検索

カーネルコードをビルドするときのLinux/Androidカーネルのアーキテクチャ情報の検索

カーネルファイルを修正しています。 32ビットアーキテクチャの場合は1つの関数をロードし、64ビットアーキテクチャの場合は別の関数をロードしたいと思います。ビルド時にカーネルからアーキテクチャ情報を取得し、それに基づいてさまざまな機能をロードすることは可能ですか?スキーマ情報はどこで保存または取得されますか?ありがとうございます。

答え1

ターゲットマシン自体でコンパイルすると、uname -mほとんどのマシンで必要なものが得られます。たとえば、64ビットデスクトップの場合:

$ uname -m
x86_64

これは、マシンが64ビットか32ビットかを明示的に知らせません。これは解釈する必要がある文字列だけです(たとえば、一連のif/then文または単一のcase文を使用)。

以下はshの(非常におおよその)例です。

machine=$(uname -m)
bits=0

case "$machine" in
       *64*) bits=64 ;;
  *[3-6]86*) bits=32 ;;
    *armv7*) bits=32 ;;  # replace with a pattern to match your 32-bit android cpu
    *armv8*) bits=64 ;;  # replace with a pattern to match your 64-bit android cpu
esac

[ "$bits" = 0 ] && echo "Unknown machine type" && exit 1

関連情報