라즈베리 파이 하드웨어 ID


22

각 Raspberry Pi 기반 장치의 하드웨어 ID를 저장할 수 있습니까?

분산 작업에 사용되는 Raspberry Pi 플랫폼을 기반으로하는 10 개의 사용자 지정 장치가 있다고 가정합니다. 어떤 시점에서 어떤 이유로 든 나는 그중 하나에서 모든 것을 지우고 싶습니다. 그 후 보드를 어떻게 다시 식별 할 수 있습니까?

Pi에는 모든 보드의 일련 번호와 같은 고유 ID를 저장하는 칩이 있습니까? 그렇지 않은 경우 언제든지 GPIO를 통해 통신 할 수 있도록 (읽기 전용) 메모리 (전원이 공급되지 않아도 간단한 값을 저장할 수 있음)를 추가 할 수 있습니까?

대안은 무엇입니까?


질문을하지 말고 답을 바탕으로 질문하고 싶은 것이 있거나 다른 질문이 있는지 결정하십시오. 이것은 당신이 도움을 요청하는 사람들의 시간을 낭비합니다. 이러한 이유로 편집 내용을 롤백했습니다. 다른 질문이 있으면 다른 질문을하십시오.
goldilocks

@goldilocks : 맞습니다. 이 질문을 둘로 나누었어야합니다.
Alexandru Irimiea

'ZERO'는 어떻습니까? 여기에 MAC 주소가 없습니다 ... 다른 고유 ID?
fcm

답변:


23

예, 각 보드에는 일련 번호가 있습니다. 이를 검색 하는 방법은 여기에 설명되어 있습니다. 일련 번호는 어떻게 얻습니까?


이것은 리눅스 만 다루고 창을 전혀 언급하지 않기 때문에 완전한 대답은 아닙니다. Windows에서도 그렇게하는 방법을 아는 것이 흥미로울 것입니다.
Andrew Savinykh

@Savinykh ... 리눅스 Mac OS. Awk, grep 및 cut은 두 OS에서 모두 사용할 수있는 도구이지만 Windows에는 편리한 명령 줄 도구가 없기 때문에 Windows가 빠져 있다는 데 동의합니다.
ripat

9
Pi에서 Mac OS를 실행할 수 없으므로 관련이 없습니다. 내가 믿는 Pi에서만 헤드리스 Win10 IOT 에디션을 실행할 수 있습니다. 실제로 Pi 사용자의 99 %가 Linux를 사용하고 있습니다.
pjc50

@ripat, raspberry pi에서 Mac OS를 실행할 수 있습니까? 어떻게 든 의심합니다.
앤드류 Savinykh

6

IPv6 NDP 자동 구성을 통한 MAC 주소를 사용하는 것이 더 쉽습니다. 이것은 모든 네트워크 인터페이스에 적용 할 수있는 보편적 인 방법입니다.

Pi에서 사용되는 USB를 포함한 모든 NIC에는 48 비트 MAC 주소가 있습니다 (예 :) 14:cf:92:20:26:3c.

모든 48 비트 MAC 주소는 세 번째 바이트에서 마지막 두 비트 ( 92- 90) 를 마스킹 feff하여 세 번째 바이트와 네 번째 바이트 사이에 바이트 를 삽입하여 EUI-64 주소에 대한 일대일 고유 매핑을 갖습니다 . 위에서 언급 한 48 비트 MAC은 EUI-64에 매핑 될 수 있습니다 14cf:90fe:ff20:263c.

IPv6 주소 자동 구성 프로세스는 NDP 프로토콜을 사용하여 128 비트 주소에서 64 비트 네트워크 주소를 감지합니다. 이 프로세스는 동일한 네트워크 내의 모든 장치에 동일한 64 비트 접두사를 부여합니다. 위에서 언급 한 EUI-64는 64 비트 스테이션 주소를 채우는 데 사용되며 128 비트의 전 세계적으로 고유 한 IPv6 주소가됩니다. 따라서 IPv6 네트워크 접두어가있는 경우 2001:470:d:472::/64,이 네트워크에서 사용될 때 위에서 언급 한 네트워크 카드는 IPv6 전역 라우팅 가능 주소를 갖도록 보장됩니다 2001:470:d:472:14cf:90fe:ff20:263c. 관리 도구가 IPv6을 사용하도록 구성되어 있으면이 주소를 여기에 꽂기 만하면됩니다.


이것은 내 의견으로는이 질문에 대답하는 더 좋은 방법입니다. MAC은 독특합니다. 원하는 경우 약간 해시 할 수 있지만 MAC 주소에 의존하는 것은 모든 플랫폼에서 수행 할 수 있습니다.
Havnar

@Havnar 이보다 더 나은 방법으로 MAC 주소를 직접 라우팅 가능한 IPv6 주소로 직접 변환하여 Pi로 직접 패킷을 보낼 수 있습니다 (어플리케이션 계층 프로토콜은 대부분 IPv6에서 작동하는 한 작동합니다) 여기에)
맥스톤 찬

실제로 집이나 프로덕션에서 ipv6를 사용하는 많은 사람들을 모릅니다.
Havnar

@Havnar 라우터 자체를 제외하고 가정 내 모든 장치가 IPv4를 사용하지 않고 작동 할 수있을 정도로 홈 네트워크에 IPv6 터널을 배포했습니다.
Maxthon Chan

5

다른 답변에서와 같이 Pi에는 MAC과 관련된 고유 ID가 있습니다.

실제로 네트워킹이 고유 한 것이 더 편리합니다 hostname. 다음 스크립트를 사용하여에 따라 이름을 설정합니다 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

물론 이더넷 연결이없는 As 및 Zero는 사용할 MAC이 없습니다! WiFi 어댑터는 Pis간에 어댑터를 이동하면 고유 ID가 어댑터를 따릅니다.
SlySven

@SlySven 0이 없으며 아직 유효한 이유를 생각할 수 없지만 누락 된 MAC을 무시하도록 스크립트를 수정해야합니다. 나는 없을 것이라고 가정합니다/sys/class/net/eth0/address
Milliways

고유 ID로 모든 파이의를 식별하는 또 다른 방법은 의존 인터페이스되지는 DBUS 기계-ID를 얻을 수 있습니다 cat /var/lib/dbus/machine-id 더 읽기
ripat

... 위의 코멘트에서 "더 읽기"링크를 저작자에게 알려주는 것을 잊었습니다. 시스템의 아버지 인 Lennart Poettering.
ripat

2

ID가 없다면 ( Ralph 's answer 참조 ) 대안은 I2C 일련 번호 칩일 수 있습니다. 그것들은 실제로 연결하기 쉽고 (직렬 인터페이스) 고유 한 일련 번호를 제공합니다.

몇 가지 예 :

  • Maxim의 I²C / SMBus 실리콘 일련 번호 (예 : DS2401, DS28CM00)
  • Microchip의 고유 ID 칩 제품 (예 : 24AA02UID, 24AA025UID)
  • 자체 프로그래밍 된 I²C EEPROM

소켓 I2C EEPROM 칩을 사용하여 고유 한 ID를 프로그래밍 할 수도 있습니다. AT24C32는 대량으로 구입할 때 상당히 저렴합니다.
Maxthon Chan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.