¿Hay algún tipo de número de serie disponible desde el nivel del sistema operativo?

12

Me gustaría identificar qué instancia de hardware RaspberryPI se está iniciando en mi red.

Tengo planes para usar MUCHOS (no solo 10) de ellos como clientes en una solución más grande, pero me gustaría reutilizar la imagen SD para todos ellos.

¿Hay alguna forma de identificarlos entre sí, a menos que coloque algún código de serie dekinkin en un archivo en algún lugar del sistema operativo?

Por cierto. Utilizo MONO / C # para programar, pero tengo curiosidad por saber si el PI tiene un número de serie de hardware de alguna manera o no.

BerggreenDK
fuente

Respuestas:

3

En C # Mono estoy haciendo esto:

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

Y recuperar en cualquier lugar con:

var rpiSerial = GetRpiSerial();
Tico Fortes
fuente
Esta respuesta es incluso mejor que la respuesta original de Remo, ya que incluye la solución en C # como pedí originalmente. Muy amable de su parte para producir este para todos nosotros.
BerggreenDK
13

Puede usar el mismo número usado para comprar la licencia MPEG.

Citando la clave de licencia MPEG-2 :

Para encontrar su número de serie, escriba cat /proc/cpuinfoen la línea de comando como se muestra a continuación:

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 es lo que estás buscando

Remo.D
fuente
Ahh, buena idea. ¿Tienes alguna idea de cómo recuperar esto de Mono?
BerggreenDK
El único problema es que el cliente / usuario tendrá que comprar la licencia MPEG solo para ese propósito.
BerggreenDK
@BerggreenDK. No estoy seguro de lo que quieres decir. El número de serie que aparece con el comando cpuinfo es el número de serie de la CPU. Está ahí si tiene una licencia MPEG o no.
Remo.D
1
No, el '00000 ... d' solo está ahí como ejemplo. Intenta hacerlo en tu frambuesa y obtendrás el tuyo.
Remo.D
1
Es un código de hardware que es único para cualquier Raspberry (tengo dos de ellos), no está basado en archivos. Me hubiera sorprendido si lo tuvieras de Virtual Box.
Remo.D
6

Puede usar la dirección MAC del adaptador de ethernet; use una declaración como esta para extraerla en una variable:

mysn=`ifconfig eth0 | grep HWaddr |sed -e's/.*HWaddr\s\(\S*\).*/\1/'`
TomG
fuente
Una buena sugerencia. Si tan solo pudiera ver cómo debería recuperar esto de MONO. Pero la idea es genial. Había olvidado por completo pensar en la LAN a bordo. Los números MAC son suficientes de hecho. Solo necesito descubrir cómo extraer esa información de la biblioteca System.Net.
BerggreenDK
Encontré esto: stackoverflow.com/questions/850650/…
BerggreenDK
1
Tenga en cuenta que puede modificar la dirección MAC de la frambuesa. Esta es una solución viable solo si no necesita estar absolutamente seguro de la identidad de su Raspberry Pi. El código de serie de la CPU que se puede obtener con cpuinfo no se puede modificar.
Remo.D
bueno, ese es un gran punto también. Sí, MAC se puede cambiar en algunos equipos de LAN. Es verdad. Pero estoy muy preocupado de que alguien clone mi SDCARD y luego la use para múltiples clientes sin mi conocimiento. Eso sería malo para mi arquitectura de la solución.
BerggreenDK
Lo siento @TomG. Realmente aproveché tu idea y la voy a usar como "alternativa" para detectar dispositivos que no sean hardware Raspberry PI, ya que mis programas cliente serán multiplataforma. Desearía poder marcar dos respuestas en este caso.
BerggreenDK