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.serialnoon 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


更多相关文章

  1. Android设备预计将超微软
  2. 微软之鉴:Google不会将Android与Chrome OS融合?
  3. android获取手机序列号
  4. 【安卓】关于 Android 默认字体以及对比微软雅黑字体
  5. 微软发布 mircosft remote desktop for android
  6. Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azur
  7. 专利敲诈——微软对Android痛下杀手的背后
  8. android 获取设备IMEI与序列号
  9. 获取Android设备唯一标识(唯一序列号)

随机推荐

  1. 【进阶篇】Android学习笔记——TextInput
  2. Android官方命令深入分析之AVD Manager
  3. android:layout_marginEnd隐藏的坑
  4. Android中设置Button的颜色形状圆角
  5. Android Studio 真机调试连接手机
  6. Marquee 跑马效果
  7. 利用Android源代码编译一个自己写的Hello
  8. 《Android(安卓)Dev Guide》系列教程17:建
  9. Fragment+viewpager 傻子都能看懂的demo
  10. android:scaleType属性