Page 1 of 1

RV1106MAX 芯片唯一ID 号怎么找到

Posted: 2024-12-02 8:41
by JHD123456789
CPU号 同一类板子都是一样的 ,ID号呢怎么找到呢 ,

Re: RV1106MAX 芯片唯一ID 号怎么找到

Posted: 2024-12-02 10:03
by Crocodile
您好,使用cat /proc/cpuinfo | grep Serial 可以获取到Serial号,目前我手上几块RV1106G3的Serial号都是不一样的,但是之前有接收到反馈有出现过相同的情况。目前暂时没有获得唯一性ID其他的方式

Re: RV1106MAX 芯片唯一ID 号怎么找到

Posted: 2025-03-26 6:38
by Crocodile
最新找到的让获取 cpuserial 编码为硬件编号的方式如下,修改内核(<SDK>/sysdrv/source/kernel)源码

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);
重新编译获取boot.img

Re: RV1106MAX 芯片唯一ID 号怎么找到

Posted: 2025-03-26 10:25
by zgsxtyzgd
Crocodile wrote: 2025-03-26 6:38 最新找到的让获取 cpuserial 编码为硬件编号的方式如下,修改内核(<SDK>/sysdrv/source/kernel)源码

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);
重新编译获取boot.img
这相当于没解决,因为取序列号是为了设计软件许可,如果编译就能让序列号一致,那就没法用它来设计“软件许可了”,有心人直接从你这里弄个镜像就可以了,也就是说,cpu序列号来做唯一性判断失败了,或者您能给个更好的取mcu序列号的办法?

Re: RV1106MAX 芯片唯一ID 号怎么找到

Posted: 2025-03-27 1:30
by Crocodile
上述的方式就是解决同个镜像获取cpuserial号会出现重复现象的问题,目的就是取得唯一ID做设备标识
至于您说的软件许可通过cat /proc/cpuinfo | grep Serial去获取唯一性ID肯定是不可靠的,这个数据从内核源码传递到应用层中间可以人为改动,但是只要确保使用的内核镜像做哈希校验不被篡改,始终以上诉源码中的方式去获取cpuserial 就可以确定作为标识,或者使用其他手段去加密

Re: RV1106MAX 芯片唯一ID 号怎么找到

Posted: 2025-03-27 5:36
by zgsxtyzgd
Crocodile wrote: 2025-03-27 1:30 上述的方式就是解决同个镜像获取cpuserial号会出现重复现象的问题,目的就是取得唯一ID做设备标识
至于您说的软件许可通过cat /proc/cpuinfo | grep Serial去获取唯一性ID肯定是不可靠的,这个数据从内核源码传递到应用层中间可以人为改动,但是只要确保使用的内核镜像做哈希校验不被篡改,始终以上诉源码中的方式去获取cpuserial 就可以确定作为标识,或者使用其他手段去加密
rk1106有类似于stm32那样在某特定内存地址放一个唯一id的情况吗?

Re: RV1106MAX 芯片唯一ID 号怎么找到

Posted: 2025-03-27 6:32
by Crocodile
您可以去研究一下内核源码的 system_serial_low和system_serial_hight 是怎么获取,我简单看了一下应该是从eFuse中获取的,eFuse存放的内容只能编程一次 ,和 STM32 UUID是写在 OTP 里实现原理不同但是效果都是保护内容不被二次篡改