Ahududu Pi donanım kimliği


22

Her Ahududu Pi tabanlı cihaz için bir donanım kimliği saklamak için bir olasılık var mı?

Diyelim ki dağıtılmış görevler için kullanılan Raspberry Pi platformuna dayalı 10 özel cihazım var. Bir noktada, bir nedenden ötürü her birini birinden silmek istiyorum. Bundan sonra tahtayı nasıl yeniden tanımlayabilirim?

Pi'nin her kart için seri numarası gibi benzersiz bir kimliği depolayan bir çipi var mı? Değilse, GPIO üzerinden dilediğiniz zaman iletişim kurabilmek için (salt okunur) bir bellek ekleyebilir miyim (bu güç kullanılmadığında bile basit bir değer depolayabilir)?

Alternatifler neler?


Lütfen bir soru sorma, sonra cevabın temelinde, gerçekten sormak istediğine veya başka bir soruyu sormaya karar ver. Bu yardım istediğin insanların zamanını boşa harcıyor. Bu nedenle, düzenlemenizi geri aldım. Başka bir sorunuz varsa, başka bir soru sorun.
goldilocks

@goldilocks: Haklısın. Bu soruyu ikiye bölmeliydim.
Alexandru Irimiea

Peki ya 'SIFIR'? MAC adresi yok ... başka bir benzersiz kimlik var mı?
fcm

Yanıtlar:


23

Evet, her kartın bir seri numarası vardır. Bunu elde etme yöntemleri burada açıklanmaktadır: Seri numarasını nasıl alabilirim?


Bu tam bir cevap değil, çünkü sadece linux'la ilgileniyor ve hiç pencereden söz etmiyor. Bunu da pencerede yapmayı bilmek ilginç olurdu.
Andrew Savinykh

@ Savinykh ... linux ve Mac OS. Awk, grep ve cut, her iki işletim sisteminde de kullanılabilen araçlardır, ancak Windows'un bu kullanışlı komut satırı araçlarına sahip olmadığı için bırakıldığını kabul ediyorum.
ripat

9
Mac OS’i Pi’de çalıştıramazsınız, bu yüzden konuyla alakalı değil. Sadece inandığım Pi'deki başsız Win10 IOT sürümünü çalıştırabilirsin. Gerçekçi bir şekilde Pi kullanıcılarının% 99'u Linux kullanıyor.
pjc50

@ripat, Mac OS'yi ahududu pi'de çalıştırabilir misiniz? Bir şekilde bundan şüpheliyim.
Andrew Savinykh

6

İşte kullanımı daha kolay: IPv6 NDP otomatik yapılandırma yoluyla MAC adresi. Bu, herhangi bir ağ arayüzüne uygulanabilir evrensel bir yöntemdir.

Pi'de kullanılan USB de dahil olmak üzere her NIC, örneğin, 48 bitlik bir MAC adresine sahiptir 14:cf:92:20:26:3c.

Her 48 bitlik bir MAC adresi (üçüncü bayt son iki biti kapalı maskeleyerek bir EUI-64 adrese özel bir bire-bir eşleme vardır 92için 90) ve bayt eklemek feff, üçüncü ve dördüncü bayt arasında. Yukarıda belirtilen 48 bit MAC, EUI-64: ile eşlenebilir 14cf:90fe:ff20:263c.

IPv6 adresi otomatik yapılandırma işlemi, 128 bit adresindeki 64 bit ağ adresini bulmak için NDP protokolünü kullanır. Bu işlem aynı ağ içindeki tüm cihazlarınıza aynı 64 bit ön eki verecektir. Yukarıda belirtilen EUI-64, 64-bit istasyon adresini doldurmak için kullanılır, böylece 128-bit bir global IPv6 adresi elde edilir. Bu nedenle, IPv6 ağ ön ekine sahipseniz 2001:470:d:472::/64, söz konusu ağ kartında bu ağda kullanıldığında, genel olarak yönlendirilebilir bir IPv6 adresine sahip olacaksınız 2001:470:d:472:14cf:90fe:ff20:263c. Yönetim aracınız IPv6'yı kullanacak şekilde yapılandırıldığı sürece, bu adresi bu adrese takmanız yeterlidir.


bence bu soruyu cevaplamanın daha iyi bir yolu. MAC benzersizdir. İsterseniz biraz hash yapabilirsiniz, ancak sadece MAC adresine güvenmek herhangi bir platformda yapılabilir.
Havnar

@Havnar Bundan daha iyisi, bu, MAC adresini doğrudan Pi'ye doğrudan paket göndermek için kullanılabilecek global olarak yönlendirilebilir bir IPv6 adresine çevirir (çoğu, IPv6 üzerinden çalıştığı sürece, herhangi bir uygulama katmanı protokolü çalışacak) burada)
Maxthon Chan

Gerçekten evde ya da üretimde ipv6 kullanan birçok insanı tanımıyorum.
Havnar

@Havnar Ev ağımdaki IPv6 tüneli, yönlendiricinin kendisi hariç, evimdeki tüm aygıtların IPv4 etkinleştirilmeden çalışabileceği noktaya kadar yayıldı.
Maxthon Chan

5

Diğer cevapta olduğu gibi, Pi de MAC ile ilgili olan benzersiz bir kimliğe sahiptir.

Uygulamada, ağ oluşturma işleminin benzersiz olması daha uygundur hostname. İsimleri ayarlamak için aşağıdaki betiği kullanıyorum 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

Tabii ki, As ve Sıfırlar, Ethernet bağlantısı olmadan, kullanmak için bir MAC olmayacak! Bir WiFi bağdaştırıcısı olacaktır, ancak bağdaştırıcıyı Pis arasında hareket ettirmek, benzersiz kimliğin bağdaştırıcıyı takip edeceği anlamına gelir!
SlySven

@SlySven Sıfır yok (henüz geçerli bir neden düşünemiyorum), ancak komut dosyasımı eksik MAC'yi yoksaymak için değiştirmeliyim. Hayır olacağını farz ediyorum/sys/class/net/eth0/address
Milliways

Benzersiz kimliğe sahip hiçbir Pi tanımlamak için başka bir yol bağımlı arayüzü değil onun dbus makine-id elde etmektir cat /var/lib/dbus/machine-id fazla okuma
ripat

... yukarıdaki yorumumdaki "daha fazlasını oku" bağlantısını, yazarın sistematiğinin babası olan Lennart Poettering'e vermeyi unuttum.
ripat

2

Eğer bir kimliği olmazsa (ki göründüğü gibi, Ralph’ın cevabına bakınız ) alternatif bir I2C seri numarası çipi olabilir. Bunların bağlanması gerçekten kolaydır (seri arayüz) ve benzersiz bir seri numarası sağlar.

Bazı örnekler:

  • Maxim'in I²C / SMBus Silikon Seri Numarası, örneğin DS2401, DS28CM00
  • Microchip'in Eşsiz Kimlik Yonga Ürünleri, örneğin 24AA02UID, 24AA025UID
  • kendi kendine programlanmış I²C EEPROM

Sadece soketli bir I2C EEPROM yongası kullanın ve buna benzersiz bir ID programlayın. AT24C32, toplu olarak satın alındığında oldukça ucuzdur.
Maxthon Chan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.