本文档以SC806-CN-00-71(msm8909平台 Android7系统)为电脑例,描述如何修改Android Serial Number。
Serial Number说明菜单 About phone -> Status -> Serial Number,如下图所示(图是中文系统,看\"序列号\"):
SC806-CN-00-71默认的序列号是:12345678
通过Adb devices显示出来的设备号也是: 12345678
UI界面显示的序列号和Adb Devices显示的设备号,两者是有区别的,下面会讲到。
代码分析Serial Number对应android系统的环境变量 ro.serialno。
查看lk的开机部分代码 bootable/bootloader/lk/app/aboot/aboot.c
下图定义了sn_buf数组,该数组是为了生成cmdline。ro.serialno的值就是通过解析cmdline得到的。
电脑SC806-CN-00-71修改了原生的android代码,把ro.serialno写死为\"12345678\",并没有通过target_serialno()函数去获取。
看下图,把target_serialno调用注释掉了。
如果要更改序列号,修改sn_buf数组的初始值即可。
我们这里把它改成\"77777777\"试试。
编译 aboot,烧录,显示如下图所示,Serial Number已经变成了\"77777777\"
也可以通过cat /proc/cmdline,电脑查看androidboot.serialno的值。
现在通过adb devices查看,还是\"12345678\"
如果要修改adb devices设备号,修改device/qcom/common/rootdir/etc/init.qcom.usb.rc,不要写死为\"12345678\",改成从ro.serialno获取。
编译boot,烧录。
遗留问题从代码上分析,修改 system/core/init/init.cpp应该也可以改掉ro.serialno的值。
在for循环之后,添加了
strlcpy(tmp, \"77777777\", sizeof(\"77777777\"));property_set(prop_map[i].dst_prop, tmp);
修改之后编译boot,烧录。但是串口调试log会提示:
property_set(\"ro.serialno\", \"99999999\") failed
给ro.serialno赋值失败。
没仔细研究property_set()函数。
代码路径和patchbootable/bootloader/lk/app/aboot/aboot.c
device/qcom/common/rootdir/etc/init.qcom.usb.rc
两个patch文件:
https://uploader.shimo.im/f/xXaBxqBTb9EyR6va.patch?attname=aboot.patch&download
https://uploader.shimo.im/f/f6dcm5ZeD3QY3cia.patch?attname=init.qcom.usb.rc.patch&download
电脑