Gibt es eine Seriennummer auf Betriebssystemebene?

12

Ich möchte feststellen, welche RaspberryPI-Hardware-Instanz in meinem Netzwerk gestartet wird.

Ich habe vor, eine Menge (nicht nur 10) von ihnen als Kunden in einer größeren Lösung zu verwenden, aber ich möchte das SD-Image für alle wiederverwenden.

Gibt es eine Möglichkeit, sie voneinander zu unterscheiden, es sei denn, ich füge irgendwo im Betriebssystem einen Kinda-Seriencode in eine Datei ein?

Btw. Ich programmiere mit MONO / C #, bin aber nur neugierig, ob der PI irgendwie eine Hardware-Seriennummer hat oder nicht?

BerggreenDK
quelle

Antworten:

3

In C # Mono mache ich Folgendes:

private string GetRpiSerial()
{
    CommandSync("cat /proc/cpuinfo | grep Serial | cut -d ':' -f 2 > /home/pi/serial.txt");

    using (var sr = new StreamReader("/home/pi/serial.txt"))
    {
        return sr.ReadLine().Trim();
    }
}

public static void CommandSync(string cmd, string args)
{
    var info = new ProcessStartInfo();
    info.FileName = "/bin/bash";
    info.Arguments = string.Format("-c \"sudo {0} {1}\"", cmd, args);
    info.UseShellExecute = false;
    info.RedirectStandardOutput = true;

    var p = Process.Start(info);
    p.WaitForExit();
}

Und überall abrufen mit:

var rpiSerial = GetRpiSerial();
Tico Fortes
quelle
Diese Antwort ist sogar besser als Remos ursprüngliche Antwort, da sie die Lösung in C # enthält, wie ich ursprünglich gefragt habe. Sehr nett von Ihnen, dieses für uns alle zu produzieren.
BerggreenDK
13

Sie können die gleiche Nummer verwenden, die für den Kauf der MPEG-Lizenz verwendet wurde.

Zitieren des MPEG-2-Lizenzschlüssels :

Um Ihre Seriennummer zu finden, geben Sie cat /proc/cpuinfoin der Befehlszeile Folgendes ein:

pi@raspberrypi:~$ cat /proc/cpuinfo

Processor       : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS        : 697.95
Features        : swp half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xb76
CPU revision    : 7
Hardware        : BCM2708
Revision        : 1000002
Serial          : 000000000000000d

Serial ist was Sie suchen.

Remo.D
quelle
Ahh, nette Idee. Haben Sie eine Ahnung, wie Sie dies von Mono abrufen können?
BerggreenDK
Das einzige Problem ist, dass der Client / Benutzer die MPEG-Lizenz nur für diesen Zweck allein kaufen muss.
BerggreenDK
@BerggreenDK. Nicht sicher was du meinst. Die mit dem Befehl cpuinfo angezeigte Seriennummer ist die Seriennummer der CPU. Es ist da, ob Sie eine MPEG-Lizenz haben oder nicht.
Remo.D
1
Nein, das '00000 ... d' ist nur ein Beispiel. Versuchen Sie es mit Ihrer Himbeere und Sie werden Ihre bekommen.
Remo.D
1
Es ist ein Hardware-Code, der für jede Himbeere einzigartig ist (ich habe zwei davon), er ist nicht dateibasiert. Ich wäre überrascht gewesen, wenn Sie es von Virtual Box gehabt hätten.
Remo.D
6

Sie können die MAC-Adresse des Ethernet-Adapters verwenden. Verwenden Sie eine Anweisung wie diese, um sie in eine Variable zu extrahieren:

mysn=`ifconfig eth0 | grep HWaddr |sed -e's/.*HWaddr\s\(\S*\).*/\1/'`
TomG
quelle
Ein netter Vorschlag. Wenn ich nur sehen könnte, wie ich das von MONO zurückholen sollte. Aber die Idee ist großartig. Hatte völlig vergessen, über das Bordnetz nachzudenken. MAC-Nummern sind in der Tat genug. Sie müssen nur herausfinden, wie Sie diese Informationen aus der System.Net-Bibliothek abrufen können.
BerggreenDK
1
Beachten Sie, dass Sie die MAC-Adresse der Himbeere ändern können . Dies ist nur dann eine praktikable Lösung, wenn Sie sich über die Identität Ihres Raspberry Pi nicht absolut sicher sein müssen. Der mit cpuinfo erhältliche CPU-Seriencode kann nicht geändert werden.
Remo.D
Okay, das ist auch ein großartiger Punkt. Ja, MAC kann auf einigen LAN-Geräten geändert werden. Das ist richtig. Ich bin jedoch nur besorgt, dass jemand meine SDCARD klonen und sie dann ohne mein Wissen für mehrere Clients verwenden würde. Das wäre schlecht für meine Architektur der Lösung.
BerggreenDK
Sorry @TomG Ich habe Ihre Idee wirklich gut aufgenommen und werde sie als "Fallback" verwenden, um Geräte zu erkennen, die keine Raspberry PI-Hardware haben, da meine Client-Programme plattformübergreifend sind. Ich wünschte, ich könnte in diesem Fall zwei Antworten markieren.
BerggreenDK