web-dev-qa-db-ja.com

私のLinux ARM 32または64ビットですか?

インテルでは、uname -mの結果を見て、OSが32ビットか64ビットかを確認できますが、ARM=

armv7l

から推論した

file /usr/bin/ls

私は32ビットOSを使用していますが、これを簡単に知る方法を教えてください。

73
Chris Maes

64ビット対応のCPUで32ビットまたは混合オペレーティングシステムを実行できるため、いくつかの段階があります。詳細な説明については 64ビットカーネルですが、すべての32ビットELF実行可能プロセスを実行しています。これはどうですか? を参照してください(x86用に記述されていますが、そのほとんどはarmにも適用されます)。

プロセッサモデルは/proc/cpuinfoにあります。例えば:

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

ARMv7(およびそれ以下)は32ビットです。 ARMv8 は64ビット命令セットを導入します。

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

$ uname -m
armv7l

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

リチャードが指摘するように、armv7バリアントはすべて32ビットであるため、冗長なラベル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/cpuinfomayからの出力は、いくつかの重要な手がかりを提供します。何らかの理由で自動チェックが必要な場合、「モデル名」フィールドにマップされたテーブルを作成することは、1つの潜在的に有効な方法のように見えます(「モデル」、「cpuファミリー」などの他のフィールドはオプションに見えますが、それらは必要ありません) Broadcom 2708 ARMv6プロセッサではまったく表示されません)。

24
goldilocks

「lshw」パッケージをインストールします。

# lshw
...
    description: Computer
    product: Raspberry Pi 3 Model B Rev 1.2
    width: 32 bits
...
11
Ralph

ビット数を確認するほとんどの方法のように見えるのは、何らかの形で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
5
lpaseen

以下を試してください。

// -*- 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*

1
ceving