インテルでは、uname -m
の結果を見て、OSが32ビットか64ビットかを確認できますが、ARM=
armv7l
から推論した
file /usr/bin/ls
私は32ビットOSを使用していますが、これを簡単に知る方法を教えてください。
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/cpuinfo
mayからの出力は、いくつかの重要な手がかりを提供します。何らかの理由で自動チェックが必要な場合、「モデル名」フィールドにマップされたテーブルを作成することは、1つの潜在的に有効な方法のように見えます(「モデル」、「cpuファミリー」などの他のフィールドはオプションに見えますが、それらは必要ありません) Broadcom 2708 ARMv6プロセッサではまったく表示されません)。
「lshw」パッケージをインストールします。
# lshw
...
description: Computer
product: Raspberry Pi 3 Model B Rev 1.2
width: 32 bits
...
ビット数を確認するほとんどの方法のように見えるのは、何らかの形で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
以下を試してください。
// -*- 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*
。