为了找到ro.boot.serialno的赋值位置,在源码最可能出现它的目录下比如/system/、/device/、/hardware/、/u-boot/进行搜索:
grep -rn "ro.boot.serialno"
没想到这么做已经掉入坑里了!这个属性是通过字符串拼接形成的,看下产生位置:
/system/core/init/init.c
// name: "androidboot.serialno=H201611200859"
static void import_kernel_nv(char *name, int for_emulator)
{
char *value = strchr(name, '='); // value: "=H201611200859"
int name_len = strlen(name);
if (value == 0) return;
*value++ = 0; // value: "H201611200859"
if (name_len == 0) return;
if (!strcmp(name,"qemu")) {
strlcpy(qemu, value, sizeof(qemu));
} else if (!strncmp(name, "androidboot.", 12) && name_len > 12) {
const char *boot_prop_name = name + 12; // boot_prop_nam