[DESCRIPTION]
用 SN writer tool 写 Serial Num, 使移动设备系统关于界面 -> 序列号 显示所写内容.
[SOLUTION]
SN Writer Tool 工具端
1.1 用 v1.1632.00 及其之后的版本
1.2. SN Writer Tool 先关闭,修改程序目录下 SN_setup.ini 文件
Enable Serial No = True
Serial Num From IMEI = False
1.3 打开 SN Writer Tool,进入 “System Config” 配置界面,勾选左上方的 “Serial No.”
1.4 返回主界面点击 “Start” ,在号码输入界面中 “SerialNo” 中输入序列号
注意:SerialNo 只能包含英文字母或数字
移动设备端
2.1. 确认 proinfo 分区名称
早期的 MBR 分区格式设备,proinfo分区的名字是"PRO_INFO", 请通过 Scatter File 进行确认。
后续代码中涉及"proinfo"字符串判断的地方请对应修改。
2.2.
打开默认关闭的 /* #define SERIAL_NUM_FROM_BARCODE */
-> #define SERIAL_NUM_FROM_BARCODE
2.3.
static inline int read_product_info(char *buf)
{
#define PROINFO_OFFSET 116 // barcode:64 + imei:40 + bt:6 + wifi:6
int tmp = 0;
char * buf_blk = (char *)0;
if (!buf) return 0;
buf_blk = malloc(BLK_SIZE);
if (!buf_blk)
{
dprintf(CRITICAL, "[error] alloc proinfo buffer fail.\n");
return 0;
}
memset(buf_blk, 0, BLK_SIZE);
dprintf(CRITICAL, "begin read proinfo\n");
tmp = mboot_recovery_load_raw_part("proinfo", buf_blk, BLK_SIZE);
if (tmp != BLK_SIZE)
{
dprintf(CRITICAL, "[error] read proinfo fail, only read size %d, block size %d.\n", tmp, BLK_SIZE);
free(buf_blk);
return 0;
}
memcpy(buf, buf_blk + PROINFO_OFFSET, SN_BUF_LEN);
buf[SN_BUF_LEN] = '\0';
dprintf(CRITICAL, "get serialno from proinfo: \"%s\"\n", buf);
free(buf_blk);
for (tmp = 0; tmp < SN_BUF_LEN; tmp++) {
if ( (buf[tmp] == 0 || buf[tmp] == 0x20) && tmp > 0) {
break;
} else if ( !isalpha(buf[tmp]) && !isdigit(buf[tmp]))
return 0;
}
return tmp;
}