Android 系统序列号从哪里来,以及客制化序列号

本文详细介绍了Android系统序列号的来源,从MTK平台的LK阶段如何读取SN号,到init进程如何处理SN号并设置为系统属性。还探讨了如何在系统启动过程中客制化修改SN号,例如使用EMMC的id作为SN号。通过修改LK和init进程的代码,可以实现对SN号的定制,从而满足特定需求。

Android 系统序列号从哪里来,以及客制化序列号

系统获取序列号过程

Android系统的SN号,实际是从“cmdline”里面的“androidboot.serialno”获取到的,那么在给系统传递“cmdline”之前,就需要获取到SN号。

以MTK的一个Android 5.1系统为例,MTK的SN号,通过写号工具,和IMEI等参数,一起写入“NV(Non-Volatile)”中,然后开机再读出来用。

读取SN号的部分,在lk中,代码如下,文件:bootable/bootloader/lk/app/mt_boot/mt_boot.c:

void mt_boot_init(const struct app_descriptor *app)
{
   
   
	unsigned usb_init = 0;
	unsigned sz = 0;
	int sec_ret = 0;
#ifdef CONFIG_MTK_USB_UNIQUE_SERIAL
	u64 key;
	u32 chip_code;
#endif
	char serial_num[SERIALNO_LEN];

#ifdef CONFIG_MTK_USB_UNIQUE_SERIAL
	/* Please enable EFUSE clock in platform.c before reading sn key */
	/* serial string adding */
	key = readl(SERIAL_KEY_HI);
	key = (key << 32) | readl(SERIAL_KEY_LO);
	chip_code = DRV_Reg32(APHW_CODE);
	//如果有使用写号工具去写号,那么“key”就不为零,这里具体计算SN号的算法,都是平台厂商定义的东西
	//估计是写号的时候,使用逆向的算法得到“key”,读的时候使用“key”再去算SN号
	if (key != 0)
		get_serial(key, chip_code, serial_num);		//这里用到厂商定义的算法,算出来SN号来
	else
		memcpy(serial_num, DEFAULT_SERIAL_NUM, SN_BUF_LEN);		//如果没有写号,使用默认值“DEFAULT_SERIAL_NUM”
	/* copy serial from serial_num to sn_buf */
	memcpy(sn_buf, serial_num, SN_BUF_LEN);		//只需要“SN_BUF_LEN”长度做系统SN号
			dprintf(CRITICAL,"serial number %s\n",serial_num);
#else
			memcpy(sn_buf, DEFAULT_SERIAL_NUM, strlen(DEFAULT_SERIAL_NUM));
#endif
	sn_buf[SN_BUF_LEN] = '\0';
	surf_udc_device.serialno = sn_buf;

	......
}

读取到SN号之后,传递给“cmdline”的“androidboot.serialno”,代码如下,依然在mt_boot.c文件:

    /* Append androidboot.serialno=xxxxyyyyzzzz in cmdline */
    sprintf(cmdline, "%s%s%s", cmdline, " androidboot.serialno=", sn_buf);

然后,init进程启动之后,会去处理“cmdline”,得到SN号。
代码如下,文件:system/core/init/init.c

static void process_kernel_cmdline(
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值