私のLinux ARMは32ビットですか、それとも64ビットですか?

私のLinux ARMは32ビットですか、それとも64ビットですか?

Intelでは結果を見ると、uname -mOSが32ビットか64ビットかを知ることができますが、ARMでは次の情報が提供されます。

armv7l

私は推論した

file /usr/bin/ls

32ビットOSを使用していますが、これをより簡単に知る方法は何ですか?

答え1

64ビット対応CPUで32ビットまたは混合オペレーティングシステムを実行できるため、複数の層があります。バラより64ビットカーネルですが、すべての32ビットELF実行可能プロセスが実行されています。詳しく説明しました(x86用に書かれていますが、ほとんどはARMにも適用されます)。

プロセッサのモデル番号はにあります/proc/cpuinfo。たとえば、

$ cat /proc/cpuinfo
Processor       : ARMv7 Processor rev 10 (v7l)

ARMv7(およびそれ以下)は32ビットです。ARMv864ビット命令セットを紹介します。

システムが64ビットバイナリをサポートしていることを確認するには、カーネルアーキテクチャを確認してください。

$ uname -m
armv7l

64ビットプロセッサでは、armv8プロセスuname自体が32ビットプロセスまたは64ビットプロセスの場合aarch64(またはそれ以上)で始まる文字列が表示されます。 (あなたも見ることができますhttps://stackoverflow.com/questions/45125516/possible-values-for-uname-m)

答え2

Richardが指摘したように、バリアントはすべて32ビットなので、重複するラベルなどはarmv7ありません。armv7-32

Linuxシステムでは、通常の実行可能ファイルを調べて、それを簡単に(明示的には確認できませんが)確認できます。

> which bash
/bin/bash
> file /bin/bash
/bin/bash: ELF 32-bit LSB executable, ARM, version 1 (SYSV) ...

64ビットシステムで32ビット実行可能ファイルを実行できるため、「不明」と言います。

/proc/sysまたは出力にとって完璧なことは何もないようです。/proc/cpuinfo 可能いくつかの重要な手がかりを提供してください。何らかの理由で検証を自動化する必要がある場合は、「モデル名」フィールドにマップされるテーブルを作成することが潜在的に合理的なアプローチであるように見えます(「モデル」、「CPUシリーズ」などを含む他のフィールドはオプションとして見えます)。 - Broadcom 2708 ARMv6プロセッサではまったく表示されません。

答え3

ビット数を見るほとんどの方法はarm7 = 32ビットであることを知っているようです。それは本当かもしれませんが、どうですか?

pi@rpi9:~ $ getconf LONG_BIT
32

CPUモデルを見つけるには、主にArchを使用します。

root@rpi4:~# tr '\0' '\n' </proc/device-tree/model;arch
Raspberry Pi Model B Rev 2
armv6l

pi@rpi9:~ $ tr '\0' '\n' </proc/device-tree/model;arch
Raspberry Pi 3 Model B Rev 1.2
armv7l

答え4

以下を試してください。

// -*- compile-command: "gcc -Wall -o sizeof sizeof.c && ./sizeof" -*-

#include <stdio.h>
#include <limits.h>

#define size(t) { t x; printf("%s:\t%3lu bit\n", #t, CHAR_BIT * sizeof x); }

int main (int argc, char *argv[])
{
  size(char);
  size(short);
  size(int);
  size(long);
  size(void*);
  return 0;
}

アドレスサイズはですvoid*

関連情報