ID hardware Raspberry Pi


22

Esiste la possibilità di memorizzare un ID hardware per ciascun dispositivo basato su Raspberry Pi?

Diciamo che ho 10 dispositivi personalizzati basati sulla piattaforma Raspberry Pi che vengono utilizzati per attività distribuite. Ad un certo punto, per qualche motivo, voglio cancellare tutto da uno di essi. Come posso ri-identificare il consiglio dopo quello?

Pi ha un chip che memorizza un ID univoco come un numero seriale per ogni scheda? In caso contrario, posso aggiungere una memoria (di sola lettura) (che può memorizzare un valore semplice anche quando non è alimentato) per poter comunicare con esso tramite GPIO in qualsiasi momento?

Quali sono le alternative?


Per favore, non fare una domanda, quindi sulla base della risposta decidi che vuoi davvero fare o fare un'altra domanda. Questo fa perdere tempo alle persone a cui stai chiedendo aiuto. Per questo motivo, ho ripristinato la modifica. Se hai un'altra domanda, fai un'altra domanda.
Riccioli d'oro

@goldilocks: hai ragione. Avrei dovuto dividere questa domanda in due.
Alexandru Irimiea,

Che dire di "ZERO"? nessun indirizzo MAC qui ... qualsiasi altro ID univoco?
fcm

Risposte:


23

Sì, ogni scheda ha un numero di serie. I metodi per recuperarlo sono descritti qui: Come posso ottenere il numero seriale?


Questa non è una risposta completa, poiché si occupa solo di Linux e non menziona affatto Windows. Sarebbe interessante sapere come farlo anche su Windows.
Andrew Savinykh,

@Savinykh ... linux e Mac OS. Awk, grep e cut sono strumenti disponibili su entrambi i sistemi operativi, ma sono d'accordo che Windows non sia disponibile in quanto privo di questi utili strumenti da riga di comando.
Ripat

9
Non è possibile eseguire Mac OS sul Pi, quindi non è rilevante. È possibile eseguire solo l'edizione IOT senza testa Win10 sul Pi credo. Realisticamente il 99% degli utenti Pi utilizza Linux.
pjc50,

@ripat, puoi eseguire Mac OS su Raspberry Pi? In qualche modo ne dubito.
Andrew Savinykh,

6

Ecco uno più facile da usare: indirizzo MAC tramite configurazione automatica NDP IPv6. Questo è un metodo universale applicabile a qualsiasi interfaccia di rete.

Ogni scheda di rete, incluso quella USB utilizzata sul Pi, ha un indirizzo MAC a 48 bit, ad esempio 14:cf:92:20:26:3c.

Ogni indirizzo MAC a 48 bit ha un mapping uno a uno univoco a un indirizzo EUI-64 mascherando gli ultimi due bit nel terzo byte ( 92a 90) e inserendo i byte fefftra il terzo e il quarto byte. Il suddetto 48 bit MAC può essere mappato EUI-64: 14cf:90fe:ff20:263c.

Il processo di configurazione automatica dell'indirizzo IPv6 utilizza il protocollo NDP per rilevare l'indirizzo di rete a 64 bit nell'indirizzo a 128 bit. Questo processo fornirà a tutti i tuoi dispositivi all'interno della stessa rete lo stesso prefisso a 64 bit. Il summenzionato EUI-64 viene utilizzato per popolare l'indirizzo della stazione a 64 bit, ottenendo un indirizzo IPv6 univoco globale a 128 bit. Pertanto, se si dispone del prefisso di rete IPv6 2001:470:d:472::/64, la scheda di rete summenzionata, se utilizzata in questa rete, avrà la garanzia di disporre di un indirizzo instradabile a livello globale IPv6 2001:470:d:472:14cf:90fe:ff20:263c. Fintanto che il tuo strumento di gestione è configurato per utilizzare IPv6, inserisci semplicemente questo indirizzo e dovrebbe andare bene.


questo è il modo migliore di rispondere a questa domanda secondo me. MAC è unico. puoi farlo un po 'di hash se vuoi, ma fare semplicemente affidamento sull'indirizzo MAC può essere fatto su qualsiasi piattaforma.
Havnar,

