Wie kann ich unter GNU / Linux den Namen meines CPU-Modells bestimmen?

2

Ich kenne verschiedene Möglichkeiten, um Informationen über meine CPU in einer GNU / Linux-Umgebung zu erhalten, von cat /proc/cpuidzu verschiedenen Dienstprogrammen, siehe z. B. hier

Keiner von ihnen scheint mir jedoch den Namen meines CPU- Modells zu nennen . Ich meine, ich habe (der Diskussion zuliebe) einen Intel Pentium 4 530J . Aber die Art von Informationen, die ich darüber erhalten kann, ist im Grunde genommen: Hersteller / Lieferant, Familienmodell-Schritt, Taktrate (nun ja, einige weitere Felder, aber dies sollte ausreichen, um die Marke, die ich denke, eindeutig zu identifizieren).

Unter Windows gibt es kostenlose (wie bei Bier) Hilfsprogramme wie HWInfo, die uns den Markennamen mitteilen (in meinem Fall muss die Nummer 530 irgendwo erscheinen). Gibt es nicht auch für Linux etwas Ähnliches?

Anmerkungen:

  • Bitte keine grafische Umgebung. Streng Kommandozeile ...
  • HWInfo erkennt die CPU als "Intel Pentium 4 530J (Prescott, E0)". Das ist im Grunde, was ich sehen möchte.
einpoklum
quelle

Antworten:

4

Das einfachste, einheimische wäre cat /proc/cpuinfo|grep vendor_id

[geek@phoebe ~]$ cat /proc/cpuinfo | grep vendor_id
vendor_id       : GenuineIntel
vendor_id       : GenuineIntel

(Es wird zweimal gedruckt, da dies ein Dual-Core-System ist.)

Interessanter diese dosen't mit meinem Raspi arbeiten, die ein ganz anderes Format hat

Ich glaube nicht, dass es in vielen Distributionen vorinstalliert ist, aber lshw würde es auch schaffen. Verwenden Sie die -class cpuFlagge, um nur die relevanten Informationen auszugeben

 sudo lshw -class cpu
  *-Zentralprozessor
       Beschreibung: CPU
       produkt: Celeron (Füllen Von OEM)
       Anbieter: Intel Corp.
       physikalische id: 34
       Businfo: CPU @ 0
       Version: Intel (R) Celeron (R) CPU N2807 @ 1,58 GHz
       Steckplatz: BUCHSE 0
       Größe: 1960MHz
       Kapazität: 2400 MHz
       Breite: 64 Bit
       Takt: 83MHz

Ebenso funktioniert das bei meinem Himbeer-Pi nicht ganz so. Dies sollte jedoch mit x86-Boxen konsistent sein.

Der entsprechende AMD-Herstellername für lshw lautet Advanced Micro Devices (AMD) und die / proc / cpuinfo-Anzeige für vendor_id lautet AuthenticAMD

(Eine vollständige Liste der vendor_ids finden Sie hier )

Kurz gesagt, die Herstellerflagge sollte die "Marke" und die Produktflagge sollte angeben, als was sie verkauft wird.

Geselle Geek
quelle
1
Die Implementierung der /proc/cpuinfovirtuellen Datei ist in den architekturspezifischen Teilen des Linux-Kernels enthalten. Deshalb sieht es auf ARM und MIPS anders aus und so weiter.
Daniel B
Das löst mein Problem nicht. In beiden Fällen enthält die Ausgabe nicht den Markennamen. GenuineIntelsagt mir überhaupt nicht viel und sudo lshw -class cpu | grep version:ergibt 15.4.1(das ist Family.Model.Stepping).
Einpoklum
Nicht Version, Anbieter. GenuineIntel ist die Hersteller-ID für Intel
Journeyman Geek
2
Ich denke, er möchte den Modellnamen, nicht den Markennamen.
Daniel B
@DanielB: Was lshw auch ausgibt - seltsam, dass sein System nicht funktioniert, aber ich nehme an, ich brauche eine größere Stichprobe.
Geselle Geek
0

Nun, auf Wikipedia gibt es ein Beispiel ( nur x86_64 ) für eine Assembly-Auflistung zu diesem Zweck:

.section .data

s0 : .asciz "Processor Brand String: %.48s\n"
err : .asciz "Feature unsupported.\n"

.section .text

.global main
.type main,@function
.align 32
main:
    pushq   %rbp
    movq    %rsp,   %rbp
    subq    $48,    %rsp
    pushq   %rbx

    movl    $0x80000000,    %eax
    cpuid

    cmpl    $0x80000004,    %eax
    jl  error

    movl    $0x80000002,    %esi
    movq    %rsp,   %rdi

.align 16
get_brand:
    movl    %esi,   %eax
    cpuid

    movl    %eax,   (%rdi)
    movl    %ebx,   4(%rdi)
    movl    %ecx,   8(%rdi)
    movl    %edx,   12(%rdi)

    addl    $1, %esi
    addq    $16,    %rdi
    cmpl    $0x80000004,    %esi
    jle get_brand

print_brand:
    movq    $s0,    %rdi
    movq    %rsp,   %rsi
    xorb    %al,    %al
    call    printf

    jmp end

.align 16
error:
    movq    $err,   %rdi
    xorb    %al,    %al
    call    printf

.align 16
end:
    popq    %rbx
    movq    %rbp,   %rsp
    popq    %rbp
    xorl    %eax,   %eax
    ret

Wirf diesen Code in eine Datei cpumodel.Sund kompiliere ihn mit gcc / gas:

gcc cpumodel.S -o cpumodel

Danach können Sie es ausführen:

$ ./cpumodel
Processor Brand String: Intel(R) Core(TM)2 Duo CPU     T7300  @ 2.00GHz

Diese Methode wird bei Ihnen wahrscheinlich nicht funktionieren , da Pentium 4 / D-CPUs anscheinend auf diese Weise keinen Modellnamen zur Verfügung haben. Wie Sie hier sehen können , enthalten die CPUID-Daten nicht das, was Sie wollen.

Daniel B
quelle
Wenn ich versuche, es zu kompilieren, erhalte ich: cpumodel.S: Assembler messages:\n cpumodel.S:12: Error: bad register name `%rbp'\n cpumodel.S:13: Error: bad register name `%rsp'etc.
einpoklum
Auch ist es nicht wahr, dass nichts anderes wird. HWInfo verwendet eine Datenbank mit Markennamen und ist nicht nur auf das angewiesen, was die CPU selbst meldet.
Einpoklum
1
Datenbanken funktionieren offensichtlich, aber nur, wenn sie enthalten, was Sie nachschlagen möchten. Sie haben in der anderen Antwort angegeben, dass es nicht funktioniert. Anscheinend ist dieser Code nur für x86-64, tut mir leid. Da /proc/cpuinfodie gleichen Informationen enthalten, bezweifle ich, dass sie irgendetwas Nützliches ergeben.
Daniel B
Oh, im Gegenteil - es funktioniert mit HWInfo unter Windows ...
einpoklum
Ja na und Was lässt Sie denken, dass der Linux-Kernel eine integrierte CPU-Modelldatenbank hat? Wenn Ihre CPU diese CPUID-Abfrage nicht unterstützt (möglicherweise, weil sie im BIOS-Setup deaktiviert ist), haben Sie einfach Pech.
Daniel B