ID phần cứng Raspberry Pi


22

Có khả năng lưu trữ ID phần cứng cho mỗi thiết bị dựa trên Raspberry Pi không?

Giả sử tôi có 10 thiết bị tùy chỉnh dựa trên nền tảng Raspberry Pi được sử dụng cho các tác vụ phân tán. Tại một số điểm, vì một số lý do, tôi muốn xóa mọi thứ khỏi một trong số họ. Làm thế nào tôi có thể xác định lại bảng sau đó?

Pi có chip lưu trữ một ID duy nhất như số sê-ri cho mỗi bảng không? Nếu không, tôi có thể thêm bộ nhớ (chỉ đọc) (có thể lưu trữ một giá trị đơn giản ngay cả khi không được cấp nguồn) để có thể giao tiếp với nó thông qua GPIO bất cứ lúc nào không?

Các lựa chọn thay thế là gì?


Xin đừng hỏi một câu hỏi, sau đó trên cơ sở câu trả lời quyết định bạn thực sự muốn hỏi, hoặc có một câu hỏi khác. Điều này làm lãng phí thời gian của những người bạn đang yêu cầu giúp đỡ. Vì lý do này, tôi đã khôi phục lại chỉnh sửa của bạn. Nếu bạn có một câu hỏi khác, hãy hỏi một câu hỏi khác.
goldilocks

@goldilocks: Bạn đúng rồi. Tôi nên chia câu hỏi này thành hai.
Alexandru Irimiea 4/2/2016

Còn 'SỐ KHÔNG' thì sao? không có địa chỉ MAC nào ở đây ... có ID nào khác không?
fcm

Câu trả lời:


23

Có mỗi bảng có một số sê-ri. Các phương pháp để lấy lại điều này được mô tả ở đây: Làm thế nào để tôi có được số sê-ri?


Đây không phải là một câu trả lời hoàn chỉnh, vì nó chỉ giao dịch với linux và hoàn toàn không đề cập đến windows. Sẽ rất thú vị khi biết cách làm như vậy trên windows.
Andrew Savinykh

@Savinykh ... hệ điều hành linux Mac. Awk, grep và cut là những công cụ có sẵn trên cả hai hệ điều hành, nhưng tôi đồng ý rằng Windows bị bỏ qua vì nó thiếu các công cụ dòng lệnh tiện dụng này.
ripat

9
Bạn không thể chạy Mac OS trên Pi, vì vậy điều đó không liên quan. Bạn chỉ có thể chạy phiên bản Win10 IOT không đầu trên Pi tôi tin. Thực tế 99% người dùng Pi đang sử dụng Linux.
pjc50

@ripat, bạn có thể chạy Mac OS trên raspberry pi không? Tôi bằng cách nào đó nghi ngờ nó.
Andrew Savinykh

6

Đây là một cách dễ dàng hơn để sử dụng một: địa chỉ MAC thông qua cấu hình tự động IPv6 NDP. Đây là một phương pháp phổ biến có thể áp dụng cho bất kỳ giao diện mạng nào.

Ví dụ, mọi NIC, bao gồm cả USB được sử dụng trên Pi, đều có địa chỉ MAC 48 bit 14:cf:92:20:26:3c.

Mỗi địa chỉ MAC 48 bit có ánh xạ một-một duy nhất đến địa chỉ EUI-64 bằng cách che đi hai bit cuối cùng trong byte thứ ba ( 92đến 90) và chèn các byte feffvào giữa byte thứ ba và thứ tư. MAC 48 bit đã nói ở trên có thể được ánh xạ tới EUI-64 : 14cf:90fe:ff20:263c.

