1. 程式人生 > >[RK3288][Android6.0] 除錯筆記 --- ro.serialno的獲取

[RK3288][Android6.0] 除錯筆記 --- ro.serialno的獲取

Platform: RK3288
OS: Android 6.0
Kernel: 3.10.92

rk3288平臺的serial number是由drmservice寫進去的,drmservice在rc檔案中定義啟動:

init.rk30board.rc:

service drmservice /system/bin/drmservice
    class main
    oneshot

原始碼 system/core/drmservice

int main( int argc, char *argv[] )
{
    SLOGE("----------------running drmservice---------------"
)
; ...... //此值表示從IDB中獲取,當前預設為0. if(SERIALNO_FROM_IDB)//read serialno form idb { ...... } else//auto generate serialno { //生成serial number generate_device_serialno(10,sn_buf_auto); //寫到屬性為"sys.serialno"的property中。 property_set("sys.serialno"
, sn_buf_auto[0] ? sn_buf_auto : "")
; //寫到/sys/class/android_usb/android0/iSerial中 //此位置作為裝置序列號儲存的地方,可以臨時修改,重啟後失效。 write_serialno2kernel(sn_buf_auto); SLOGE("auto generate serialno,serialno = %s",sn_buf_auto); } ...... }

generate_device_serialno -> get_serialno_cached

int
get_serialno_cached(char * result,int len) { //開啟的是"/data/misc/wifi/serialno",也就是讀取的是wifi的serial number. fd = open(DEVICE_SERIALNO, O_RDONLY); ...... readlen=read(fd, buf, sizeof(buf) - 1); ...... memcpy(result,buf,readlen); }

serial number是通過wifi mac地址計算出來的,在generate_device_serialno()中實現

void generate_device_serialno(int len,char*result)
{
    ......
    //已經有serialno就返回
    if(!get_serialno_cached(result,len))
    {
        SLOGE("----------serianno =%s",result);
        return;
    }
    //開啟mac地址
    fd = open(WLAN_MAC_FILE, O_RDONLY);

    //根據mac計算seed
    calc_seed_by_mac(value,seed);

    //儲存seed到serialno檔案中
    store_serialno(result);
}

當“sys.serialno”屬性被設定時,會觸發ro.serialno的更新
init.rk30board.rc:

# set ro.serialno
on property:sys.serialno=*
    setprop ro.serialno ${sys.serialno}

ro.serialno有了值以後,其他程序就可以使用了。

附drm service相關Log:

03-05 14:58:22.850   221   221 E DrmService: ----------------running drmservice---------------
03-05 14:58:22.850   221   221 E DrmService: get prop_board_platform,prop_board_platform = rk3288 , diff=-1
03-05 14:58:22.855   215   215 I chatty  : uid=0(root) /system/bin/debuggerd expire 1 line
03-05 14:58:22.871   221   221 E DrmService: ----------serianno =C8W7K5OYPX
03-05 14:58:22.872   221   221 E DrmService: auto generate serialno,serialno = C8W7K5OYPX
03-05 14:58:22.872   221   221 E DrmService: rknand_sys_storage open fail
03-05 14:58:22.872   221   221 E DrmService: detect keybox disabled