RV1106MAX 芯片唯一ID 号怎么找到
-
CPU号 同一类板子都是一样的 ,ID号呢怎么找到呢 ,
您好,使用cat /proc/cpuinfo | grep Serial 可以获取到Serial号,目前我手上几块RV1106G3的Serial号都是不一样的,但是之前有接收到反馈有出现过相同的情况。目前暂时没有获得唯一性ID其他的方式
最新找到的让获取 cpuserial 编码为硬件编号的方式如下,修改内核(<SDK>/sysdrv/source/kernel)源码
重新编译获取boot.img
Code: Select all
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@ -952,7 +952,7 @ static int __init init_machine_late(void)
system_serial = NULL;
}
- if (!system_serial)
+ //if (!system_serial)
system_serial = kasprintf(GFP_KERNEL, "%08x%08x",
system_serial_high,
system_serial_low);
这相当于没解决,因为取序列号是为了设计软件许可,如果编译就能让序列号一致,那就没法用它来设计“软件许可了”,有心人直接从你这里弄个镜像就可以了,也就是说,cpu序列号来做唯一性判断失败了,或者您能给个更好的取mcu序列号的办法?Crocodile wrote: ↑2025-03-26 6:38 最新找到的让获取 cpuserial 编码为硬件编号的方式如下,修改内核(<SDK>/sysdrv/source/kernel)源码重新编译获取boot.imgCode: Select all
--- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @ -952,7 +952,7 @ static int __init init_machine_late(void) system_serial = NULL; } - if (!system_serial) + //if (!system_serial) system_serial = kasprintf(GFP_KERNEL, "%08x%08x", system_serial_high, system_serial_low);
上述的方式就是解决同个镜像获取cpuserial号会出现重复现象的问题,目的就是取得唯一ID做设备标识
至于您说的软件许可通过cat /proc/cpuinfo | grep Serial去获取唯一性ID肯定是不可靠的,这个数据从内核源码传递到应用层中间可以人为改动,但是只要确保使用的内核镜像做哈希校验不被篡改,始终以上诉源码中的方式去获取cpuserial 就可以确定作为标识,或者使用其他手段去加密
至于您说的软件许可通过cat /proc/cpuinfo | grep Serial去获取唯一性ID肯定是不可靠的,这个数据从内核源码传递到应用层中间可以人为改动,但是只要确保使用的内核镜像做哈希校验不被篡改,始终以上诉源码中的方式去获取cpuserial 就可以确定作为标识,或者使用其他手段去加密
您可以去研究一下内核源码的 system_serial_low和system_serial_hight 是怎么获取,我简单看了一下应该是从eFuse中获取的,eFuse存放的内容只能编程一次 ,和 STM32 UUID是写在 OTP 里实现原理不同但是效果都是保护内容不被二次篡改