瑞芯微Rockchip开发者社区
直播中

张玉兰

8年用户 1449经验值
私信 关注
[经验]

缓存文件引起的serialno值相同要如何去解决呢

Platform: RK3288
OS: Android 6.0
Kernel: 3.10.92

现象:

第三方应用需要根据serialno来产生license, 但是遇到不同板子有相同serialno值的问题。

原因:

serialno对应的文件被缓存在了data分区,当核心板和主板即rk3288 cpu和wifi芯片不在同一块板子上是,如果有出现交换的情况。

举例:

A核心板在A主板上刷机,然后A核心板被放到了B主板,B核心板被放到了A主板上然后执行了刷机动作。那么此时A和B的核心板的serialno就一样了。

serialno是根据WiFi MAC 地址生成的,原理可参考:
[RK3288][Android6.0] 调试笔记 — ro.serialno的获取

解决方法:

diff --git a/drmservice/drmservice.c b/drmservice/drmservice.c
index 6a648f7..6b4a28e 100755
--- a/drmservice/drmservice.c
+++ b/drmservice/drmservice.c
[url=home.php?mod=space&uid=1999721]@@[/url] -579,6 +579,8 @@ int store_serialno(char* serialno)

int get_serialno_cached(char * result,int len)
{
//不去读serialno缓存文件
+/Kris, 180820, Fix sn repeatable issue if core board is resued on other mainboard. {/
+#if 0
int fd,readlen;
char buf[32];
fd = open(DEVICE_SERIALNO, O_RDONLY);
@@ -599,6 +601,10 @@ int get_serialno_cached(char * result,int len)
buf[readlen]='\0';
close(fd);
return 0;
+#else

return -1;
+#endif
+/Kris, 180820, Fix sn repeatable issue if core board is resued on other mainboard. }/
}

void calc_seed_by_mac(charmac,unsigned int * seed)
@@ -671,8 +677,10 @@ void generate_device_serialno(int len,char
result)
return;
}

+#if 0 //Kris, read mac directly from /sys/class/net/wlan0/address
//MAC地址也有缓存
if(check_wlan_mac()<0)//not buffered in data,do it
{
+#endif
fd = open(WIFI_MAC_FILENAME, O_RDONLY);//read form buffered file
if(fd<0)
{
@@ -717,7 +725,9 @@ void generate_device_serialno(int len,char*result)
set_iface("wlan0", 1);
store_wlan_mac();//buffer mac to data
set_iface("wlan0", 0);
+#if 0 //Kris, read mac directly from /sys/class/net/wlan0/address
}
+#endif

fd = open(WLAN_MAC_FILE, O_RDONLY);

原作者:KrisFei

更多回帖

发帖
×
20
完善资料,
赚取积分