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,charresult)
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