1. 程式人生 > >[RK3288][Android6.0] 除錯筆記 --- 快取檔案引起的serialno值相同

[RK3288][Android6.0] 除錯筆記 --- 快取檔案引起的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就一樣了。

解決方法:

diff --git a/drmservice/drmservice.c b/drmservice/drmservice.c
index 6a648f7..6b4a28e 100755
--- a/drmservice/drmservice.c
+++ b/drmservice/drmservice.c
@@ -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(char*mac,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);