跳到主要内容

SID - 芯片唯一ID

对于全志的 SoC 来说,Sunxi Serial 用于该 SoC 的唯一标识,如 V821 的 Sunxi Serial 用于标识任一颗 V821 SoC 在所有的 V821中是唯一的

注意

Sunxi Serial 仅保证同一型号 SoC 中的 Sunxi Serial 唯一。

可以通过查看 sunxi_batchno 确认芯片是否为同一型号

cat /sys/class/sunxi_info/sys_info | grep sunxi_batchno

image-20250527141621348

在全志 SoC 中,提供有 Sunxi Serial 唯一 ID 功能,是由 Sunxi ChipIDSunxi ChipType 共同组成了 128 位的芯片唯一 ID。

Sunxi Serial 一共 128 位,其中前 16 位是 Sunxi ChipType,与芯片版本封装有关,后 112 位是 Sunxi ChipID,这个 Sunxi ChipID 包含每一颗芯片的晶圆型号,批次号等等,是独立且唯一的。

image-20250527140211904

所以在获取芯片唯一 ID 的时候,可以获取 112 位的 Sunxi ChipID 也可以获取完整的 128 位的 Sunxi Serial。一般为了方便使用 128 位即可。

通过 IOCTL 获取 Sunxi Serial

可以通过 IOCTL 方式获取 Sunxi Serial 串号,示例代码如下

#include <errno.h>
#include <fcntl.h>
#include <getopt.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

enum {
CHECK_SOC_SECURE_ATTR,
CHECK_SOC_VERSION,
CHECK_SOC_BONDING = 3,
CHECK_SOC_CHIPID,
CHECK_SOC_FT_ZONE,
CHECK_SOC_CHIPID_ORIGIN = 8,
};

int main(int argc, char *argv[]) {
int c;
int cmd;
int fd;
char buf[33] = {0};
int ret = 0;

memset(buf, 0, sizeof(buf));

fd = open("/dev/sunxi_soc_info", O_RDONLY);
if (fd < 0) {
printf("open /dev/sunxi_soc_info failed!");
return -1;
}

ret = ioctl(fd, CHECK_SOC_CHIPID_ORIGIN, buf);

if (ret < 0) {
printf("ioctl err!\n");
close(fd);
return ret;
}

printf("soc chipid:%s\n", buf);

close(fd);
return 0;
}

通过 SYSFS 获取 Sunxi Serial

SYSFS 接口在 SDK 1.2 进行了一次更新,将原本节点获取的 80 位扩展到完整的 128 位 SID,以匹配 IOCTL 获取到的完整数据。请选择你的 SDK 版本查看具体内容

用户可以通过 SYSFS 节点获取当前芯片的 Sunxi Serial,节点路径如下:

/sys/class/sunxi_info/sys_info

执行命令即可获取 sys_info,其中的 sunxi_serial 即是 Sunxi Serial,一共 128 位有效位

cat /sys/class/sunxi_info/sys_info

image-20250528170505546

通过 sunxi_dump 读寄存器获取 Sunxi Serial

可以通过 sunxi_dump 节点,读取寄存器,获取完整的 128 位 Sunxi Serial,Sunxi Serial 寄存器位于 0x43006200 长度 0x10

echo 0x43006200,0x43006210 > /sys/class/sunxi_dump/dump
cat /sys/class/sunxi_dump/dump
提示

通过寄存器读出来的 Sunxi Serial 排布方式与 SYSFS 读出的有排布差异,转换方式如下:

image-20250528102914334

sunxi_serial[0] = sunxi_soc_chipid_reg[3];
sunxi_serial[1] = sunxi_soc_chipid_reg[2];
sunxi_serial[2] = sunxi_soc_chipid_reg[1];
sunxi_serial[3] = sunxi_soc_chipid_reg[0];