平台:RK3288 Android7.1
现象:使用工具RKDevInfoWriteTool烧录SN号以后,serialno出现unknown的情况
用UpgradeDllTool就可以
原因:读取SN号的接口没用对,UpgradeDllTool对应的是rkidb_get_sn接口,而RKDevInfoWriteTool对应的是vendor_storage_read
解决方法1:
SDK\u-boot\board\rockchip\rk32xx\rk32xx.c
-- char tmp_buf[32];
-- /* rk sn size 30bytes, zero buff */
-- memset(tmp_buf, 0, 32);
-- if (rkidb_get_sn(tmp_buf)) {
-- setenv("fbt_sn#", tmp_buf);
-- }
++ #define SN_ID 1
++ int ret;
++ char sn2_buf[32];
++ char env_sn[32];
++ memset(sn2_buf, 0, 32);
++ ret = vendor_storage_init(); //初始化vendor storage分区
++ if (ret) {
++ printf("SN: vendor_storage_init failed %d\n", ret);
++ return 0;
++ }
++ ret = vendor_storage_read(SN_ID, sn2_buf, 32); //get sn from vendor storage
++ if (ret < 0) {
++ printf("SN: read size %d\n", ret);
++ return 0;
++ } else if(strncmp(env_sn, sn2_buf, strlen(sn2_buf)) != 0) {
++ printf("SN: sn from vendor storage: %s\n", sn2_buf);
++ setenv("fbt_sn#", sn2_buf);
++ }
解决方法2:
SDK\system\core\drmservice\drmservice.c
-- #define SERIALNO_FROM_IDB 0
++ #define SERIALNO_FROM_IDB 1
SDK\system\core\init\init.cpp
prop_map[] = {
-- { "ro.boot.serialno", "ro.serialno", "", },
++ //{ "ro.boot.serialno", "ro.serialno", "", },
{ "ro.boot.mode", "ro.bootmode", "unknown", },
{ "ro.boot.baseband", "ro.baseband", "unknown", },
{ "ro.boot.bootloader", "ro.bootloader", "unknown", },
{ "ro.boot.hardware", "ro.hardware", "unknown", },
{ "ro.boot.revision", "ro.revision", "0", },
};
参考:rk3399_android7.1读写sn和eth mac地址 - 灰信网(软件开发博客聚合) (freesion.com)