文檔說明
本文檔以SC806-CN-00-71(msm8909平臺 Android7系統)為例,描述如何修改Android Serial Number。
Serial Number說明
菜單 About phone -> Status -> Serial Number,如下圖所示(圖是中文系統,看"序列號"):
![修改Android序列號(Serial Number)](http://p2.ttnews.xyz/loading.gif)
SC806-CN-00-71默認的序列號是:12345678
通過Adb devices顯示出來的設備號也是: 12345678
![修改Android序列號(Serial Number)](http://p2.ttnews.xyz/loading.gif)
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()函數。
代碼路徑和patch
bootable/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
閱讀更多 導盲小Q 的文章