问题现象
擦除flash升级后,SN号会被清空,不方便调试;希望擦除flash升级后,可以随机生成SN号
解决方案:
system/core/drmservice/drmservice.c 中 SERIALNO_FROM_IDB设为1,会使用工具写入的sn,否则会使用随机生成的sn。 此文件的main()中if(SERIALNO_FROM_IDB)里,当没有获取到工具写入的sn后,添加一段随机生成sn的代码(就是else里那段)即可。
diff --git a/drmservice/drmservice.c b/drmservice/drmservice.c
index ec3836ab7..9b7b13b39 100644
--- a/drmservice/drmservice.c
+++ b/drmservice/drmservice.c
@@ -1144,9 +1144,23 @@ int main( int argc, char *argv[] )if(SERIALNO_FROM_IDB)//read serialno form idb{vendor_storage_read_sn();
- property_set("sys.serialno", sn_buf_idb[0] ? sn_buf_idb : "");
- write_serialno2kernel(sn_buf_idb);
- SLOGE("get serialno from idb,serialno = %s",sn_buf_idb);
+ SLOGE("[fy]:read sn_buf_idb:%s\n",sn_buf_idb);
+
+ generate_device_serialno(10,sn_buf_auto); //随机生成SN号
+ SLOGE("[fy]:read sn_buf_auto=%s\n",sn_buf_auto);
+
+ property_set("sys.serialno", sn_buf_idb[0] ? sn_buf_idb : sn_buf_auto); //判断SN号是哪种方式写入(随机?手动?)
+ if(sn_buf_idb[0])
+ {
+ write_serialno2kernel(sn_buf_idb);
+ SLOGE("[fy]:get serialno from idb,serialno = %s\n",sn_buf_idb);
+ }
+ else
+ {
+ write_serialno2kernel(sn_buf_auto);
+ SLOGE("[fy]:get serialno from auto,serialno = %s\n",sn_buf_auto);
+ }
+vendor_storage_read_second_sn();property_set("sys.sub_serialno", sn_buf_idb_two[0] ? sn_buf_idb_two : "");write_serialno2kernel(sn_buf_idb_two);
注:此功能不影响写号工具手动写入SN号 <当工具写入后会进行覆盖随机生成的SN号>。