Existe-t-il un certain numéro de série au niveau du système d'exploitation?

12

Je voudrais identifier l'instance matérielle RaspberryPI qui démarre sur mon réseau.

J'ai l'intention d'utiliser LOT (pas seulement 10) d'entre eux en tant que clients dans une solution plus grande, mais je voudrais réutiliser l'image SD pour tous.

Existe-t-il un moyen de les identifier les uns des autres, à moins que je ne place le code de série somekinda dans un fichier quelque part dans le système d'exploitation?

Btw. J'utilise MONO / C # pour la programmation, mais je suis simplement curieux de savoir si le PI a un numéro de série matériel ou non?

BerggreenDK
la source

Réponses:

3

En C # Mono, je fais ceci:

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();
}

Et récupérez n'importe où avec:

var rpiSerial = GetRpiSerial();
Tico Fortes
la source
Cette réponse est encore meilleure que la réponse originale de Remo, car elle inclut la solution en C # comme je l'avais demandé à l'origine. Très gentil de votre part de produire celui-ci pour nous tous.
BerggreenDK
13

Vous pouvez utiliser le même numéro que celui utilisé pour acheter la licence MPEG.

Citant la clé de licence MPEG-2 :

Pour trouver votre numéro de série, tapez cat /proc/cpuinfosur la ligne de commande comme indiqué ci-dessous:

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 est ce que vous recherchez.

Remo.D
la source
Ahh, bonne idée. Avez-vous une idée de comment récupérer cela de Mono?
BerggreenDK
Le seul problème est que le client / utilisateur devra acheter la licence MPEG uniquement dans ce but.
BerggreenDK
@BerggreenDK. Pas sûr de ce que vous voulez dire. Le numéro de série qui apparaît avec la commande cpuinfo est le numéro de série du CPU. C'est là que vous ayez une licence MPEG ou non.
Remo.D
1
Non, le '00000 ... d' est juste là à titre d'exemple. Essayez de le faire sur votre framboise et vous obtiendrez le vôtre.
Remo.D
1
C'est un code matériel unique pour n'importe quelle framboise (j'en ai deux), il n'est pas basé sur un fichier. J'aurais été surpris si vous l'aviez de Virtual Box.
Remo.D
6

Vous pouvez utiliser l'adresse MAC de l'adaptateur Ethernet; utilisez une instruction quelque chose comme ceci pour l'extraire dans une variable:

mysn=`ifconfig eth0 | grep HWaddr |sed -e's/.*HWaddr\s\(\S*\).*/\1/'`
TomG
la source
Une belle suggestion. Si seulement je pouvais voir comment je devrais récupérer ça de MONO. Mais l'idée est géniale. J'avais complètement oublié de penser au LAN embarqué. Les numéros MAC suffisent en effet. Il suffit de comprendre comment extraire ces informations de la bibliothèque System.Net.
BerggreenDK
Trouvé ceci: stackoverflow.com/questions/850650/…
BerggreenDK
1
Notez que vous pouvez modifier l'adresse MAC de la framboise. Il s'agit d'une solution viable uniquement si vous n'avez pas besoin d'être absolument sûr de l'identité de votre Raspberry Pi. Le code série CPU obtenu avec cpuinfo n'est pas modifiable.
Remo.D
ok, c'est aussi un excellent point. Oui, MAC peut être modifié sur certains matériels LAN. C'est vrai. Mais je crains simplement que quelqu'un clone ma carte SDC et l'utilise ensuite pour plusieurs clients à mon insu. Ce serait mauvais pour mon architecture de la solution.
BerggreenDK
Désolé @TomG J'ai vraiment apprécié votre idée et je vais l'utiliser comme "solution de repli" pour détecter les périphériques qui ne sont pas du matériel Raspberry PI car mes programmes clients seront multiplateformes. J'aimerais pouvoir marquer deux réponses dans ce cas.
BerggreenDK