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_u***/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
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_u***/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
举报