RV1106MAX 芯片唯一ID 号怎么找到

  • 您好,使用cat /proc/cpuinfo | grep Serial 可以获取到Serial号,目前我手上几块RV1106G3的Serial号都是不一样的,但是之前有接收到反馈有出现过相同的情况。目前暂时没有获得唯一性ID其他的方式
  • 最新找到的让获取 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
  • 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序列号的办法?
  • 上述的方式就是解决同个镜像获取cpuserial号会出现重复现象的问题,目的就是取得唯一ID做设备标识
    至于您说的软件许可通过cat /proc/cpuinfo | grep Serial去获取唯一性ID肯定是不可靠的,这个数据从内核源码传递到应用层中间可以人为改动,但是只要确保使用的内核镜像做哈希校验不被篡改,始终以上诉源码中的方式去获取cpuserial 就可以确定作为标识,或者使用其他手段去加密
  • Crocodile wrote: 2025-03-27 1:30 上述的方式就是解决同个镜像获取cpuserial号会出现重复现象的问题,目的就是取得唯一ID做设备标识
    至于您说的软件许可通过cat /proc/cpuinfo | grep Serial去获取唯一性ID肯定是不可靠的,这个数据从内核源码传递到应用层中间可以人为改动,但是只要确保使用的内核镜像做哈希校验不被篡改,始终以上诉源码中的方式去获取cpuserial 就可以确定作为标识,或者使用其他手段去加密
    rk1106有类似于stm32那样在某特定内存地址放一个唯一id的情况吗?
  • 您可以去研究一下内核源码的 system_serial_low和system_serial_hight 是怎么获取,我简单看了一下应该是从eFuse中获取的,eFuse存放的内容只能编程一次 ,和 STM32 UUID是写在 OTP 里实现原理不同但是效果都是保护内容不被二次篡改