[RK3288][Android6.0] 除錯筆記 --- ro.serialno的獲取
阿新 • • 發佈:2019-01-08
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