@Havnar Meglio di così, questo traduce l'indirizzo MAC direttamente in un indirizzo IPv6 instradabile a livello globale che può essere utilizzato per inviare pacchetti direttamente al Pi (qualsiasi protocollo a livello di applicazione, purché funzioni su IPv6 che è la maggior parte di essi, funzionerà qui)
Maxthon Chan,

Non conosco molte persone che usano realmente ipv6 a casa o in produzione davvero.
Havnar,

@Havnar Ho implementato il tunnel IPv6 nella mia rete domestica al punto che tutti i dispositivi all'interno della mia casa, ad eccezione del router stesso, possono funzionare senza IPv4 abilitato.
Maxthon Chan,

5

Come nell'altra risposta, il Pi ha un ID univoco, correlato al MAC.

In pratica è più conveniente che un networking abbia un unico hostname. Uso il seguente script per impostare i nomi in base CPUID.

#!/bin/bash
# script to set Pi hostname based on MAC (or Serial number)
# 2017-08-18
# This script should be run as root (or with sudo) to change names
# If run by a user it will report changes, but will NOT implement them
# Works for PiB (all models), Pi2, Pi3, PiZeroW with on board networking
# PiA models will set a unique Name based on Serial number

PDIR="$(dirname "$0")"  # directory containing script
CURRENT_HOSTNAME=$(cat /etc/hostname)
# Find MAC of eth0, or if not exist wlan0
if [ -e /sys/class/net/eth0 ]; then
    MAC=$(cat /sys/class/net/eth0/address)
elif [ -e /sys/class/net/enx* ]; then
    MAC=$(cat /sys/class/net/enx*/address)
else
    MAC=$(cat /sys/class/net/wlan0/address)
fi

# NOTE the last 6 bytes of MAC and CPUID are identical
CPUID=$(awk '/Serial/ {print $3}' /proc/cpuinfo | sed 's/^0*//')
echo "Current Name" $CURRENT_HOSTNAME
echo "MAC" $MAC
# If you want to specify hostnames create a file PiNames.txt with MAC hostname list e.g.
# b8:27:eb:01:02:03 MyPi
# If not found a unique Name based on Serial number will be set
NEW_HOSTNAME=$(awk /$MAC/' {print $2}' $PDIR"/PiNames.txt")
echo "Name found" $NEW_HOSTNAME
if [ $NEW_HOSTNAME == "" ]; then
    NEW_HOSTNAME="pi"$CPUID
fi

if [ $NEW_HOSTNAME = $CURRENT_HOSTNAME ]; then
    echo "Name already set"
else
    echo "Setting Name" $NEW_HOSTNAME
    echo $NEW_HOSTNAME > /etc/hostname
    sed -i "/127.0.1.1/s/$CURRENT_HOSTNAME/$NEW_HOSTNAME/" /etc/hosts
fi

Sebbene, ovviamente, As e Zeros, senza una connessione Ethernet, non avranno un MAC da utilizzare! Un adattatore WiFi lo farà, ma spostando l'adattatore tra Pis significa che l'ID univoco seguirà l'adattatore!
SlySven,

@SlySven Non ho uno Zero (e non riesco ancora a pensare ad alcun motivo valido), ma dovrei modificare il mio script per ignorare il MAC mancante. Presumo che non ci saranno/sys/class/net/eth0/address
Milliways il

Un altro modo per identificare qualsiasi Pi di un ID univoco è quello di ottenere la sua dbus macchina-id che non è dipendente interfaccia cat /var/lib/dbus/machine-id : più
ripat

... ho dimenticato di accreditare il link "leggi di più" nel mio commento sopra al suo autore: Lennart Poettering, il padre di systemd.
Ripat

2

Se non avesse un ID (che ha, come sembrerebbe, vedi la risposta di Ralph ), un'alternativa potrebbe essere un chip con numero seriale I2C. Questi sono davvero facili da collegare (interfaccia seriale) e forniscono un numero seriale univoco.

Qualche esempio:

  • Numero seriale in silicone I²C / SMBus di Maxim, ad esempio DS2401, DS28CM00
  • Prodotti con chip ID univoci di Microchip, ad es. 24AA02UID, 24AA025UID
  • EEPROM I²C autoprogrammata

Potresti anche usare un chip EEPROM I2C con socket e programmare un ID univoco in questo. Gli AT24C32 sono abbastanza economici se acquistati all'ingrosso.
Maxthon Chan,
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.