我有很多 ARM 设备。它们在硬件上没有区别。我能否在不使用 MAC 地址的情况下获得每个设备的唯一 ID?即使我使用新内核和 rootfs 重新刷新 NAND,此 ID 也必须保持不变。其硬件基于Atmel AT91SAM9。
答案1
从/proc/cpuinfo获取设备的序列号
grep Serial /proc/cpuinfo
Serial : 1651660a0642ebb0
(取自我基于 A20 的 SoC,拉莫博R1又名 Banana Pi R1 和 ArmBian/Jessie,内核为 4.5.2)
grep Serial /proc/cpuinfo
Serial : 64355040058f0d000000
(取自我基于 H3 的 Soc,橙皮一号使用 Armbian/Jessie 内核 3.4)
关于此序列号:它应该是唯一的,但在不同的 SoC 上读取方式有所不同。有时软件或配置会失败。
SID 的一些用例包括但不限于:
- 生成每个设备唯一的 MAC 地址
- 作为 RSA 等密钥存储/使用
- 写入内部序列号
在树莓派中一般用这个号码作为SN来购买视频编解码许可证。还知道读取可能会失败当 u-boot 未正确配置时。
并非所有 ARM SoC 都支持此功能。根据更新的问题,Atmel AT91SAM9 似乎没有此功能。不过,我会将这个答案留在这里,供其他人搜索。
答案2
许多设备的芯片也可能提供唯一的 ID。您的设备板上可能有一个 eMMC 芯片,Linux 内核可能有一个 sys 条目。该路径可能类似于:
/sys/bus/mmc/devices/mmc1:0000/serial
只需确保检查多个设备并查阅数据表,以确保该编号确实是唯一的。另请注意,芯片制造商可能会犯错误,我见过一些例子,其中芯片制造运行意外地生产了多个具有相同的所谓唯一 ID 的芯片,因此如果可能的话,请连接两个芯片序列号。
答案3
正在寻找更便携方法的读者可能会发现dmidecode
有用:
pi : 12:26:23 /root# dmidecode -s system-serial-number
1000000059d267e5