Quá trình cấu hình tự động địa chỉ IPv6 sử dụng giao thức NDP để khám phá địa chỉ mạng 64 bit trong địa chỉ 128 bit. Quá trình này sẽ cung cấp cho tất cả các thiết bị của bạn trong cùng một mạng có cùng tiền tố 64 bit. EUI-64 đã nói ở trên được sử dụng để điền địa chỉ trạm 64 bit, dẫn đến địa chỉ IPv6 duy nhất toàn cầu 128 bit. Vì vậy, nếu bạn có tiền tố mạng IPv6 2001:470:d:472::/64, thẻ mạng nói trên, khi được sử dụng trong mạng này, sẽ được đảm bảo có một địa chỉ có thể định tuyến toàn cầu IPv6 2001:470:d:472:14cf:90fe:ff20:263c. Miễn là công cụ quản lý của bạn được cấu hình để sử dụng IPv6, chỉ cần cắm địa chỉ này vào đó và nó sẽ hoạt động tốt.


Theo tôi, đây là cách tốt hơn để trả lời câu hỏi này. MAC là duy nhất. bạn có thể băm nó một chút nếu bạn muốn, nhưng chỉ cần dựa vào địa chỉ MAC có thể được thực hiện trên bất kỳ nền tảng nào.
Havnar

@Havnar Tốt hơn thế, điều này chuyển địa chỉ MAC trực tiếp thành địa chỉ IPv6 có thể định tuyến toàn cầu có thể được sử dụng để gửi các gói đến Pi trực tiếp (bất kỳ giao thức lớp ứng dụng nào, miễn là nó hoạt động trên IPv6, hầu hết đều hoạt động trên IPv6 đây)
Maxthon Chan

Tôi không biết nhiều người thực sự sử dụng ipv6 ở nhà hoặc trong sản xuất thực sự.
Havnar

@Havnar Tôi đã triển khai đường hầm IPv6 trong mạng gia đình của mình đến mức tất cả các thiết bị trong nhà tôi, ngoại trừ bộ định tuyến, có thể hoạt động mà không cần bật IPv4.
Maxthon Chan

5

Như trong câu trả lời khác, Pi có một ID duy nhất, có liên quan đến MAC.

Trong thực tế sẽ thuận tiện hơn cho việc kết nối mạng hostname. Tôi sử dụng đoạn script sau để đặt tên dựa trên 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

Mặc dù, tất nhiên, As và Zeros, không có kết nối Ethernet, sẽ không có MAC để sử dụng! Bộ điều hợp WiFi sẽ, nhưng di chuyển bộ chuyển đổi giữa Pis sẽ có nghĩa là ID duy nhất sẽ theo bộ điều hợp!
SlySven

@SlySven Tôi chưa có Zero (và chưa thể nghĩ ra bất kỳ lý do hợp lệ nào), nhưng tôi nên sửa đổi tập lệnh của mình để bỏ qua MAC bị thiếu. Tôi cho rằng sẽ không có/sys/class/net/eth0/address
Milliways

Một cách khác để xác định bất kỳ Pi nào có id duy nhất là lấy id máy dbus của nó không phụ thuộc vào giao diện cat /var/lib/dbus/machine-id đọc thêm
ripat

... đã quên ghi lại liên kết "đọc thêm" trong bình luận của tôi ở trên cho tác giả của nó: Lennart Poettering, cha đẻ của systemd.
ripat

2

Nếu nó không có ID (như có vẻ như, hãy xem câu trả lời của Ralph ), một giải pháp thay thế có thể là chip số sê-ri I2C. Chúng thực sự dễ dàng kết nối (giao diện nối tiếp) và cung cấp một số sê-ri duy nhất.

Vài ví dụ:

  • Số sê-ri Silicon I²C / SMBus của Maxim, ví dụ DS2401, DS28CM00
  • Các sản phẩm chip ID duy nhất của Microchip, ví dụ 24AA02UID, 24AA025UID
  • tự lập trình I²C EEPROM

Cũng có thể chỉ cần sử dụng chip I2C EEPROM được cắm và lập trình một ID duy nhất vào đó. AT24C32 khá rẻ khi mua số lượng lớn.
Maxthon Chan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.