Raspberry PiハードウェアID


22

Raspberry Piベースの各デバイスのハードウェアIDを保存する可能性はありますか?

分散タスクに使用されるRaspberry Piプラットフォームに基づいた10個のカスタムデバイスがあるとします。ある時点で、何らかの理由で、そのうちの1つからすべてを消去したいと思います。その後、ボードを再度識別するにはどうすればよいですか?

Piには、すべてのボードのシリアル番号などの一意のIDを保存するチップがありますか?そうでない場合、いつでもGPIOを介して通信できるように(読み取り専用)メモリ(電源が入っていなくても単純な値を格納できる)を追加できますか?

代替手段は何ですか?


質問をしないでください。その答えに基づいて、本当に質問するか、別の質問をするかを決定してください。これは、助けを求めている人々の時間を無駄にします。このため、編集をロールバックしました。別の質問がある場合は、別の質問をしてください。
goldilocks

@goldilocks:あなたは正しいです。この質問を2つに分割する必要がありました。
アレクサンドルイリミア

「ゼロ」はどうですか?ここにMACアドレスはありません...他の一意のIDはありますか?
fcm

回答:


23

はい、各ボードにはシリアル番号があります。これを取得する方法については、ここで説明します。 シリアル番号を取得する方法


これは完全な答えではありません。Linuxを扱っているだけで、ウィンドウについてはまったく触れていないからです。Windows上でこれを行う方法を知ることは興味深いでしょう。
アンドリューサビニク

@Savinykh ... Linux および Mac OS。Awk、grep、およびcutは両方のOSで使用可能なツールですが、Windowsにはこれらの便利なコマンドラインツールがないため除外されていることに同意します。
-ripat

9
Pi上でMac OSを実行することはできませんので、関係ありません。私が信じているPiでのみ、ヘッドレスWin10 IOTエディションを実行できます。現実的には、Piユーザーの99%がLinuxを使用しています。
pjc50

@ripat、ラズベリーパイでMac OSを実行できますか?どういうわけかそれを疑います。
アンドリューサビニフ

6

使いやすいものは次のとおりです。IPv6NDP自動構成によるMACアドレス。これは、すべてのネットワークインターフェイスに適用できる汎用的な方法です。

Piで使用されるUSBを含むすべてのNICには、たとえば、48ビットのMACアドレスがあります14:cf:92:20:26:3c

すべての48ビットMACアドレスは、3番目のバイト(92to 90)の最後の2ビットをマスクしfeff、3番目と4番目のバイトの間にバイトを挿入することにより、EUI-64アドレスへの一意の1対1マッピングを持ちます。前述の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を使用するように構成されている限り、このアドレスをIPv6に接続するだけでよいのです。


これは私の意見ではこの質問に答えるより良い方法です。MACは一意です。必要に応じて少しハッシュできますが、任意のプラットフォームでMACアドレスに依存するだけで済みます。
ハヴナル

@Havnarそれ以上に、これはMACアドレスを直接Piにパケットを送信するために使用できるグローバルにルーティング可能なIPv6アドレスに変換します(それらのほとんどであるIPv6で動作する限り、任意のアプリケーション層プロトコルが動作します)ここ)
Maxthon Chan

自宅や本番環境で実際にipv6を実際に使用している人の多くは知りません。
ハヴナル

@HavnarホームネットワークにIPv6トンネルを展開して、ルーター自体を除く自宅内のすべてのデバイスがIPv4を有効にしなくても機能できるようにしました。
マクソンチャン

5

他の回答のように、Piには一意のIDがあり、これはMACに関連しています。

実際には、ネットワークがユニークなものを持っているほうがより便利です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およびZerosには、使用するMACがありません!WiFiアダプターは機能しますが、Pis間でアダプターを移動すると、アダプターに固有のIDが続きます!
-SlySven

@SlySven私はゼロを持っていません(そしてまだ正当な理由を考えることができません)が、行方不明のMACを無視するようにスクリプトを修正する必要があります。ありません/sys/class/net/eth0/address
Milliways

一意のIDを持つPiを識別する別の方法は、インターフェイスに依存しないdbus machine-idを取得するcat /var/lib/dbus/machine-id ことです詳細
-ripat

...上記の私のコメントの「続きを読む」リンクをその著者であるsystemdの父であるLennart Poetteringにクレジットするのを忘れていました。
-ripat

2

IDがない場合(Ralphの回答を参照してください)、代わりにI2Cシリアル番号チップを使用できます。これらは本当に簡単に接続(シリアルインターフェイス)され、一意のシリアル番号を提供します。

いくつかの例:

  • マキシムのI²C/ SMBusシリコンシリアル番号、例えばDS2401、DS28CM00
  • Microchipの一意のIDチップ製品(24AA02UID、24AA025UIDなど)
  • 自己プログラムされたI²CEEPROM

ソケット付きのI2C EEPROMチップを使用して、その中に一意のIDをプログラムすることもできます。AT24C32は、大量に購入するとかなり安価です。
マックストンチャン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.