Existe algum tipo de número de série disponível no nível do sistema operacional?

12

Gostaria de identificar qual instância de hardware RaspberryPI está inicializando na minha rede.

Tenho planos de usar muitos (não apenas 10) deles como clientes em uma solução maior, mas gostaria de reutilizar a imagem SD para todos eles.

Existe alguma maneira de identificá-los um do outro, a menos que eu coloque algum código serial em um arquivo em algum lugar no sistema operacional?

Btw. Eu uso o MONO / C # para programação, mas estou curioso para saber se o PI tem um número de série de hardware de alguma forma ou não?

BerggreenDK
fonte

Respostas:

3

Em C # Mono, estou fazendo o seguinte:

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 recupere em qualquer lugar com:

var rpiSerial = GetRpiSerial();
Tico Fortes
fonte
Essa resposta é ainda melhor do que a resposta original de Remo, pois inclui a solução em C #, como originalmente pedi. Muito gentil de sua parte produzir este para todos nós.
amigos estão
13

Você pode usar o mesmo número usado para comprar a licença MPEG.

Citando a chave de licença MPEG-2 :

Para encontrar o seu número de série, digite cat /proc/cpuinfona linha de comando, como mostrado abaixo:

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 é o que você está procurando.

Remo.D
fonte
Ahh, boa ideia. Você tem alguma idéia de como recuperar isso do Mono?
precisa
O único problema é que o cliente / usuário terá que comprar a licença MPEG apenas para esse fim.
precisa
@BerggreenDK. Não tenho certeza do que você quer dizer. O número de série que aparece com o comando cpuinfo é o número de série da CPU. Está lá se você tem uma licença MPEG ou não.
Remo.D
1
Não, o '00000 ... d' é apenas um exemplo. Tente fazê-lo com sua framboesa e você receberá a sua.
Remo.D
1
É um código de hardware exclusivo para qualquer Raspberry (eu tenho dois), não é baseado em arquivos. Eu ficaria surpreso se você o tivesse na Virtual Box.
Remo.D
6

Você pode usar o endereço MAC do adaptador Ethernet; use uma declaração parecida com esta para extraí-la em uma variável:

mysn=`ifconfig eth0 | grep HWaddr |sed -e's/.*HWaddr\s\(\S*\).*/\1/'`
TomG
fonte
Uma boa sugestão. Se eu pudesse ver como eu deveria recuperar isso do MONO. Mas a ideia é ótima. Esqueceu completamente de pensar na LAN a bordo. Os números MAC são suficientes. Só preciso descobrir como extrair essas informações da biblioteca System.Net.
21813 BerggreenDK
Encontrei isso: stackoverflow.com/questions/850650/…
BerggreenDK
1
Observe que você pode modificar o endereço MAC da framboesa. Essa é uma solução viável apenas se você não precisar ter certeza absoluta da identidade do seu Raspberry Pi. O código de série da CPU que pode ser obtido com o cpuinfo não é alterável.
Remo.D
Ok, isso também é um ótimo ponto. Sim, o MAC pode ser alterado em alguns hardwares da LAN. Isso é verdade. Mas estou preocupado que alguém clone meu SDCARD e depois o use para vários clientes sem meu conhecimento. Isso seria ruim para minha arquitetura da solução.
precisa
Desculpe, TomT, eu realmente aproveitei a sua idéia e vou usá-la como "substituta" para detectar dispositivos que não são hardware Raspberry PI, pois meus programas-cliente terão plataformas cruzadas. Eu gostaria de poder marcar duas respostas neste caso.
BerggreenDK