रास्पबेरी पाई हार्डवेयर आईडी


22

क्या प्रत्येक रास्पबेरी पाई आधारित डिवाइस के लिए एक हार्डवेयर आईडी स्टोर करने की संभावना है?

मान लें कि मेरे पास रास्पबेरी पाई प्लेटफॉर्म पर आधारित 10 कस्टम डिवाइस हैं जो वितरित कार्यों के लिए उपयोग किए जाते हैं। किसी बिंदु पर, किसी कारण से, मैं उनमें से सभी को मिटा देना चाहता हूं। मैं उसके बाद बोर्ड की फिर से पहचान कैसे कर सकता हूं?

क्या पाई में एक चिप है जो प्रत्येक बोर्ड के लिए एक सीरियल नंबर की तरह एक अद्वितीय आईडी संग्रहीत करता है? यदि नहीं, तो क्या मैं किसी भी समय GPIO के माध्यम से इसके साथ संवाद करने में सक्षम होने के लिए एक (केवल पढ़ने योग्य) मेमोरी (जो एक साधारण मूल्य भी स्टोर कर सकता हूं) को जोड़ सकता हूं?

विकल्प क्या हैं?


कृपया प्रश्न न पूछें, फिर उत्तर के आधार पर निर्णय लें कि आप वास्तव में पूछना चाहते थे, या कोई अन्य प्रश्न है। यह उन लोगों के समय को बर्बाद करता है जिन्हें आप मदद के लिए पूछ रहे हैं। इस कारण से, मैंने आपका संपादन वापस ले लिया है। यदि आपके पास एक और प्रश्न है, तो एक और प्रश्न पूछें।
गोल्डीलॉक्स

@goldilocks: आप सही हैं। मुझे इस प्रश्न को दो भागों में विभाजित करना चाहिए था।
एलेक्जेंड्रू इरिमीया

'शून्य' के बारे में क्या? कोई मैक पते यहाँ ... किसी भी अन्य अद्वितीय आईडी?
fcm

जवाबों:


23

हां प्रत्येक बोर्ड में एक सीरियल नंबर होता है। इसे पुनः प्राप्त करने के तरीके यहां वर्णित हैं: मुझे सीरियल नंबर कैसे मिलेगा?


यह एक पूर्ण उत्तर नहीं है, क्योंकि यह केवल लिनक्स से संबंधित है और खिड़कियों का बिल्कुल भी उल्लेख नहीं करता है। यह जानना दिलचस्प होगा कि खिड़कियों पर भी ऐसा कैसे हो सकता है।
एंड्रयू साविनिख

@Savinykh ... linux और Mac OS। Awk, grep और cut दोनों OS पर उपलब्ध उपकरण हैं, लेकिन मैं मानता हूं कि विंडोज को छोड़ दिया गया है क्योंकि इसमें इन आसान कमांड लाइन टूल्स का अभाव है।
रिप

9
आप Mac OS को Pi पर नहीं चला सकते, इसलिए यह प्रासंगिक नहीं है। आप केवल पाई I पर विश्वासहीन Win10 IOT संस्करण चला सकते हैं। वास्तविक रूप से 99% Pi उपयोगकर्ता लिनक्स का उपयोग कर रहे हैं।
pjc50

@ श्रीपत, क्या आप रास्पबेरी पाई पर मैक ओएस चला सकते हैं? मैं किसी तरह उस पर शक करता हूं।
एंड्रयू सविनाख

6

यहां एक का उपयोग करना आसान है: आईपीवी 6 एनडीपी ऑटो कॉन्फ़िगरेशन के माध्यम से मैक पते। यह एक सार्वभौमिक विधि है जो किसी भी नेटवर्क इंटरफ़ेस पर लागू होती है।

प्रत्येक एनआईसी, जिसमें पीआई पर उपयोग किया जाने वाला यूएसबी शामिल है, उदाहरण के लिए, 48-बिट मैक एड्रेस है 14:cf:92:20:26:3c

हर 48-बिट मैक पता तीसरे बाइट (में पिछले दो बिट्स बंद मास्किंग द्वारा एक EUI-64 का पता करने के लिए एक अद्वितीय एक-से-एक मानचित्रण है 92करने के लिए 90) और बाइट्स सम्मिलित feffतीसरे और चौथे बाइट के बीच में। उपरोक्त 48-बिट मैक को EUI-64: में मैप किया जा सकता है 14cf:90fe:ff20:263c

