Androidデバイスのシリアル番号とro.serialno


Androidデバイスのシリアル番号は、Property「ro.serialno」の値を取得することによって取得されます.「ro.serialno」の値は、カーネル起動パラメータの「ro.boot.serialno」に由来します.
rk 3368 Android 6.0でubootがidblockのIDBLOCK_を読み込むSNオフセットアドレス取得シーケンス番号-->env変数「fbt_sn#」-->env変数「androidboot.serialno」に保存-->カーネルCMDLINE-->android initプログラム解析/proc/cmdline-->Property「ro.boot.serialno」に保存-->Property「ro.serialno」にマッピング保存
rk 3368のシリアル番号(Property"ro.serialno")のソースは主に以下のとおりです.
1.init解析/proc/cmdline取得
Initはカーネルcmdline(/proc/cmdline)を読み出し、「androidboot.serialno」を解析して「ro.boot.serialno」に値を割り当て、マッピングにより「ro.serialno」に値を割り当てる.ただしrk 3368システムではTARGET_BOARD_PLATFORMがsofia 3 grのデバイスのみがこのプロセスを実行する.
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