瑞芯微Rockchip开发者社区
直播中

fdjslkjd

9年用户 1190经验值
擅长:光电显示
私信 关注
[问答]

有什么办法可以获取rk3288平台中的serial number

有什么办法可以获取rk3288平台中的serial number?

回帖(1)

王雪

2022-3-10 14:29:14
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
举报

更多回帖

发帖
×
20
完善资料,
赚取积分