GNU Linuxでプロセッサシリアル番号(PSN)を確実に取得する方法を知りました。今のところ、私はそれは私にPSN: A7060200FFFBEBBF
を与えるこのC/C++ Linuxでプロセッサシリアル番号を取得する方法
#include <stdio.h>
#include <cpuid.h>
unsigned int level = 1;
unsigned eax = 3 /* processor serial number */, ebx = 0, ecx = 0, edx = 0;
__get_cpuid(level, &eax, &ebx, &ecx, &edx);
// byte swap
int first = ((eax >> 24) & 0xff) | ((eax << 8) & 0xff0000) | ((eax >> 8) & 0xff00) | ((eax << 24) & 0xff000000);
int last = ((edx >> 24) & 0xff) | ((edx << 8) & 0xff0000) | ((edx >> 8) & 0xff00) | ((edx << 24) & 0xff000000);
printf("PSN: %08X%08X", first, last);
を使用してい
、
sudo dmidecode | grep -P '^\s+ID: ([0-9A-F]{2}){7}[0-9A-F]{2}$'
出力と一致
:私は唯一のIntel Core上でテストID: A7 06 02 00 FF FB EB BF
Iプロセッサ、おそらくそれはこのタイプのCPUのためだけに働いています。
「シリアル番号」は同一のCPUモデルで同じであることがわかっており、一意ではありません。
また、私はこれを達成する方法を期待しています。これは、シェルコマンドを実行して出力を解析することに依存しません。
・ホープ[この](http://stackoverflow.com/questions/6491566/getting-the-machine-serial-number-and-cpu-を解析することができますid-using-cc-in-linux)が役立ちます。 – GAVD
ありがとう、私のコードスニペットはすでにその答えに触発されていますが、残念ながらIntel Pentum IIIのためです。彼はx86用のasm volatileコードも使用していますが、これは避けています。彼は同じ値を使用していなかった、使用されたレベル0、私のために働いていなかった、彼は別のレジスタを使用していたエックスedx、私はエックスedx。 – Annihil
AMDでは動作しますが、すべてのARMプロセッサで動作しません –