C'è qualche tipo di numero seriale disponibile a livello di sistema operativo?


12

Vorrei identificare quale istanza hardware RaspberryPI si sta avviando sulla mia rete.

Ho in programma di usarne MOLTO (non solo 10) come client in una soluzione più ampia, ma vorrei riutilizzare l'immagine SD per tutti.

Esiste un modo per identificarli l'uno dall'altro, a meno che non inserisca un codice seriale somekinda in un file da qualche parte nel sistema operativo?

Btw. Uso MONO / C # per la programmazione, ma sono solo curioso di sapere se il PI ha un numero seriale hardware in qualche modo o no?

Risposte:


3

In C # Mono lo sto facendo:

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

E recupera ovunque con:

var rpiSerial = GetRpiSerial();

Questa risposta è persino migliore della risposta originale di Remo, poiché include la soluzione in C # come avevo chiesto inizialmente. Molto gentile da parte tua a produrlo per tutti noi.
BerggreenDK

13

È possibile utilizzare lo stesso numero utilizzato per l'acquisto della licenza MPEG.

Citando la chiave di licenza MPEG-2 :

Per trovare il numero di serie, digitare cat /proc/cpuinfonella riga di comando come mostrato di seguito:

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 è quello che stai cercando.


Ah, bella idea. Hai idea di come recuperarlo da Mono?
BerggreenDK,

L'unico problema è che il cliente / utente dovrà acquistare la licenza MPEG solo per questo scopo.
BerggreenDK,

@BerggreenDK. Non sono sicuro cosa intendi. Il numero seriale che appare con il comando cpuinfo è il numero seriale della CPU. È lì che tu abbia una licenza MPEG o meno.
Remo.D

1
No, la '00000 ... d' è lì solo come esempio. Prova a farlo sul tuo lampone e otterrai il tuo.
Remo.D

1
È un codice hardware univoco per qualsiasi Raspberry (ne ho due), non è basato su file. Sarei stato sorpreso se lo avessi dalla Virtual Box.
Remo.D

6

È possibile utilizzare l'indirizzo MAC dell'adattatore Ethernet; usa un'istruzione simile a questa per estrarla in una variabile:

mysn=`ifconfig eth0 | grep HWaddr |sed -e's/.*HWaddr\s\(\S*\).*/\1/'`

Un bel suggerimento. Se solo potessi vedere come dovrei recuperarlo da MONO. Ma l'idea è fantastica. Mi ero completamente dimenticato di pensare alla LAN di bordo. I numeri MAC sono davvero abbastanza. Devo solo capire come estrarre tali informazioni dalla libreria System.Net.
BerggreenDK,


1
Si noti che è possibile modificare l'indirizzo MAC del lampone. Questa è una soluzione praticabile solo se non è necessario essere assolutamente sicuri dell'identità di Raspberry Pi. Il codice seriale della CPU ottenibile con cpuinfo non è modificabile.
Remo.D

ok, anche questo è un ottimo punto. Sì, il MAC può essere modificato su alcuni hardware LAN. È vero. Ma sono profondamente preoccupato che qualcuno clonerebbe la mia SDCARD e la userebbe per più clienti a mia insaputa. Sarebbe un male per la mia architettura della soluzione.
BerggreenDK,

Mi dispiace @TomG Ho davvero apprezzato la tua idea e la userò come "fallback" per rilevare dispositivi che non utilizzano hardware Raspberry PI poiché i miei programmi client saranno multipiattaforma. Vorrei poter segnare due risposte in questo caso.
BerggreenDK,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.