ID perangkat keras Raspberry Pi

22

Apakah ada kemungkinan untuk menyimpan ID perangkat keras untuk setiap perangkat berbasis Raspberry Pi?

Katakanlah saya memiliki 10 perangkat khusus berdasarkan platform Raspberry Pi yang digunakan untuk tugas yang didistribusikan. Pada titik tertentu, untuk beberapa alasan, saya ingin menghapus semuanya dari salah satunya. Bagaimana saya bisa mengidentifikasi kembali papan setelah itu?

Apakah Pi memiliki chip yang menyimpan ID unik seperti nomor seri untuk setiap papan? Jika tidak, dapatkah saya menambahkan memori (hanya baca) (yang dapat menyimpan nilai sederhana bahkan ketika tidak diaktifkan) untuk dapat berkomunikasi dengannya melalui GPIO kapan saja?

Apa saja alternatifnya?

Alexandru Irimiea
sumber
Tolong jangan ajukan pertanyaan, lalu atas dasar jawaban memutuskan Anda benar-benar ingin bertanya, atau memiliki pertanyaan lain. Ini menghabiskan waktu orang-orang yang Anda minta bantuan. Karena alasan ini, saya telah memutar kembali hasil edit Anda. Jika Anda memiliki pertanyaan lain, ajukan pertanyaan lain.
goldilocks
@goldilocks: Anda benar. Saya seharusnya membagi pertanyaan ini menjadi dua.
Alexandru Irimiea
Bagaimana dengan 'NOL'? tidak ada alamat MAC di sini ... ID unik lainnya?
fcm

Jawaban:

23

Ya, setiap papan memiliki nomor seri. Metode untuk mengambil ini dijelaskan di sini: Bagaimana cara mendapatkan nomor seri?

Muntah
sumber
Ini bukan jawaban yang lengkap, karena hanya berurusan dengan linux dan tidak menyebutkan windows sama sekali. Akan menarik untuk mengetahui bagaimana melakukannya di windows juga.
Andrew Savinykh
@ Savinykh ... linux dan Mac OS. Awk, grep dan cut adalah alat yang tersedia di kedua OS, tapi saya setuju Windows ditinggalkan karena tidak memiliki alat-alat baris perintah yang berguna ini.
ripat
9
Anda tidak dapat menjalankan Mac OS di Pi, jadi itu tidak relevan. Anda hanya dapat menjalankan edisi IOT Win10 tanpa kepala pada Pi yang saya percayai. Secara realistis, 99% pengguna Pi menggunakan Linux.
pjc50
@ripat, bisakah Anda menjalankan Mac OS pada raspberry pi? Saya entah bagaimana meragukannya.
Andrew Savinykh
6

Berikut ini adalah yang lebih mudah digunakan: Alamat MAC melalui konfigurasi otomatis IPv6 NDP. Ini adalah metode universal yang berlaku untuk semua antarmuka jaringan.

Setiap NIC, termasuk USB yang digunakan pada Pi, memiliki alamat MAC 48-bit, misalnya 14:cf:92:20:26:3c,.

Setiap alamat MAC 48-bit memiliki pemetaan satu-ke-satu yang unik ke alamat EUI-64 dengan menutupi dua bit terakhir di byte ketiga ( 92ke 90) dan memasukkan byte feffdi antara byte ketiga dan keempat. Yang disebutkan di atas 48-bit MAC dapat dipetakan ke EUI-64: 14cf:90fe:ff20:263c.

Proses konfigurasi otomatis alamat IPv6 menggunakan protokol NDP untuk menemukan alamat jaringan 64-bit di alamat 128-bit. Proses ini akan memberikan semua perangkat Anda dalam jaringan yang sama awalan 64-bit yang sama. EUI-64 tersebut digunakan untuk mengisi alamat stasiun 64-bit, menghasilkan alamat IPv6 128-bit yang unik secara global. Jadi jika Anda memiliki awalan jaringan IPv6 2001:470:d:472::/64, kartu jaringan yang disebutkan di atas, ketika digunakan dalam jaringan ini, akan dijamin memiliki alamat IPv6 yang dapat dirutekan secara global 2001:470:d:472:14cf:90fe:ff20:263c. Selama alat manajemen Anda dikonfigurasi untuk menggunakan IPv6, cukup tancapkan alamat ini ke dalamnya dan itu harus baik untuk pergi.

Maxthon Chan
sumber
ini adalah cara terbaik untuk menjawab pertanyaan ini menurut saya. MAC itu unik. Anda dapat hash sedikit jika Anda mau, tetapi hanya mengandalkan alamat MAC dapat dilakukan pada platform apa pun.
Havnar
@Havnar Lebih baik dari itu, ini menerjemahkan alamat MAC langsung ke alamat IPv6 yang dapat dialihkan secara global yang dapat digunakan untuk mengirim paket ke Pi secara langsung (protokol lapisan aplikasi apa pun, asalkan berfungsi melalui IPv6 yang sebagian besar dari mereka, akan berfungsi di sini)
Maxthon Chan
Saya tidak tahu banyak orang yang benar-benar menggunakan ipv6 di rumah atau dalam produksi sebenarnya.
Havnar
@ Havnar Saya telah menggunakan terowongan IPv6 di jaringan rumah saya ke titik di mana semua perangkat di rumah saya, kecuali router itu sendiri, dapat berfungsi tanpa IPv4 diaktifkan.
Maxthon Chan
5

Seperti pada jawaban lain, Pi memiliki ID unik, yang terkait dengan MAC.

Dalam praktiknya, jaringan lebih nyaman untuk memiliki keunikan hostname. Saya menggunakan skrip berikut untuk mengatur nama berdasarkan 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
Milliways
sumber
Meskipun, tentu saja As dan Nol, tanpa koneksi Ethernet, tidak akan memiliki MAC untuk digunakan! Adaptor WiFi akan melakukannya, tetapi memindahkan adaptor di antara Pis berarti ID unik akan mengikuti adaptor!
SlySven
@ SlySven Saya tidak memiliki Zero (dan belum dapat memikirkan alasan yang valid), tetapi saya harus memodifikasi skrip saya untuk mengabaikan MAC yang hilang. Saya berasumsi tidak akan ada/sys/class/net/eth0/address
Milliways
Cara lain untuk mengidentifikasi Pi dengan id unik adalah dengan mendapatkan mesin-id dbus-nya yang tidak bergantung pada antarmuka. cat /var/lib/dbus/machine-id Baca selengkapnya
ripat
... lupa memberi kredit pada tautan "baca lebih lanjut" dalam komentar saya di atas kepada penulisnya: Lennart Poettering, bapak systemd.
Ripat
2

Jika tidak memiliki ID (seperti yang terlihat, lihat jawaban Ralph ) alternatif bisa menjadi chip nomor seri I2C. Itu sangat mudah dihubungkan (antarmuka serial) dan memberikan nomor seri yang unik.

Beberapa contoh:

  • Nomor Seri Silikon I²C / SMBus Maxim, misalnya DS2401, DS28CM00
  • Produk ID Chip Unik Microchip, misalnya 24AA02UID, 24AA025UID
  • I²C EEPROM yang diprogram sendiri
Ghanima
sumber
Mungkin juga hanya menggunakan chip EEPROM I2C yang terhubung dan program ID unik ke dalamnya. AT24C32 cukup murah bila dibeli dalam jumlah besar.
Maxthon Chan