Platform: RK3288
OS: Android 6.0
Kernel: 3.10.92

rk3288平台的serial number是由drmservice写进去的,drmservice在rc文件中定义启动:

init.rk30board.rc:

service drmservice /system/bin/drmserviceclass mainoneshot

源代码 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 numbergenerate_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计算seedcalc_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

[RK3288][Android6.0] 调试笔记 --- ro.serialno的获取相关推荐

  1. [RK3288][Android6.0] 调试笔记 --- touch无法获取坐标点

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 有网友遇到调试touch的时候能触发中断,但无法获取坐标点 具体可参考文章 [RK3288][An ...

  2. [RK3288][Android6.0] 调试笔记 --- AndroidTool低格无效问题

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 现象: 之前文章 [RK3288][Android6.0] 调试笔记 - AndroidTool两 ...

  3. [RK3288][Android6.0] 调试笔记 --- 电池电量一直显示100%

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 之前文章[RK3288][Android6.0] 调试笔记 - 伪电池驱动添加 阐述了如何添加一个 ...

  4. [RK3288][Android6.0] 调试笔记 --- WiFi芯片AP6356S添加

    Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 背景: RK3288 Android6.0平台对AP6356S的支持不是很完善,直接修改wifi ch ...

  5. gpio驱动广播Android,[RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】

    Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 由于板子没有lcd无法得知sd卡升级是否完成,因此使用LED显示. Recovery中升级完成后控 ...

  6. [RK3288][Android6.0] 调试笔记 --- 双屏显示内核Patch

    Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 根据5.1的双屏显示patch,在android6.0上修改了下,因为没硬件环境,所以未经验证,仅供参 ...

  7. [RK3288][Android6.0] 调试笔记 --- 调试串口的更换

    Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 假设项目有需求要将调试串口uart2 改成 uart1, 改动如下 (还未验证,先分享给大家,有问 ...

  8. [RK3288][Android6.0] 调试笔记 --- 软硬键盘同时使用【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/78748313 Platform: RK3288  OS: Android 6.0  Kern ...

  9. android 系统gpu 调试_[RK3288][Android6.0] 调试笔记 --- 读取当前DDR和GPU频率方法

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 ddr和gpu的clock都受dvfs模块管控, 所以只要执行: root@rk3288:/ # ...

最新文章

  1. 一劳永逸关闭Windwos默认共享
  2. 用CSS制作圆角框的方法一,二
  3. comp313 formal methods lec1
  4. UV认证应用安全标准的目的
  5. linux启动流程——initrd和initramfs
  6. allt什么意思_Allt是什么意思
  7. ELK-filbeate收集tomcat日志
  8. 3.10 Spark RDD编程案例
  9. TikTok广告投放必备指南
  10. [Golang软件推荐] RSA公私钥加解密(解决Golang私钥加密公钥解密问题)
  11. Flutter学习(三)
  12. Linux 基础命令(二)
  13. nginx 的proxy 时间讲解
  14. Python数据分析之获取数据
  15. dilated conv的理解
  16. 破解魔术的秘密(一)——直面秘密的角落
  17. JVM成神之路-Java内存模型(JMM)
  18. python语音识别分析_python数据建模分析 - 语音识别
  19. 使用Android模拟机开发调试移动端页面
  20. CentOs 7切换图形界面

热门文章

  1. Java物联网项目中,运行SPringBoot脚手架,运行失败问题
  2. 第三章 数字化转型的概念,技术框架及意义
  3. 什么是模块化?为什么要模块化?
  4. Python学了可以干嘛?到底赚钱吗?看完这篇文章你就懂了
  5. MVVM+Retrofit+Kotlin网络框架封装
  6. 【奇奇怪怪的bug】删除文件显示「找不到该项目」怎么办
  7. mysql 设置外键
  8. python本地安装pip命令的终极教程
  9. 李希贵:教育改革最大的阻力来自我们内心
  10. 进制转换(二进制,八进制,十进制)