IPv6 पता ऑटो कॉन्फ़िगरेशन प्रक्रिया 128-बिट पते में 64-बिट नेटवर्क पते की खोज करने के लिए NDP प्रोटोकॉल का उपयोग करती है। यह प्रक्रिया आपके सभी उपकरणों को एक ही नेटवर्क के भीतर समान 64-बिट उपसर्ग देगी। पूर्वोक्त EUI-64 का उपयोग 64-बिट स्टेशन पते को पॉप्युलेट करने के लिए किया जाता है, जिसके परिणामस्वरूप 128 बिट विश्व स्तर पर अद्वितीय IPv6 पता होता है। इसलिए यदि आपके पास IPv6 नेटवर्क उपसर्ग है 2001:470:d:472::/64, तो उपरोक्त नेटवर्क कार्ड, जब इस नेटवर्क में उपयोग किया जाता है, तो IPv6 को वैश्विक रूप से नियमित पते के लिए गारंटी दी जाएगी 2001:470:d:472:14cf:90fe:ff20:263c। जब तक आपके प्रबंधन उपकरण को IPv6 का उपयोग करने के लिए कॉन्फ़िगर किया गया है, बस इस पते को इसमें प्लग करें और इसे जाने के लिए अच्छा होना चाहिए।


मेरी राय में इस सवाल का जवाब देने का यह बेहतर तरीका है। मैक अद्वितीय है। यदि आप चाहें तो इसे थोड़ा सा हैश कर सकते हैं, लेकिन मैक पते पर भरोसा करके किसी भी प्लेटफ़ॉर्म पर किया जा सकता है।
हवन

@ हवनर इससे बेहतर है, यह मैक पते को सीधे एक वैश्विक रूप से निष्क्रिय IPv6 पते में अनुवाद करता है जिसका उपयोग पाई को सीधे पैकेट भेजने के लिए किया जा सकता है (किसी भी अनुप्रयोग परत प्रोटोकॉल, जब तक कि यह IPv6 पर काम करता है जो उनमें से अधिकांश है, काम करेगा यहाँ)
मैक्सथन चान

मैं ऐसे कई लोगों के बारे में नहीं जानता जो वास्तव में घर पर या उत्पादन में वास्तव में ipv6 का उपयोग करते हैं।
हवनार

@ हवनर मैंने अपने घर नेटवर्क में आईपीवी 6 टनल को इस बिंदु पर तैनात किया है कि मेरे घर के भीतर सभी डिवाइस, राउटर के अपवाद के साथ, आईपीवी 4 सक्षम किए बिना कार्य कर सकते हैं।
मैक्सथन चान

5

जैसा कि अन्य उत्तर में पाई के पास एक विशिष्ट आईडी है, जो मैक से संबंधित है।

व्यवहार में यह नेटवर्किंग के लिए अद्वितीय होने के लिए अधिक सुविधाजनक है 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

हालांकि, बेशक, ईथरनेट कनेक्शन के बिना आस और जीरो का उपयोग करने के लिए उसमें से मैक नहीं होगा! एक वाईफाई एडेप्टर होगा, लेकिन पीएस के बीच एडेप्टर को स्थानांतरित करने का मतलब होगा कि अद्वितीय आईडी एडेप्टर का पालन करेगी!
23

@SlySven में मेरे पास एक शून्य नहीं है (और अभी तक कोई वैध कारण नहीं सोच सकता है), लेकिन मुझे लापता मैक को अनदेखा करने के लिए अपनी स्क्रिप्ट को संशोधित करना चाहिए। मुझे लगता है कि वहाँ नहीं होगा/sys/class/net/eth0/address
मिलिअज

किसी भी Pi की यूनिक आईडी के साथ पहचान करने का एक और तरीका यह है कि इसकी dbus मशीन-आईडी प्राप्त की जाए जो कि इंटरफ़ेस पर निर्भर न होcat /var/lib/dbus/machine-id
rip

... इसके लेखक के ऊपर मेरी टिप्पणी में "और अधिक पढ़ें" लिंक को क्रेडिट करना भूल गया: लेन्डर्ट पोएटरिंग, सिस्टमड के पिता।
रिपाट

2

यदि इसमें एक आईडी नहीं होती (जो उसके पास होती है, जैसा कि प्रतीत होता है, राल्फ का जवाब देखें ) एक वैकल्पिक I2C सीरियल चिप हो सकता है। वे (सीरियल इंटरफ़ेस) कनेक्ट करने और एक अद्वितीय सीरियल नंबर प्रदान करने के लिए वास्तव में आसान हैं।

कुछ उदाहरण:

  • मैक्सिम का I NumberC / SMBus सिलिकॉन सीरियल नंबर, जैसे DS2401, DS28CM00
  • माइक्रोचिप की यूनिक आईडी चिप उत्पाद, जैसे 24AA02UID, 24AA025UID
  • स्व-क्रमबद्ध I -C EEPROM

के रूप में अच्छी तरह से बस एक सॉकेट I2C EEPROM चिप का उपयोग करें और उस में एक अद्वितीय आईडी प्रोग्राम कर सकते हैं। थोक में खरीदे जाने पर AT24C32 काफी सस्ते होते हैं।
मैक्सथन चान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.