欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android设备的序列号与ro.serialno

程序员文章站 2022-05-14 08:25:31
android设备的序列号是通过获取property“ro.serialno”的值取得的。“ro.serialno”的值一般来源于内核启动参数中的&q...

android设备的序列号是通过获取property“ro.serialno”的值取得的。“ro.serialno”的值一般来源于内核启动参数中的"ro.boot.serialno"。

在rk3368 android6.0中,uboot读取idblock的idblock_sn偏移地址获取序列号----->保存到env变量“fbt_sn#”----->保存到env变量“androidboot.serialno”----->设置到内核cmdline----->android init程序解析/proc/cmdline----->保存到property“ro.boot.serialno”----->映射保存到property“ro.serialno“

rk3368的序列号(property“ro.serialno“)来源主要有以下几种:

1. init解析/proc/cmdline获取

init 读取内核cmdline(/proc/cmdline),解析“androidboot.serialno”并赋值给“ro.boot.serialno”,然后通过映射赋值给“ro.serialno“。 但在rk3368中只有target_board_platform为sofia3gr的设备才会走这个流程。

2. 改变property“sys.serialno”的值触发修改ro.serialno

当property “sys.serialno”的值改变时,设置property“ro.serialno”的值为“sys.serialno”的值。

init.rk30board.rc

# set ro.serialno

on property:sys.serialno=*

setprop ro.serialno ${sys.serialno}

......

service drmservice /system/bin/drmservice

class main

oneshot

drmservice会改变sys.serialno的值

drmservice启动时会获取序列号保存到/data/misc/wifi/serialno,并且会设置“sys.serialno”的值,从而触发init.rk30board.rc中ro.serialno值的更新。

drmservice获取序列号的来源可能是来自idblock(读取/dev/rknand_sys_storage)、算法自动生成(根据wifi mac地址),主要看宏定义serialno_from_idb是否打开。

system/core/drmservice/drmservice.c

#define serialno_from_idb 0

烧录序列号工具: rktools/windows/upgradedlltool_v1.35。