Intelでは結果を見ると、uname -m
OSが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*
。