修改Android序列號(Serial Number)

文檔說明

本文檔以SC806-CN-00-71(msm8909平臺 Android7系統)為例,描述如何修改Android Serial Number。

Serial Number說明

菜單 About phone -> Status -> Serial Number,如下圖所示(圖是中文系統,看"序列號"):

修改Android序列號(Serial  Number)

SC806-CN-00-71默認的序列號是:12345678

通過Adb devices顯示出來的設備號也是: 12345678

修改Android序列號(Serial  Number)

UI界面顯示的序列號和Adb Devices顯示的設備號,兩者是有區別的,下面會講到。

代碼分析

Serial Number對應android系統的環境變量 ro.serialno。

查看lk的開機部分代碼 bootable/bootloader/lk/app/aboot/aboot.c

下圖定義了sn_buf數組,該數組是為了生成cmdline。ro.serialno的值就是通過解析cmdline得到的。

修改Android序列號(Serial  Number)

SC806-CN-00-71修改了原生的android代碼,把ro.serialno寫死為"12345678",並沒有通過target_serialno()函數去獲取。

看下圖,把target_serialno調用註釋掉了。

修改Android序列號(Serial  Number)

如果要更改序列號,修改sn_buf數組的初始值即可。

我們這裡把它改成"77777777"試試。

修改Android序列號(Serial  Number)

編譯 aboot,燒錄,顯示如下圖所示,Serial Number已經變成了"77777777"

修改Android序列號(Serial  Number)

也可以通過cat /proc/cmdline,查看androidboot.serialno的值。

修改Android序列號(Serial  Number)

現在通過adb devices查看,還是"12345678"

如果要修改adb devices設備號,修改device/qcom/common/rootdir/etc/init.qcom.usb.rc,不要寫死為"12345678",改成從ro.serialno獲取。

修改Android序列號(Serial  Number)

編譯boot,燒錄。

修改Android序列號(Serial  Number)

遺留問題

從代碼上分析,修改 system/core/init/init.cpp應該也可以改掉ro.serialno的值。

修改Android序列號(Serial  Number)

在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


分享到:


相關文章: