管理员
|
阅读:13003回复:3
关于Amlogic的设备序列号
楼主#
更多
发布于:2019-07-05 12:37
Amlogic的设置序列号烧写统一由Amlogic SDK自带的unifykeys工具来实现,下面介绍下具体的操作方法。 在命令行下操作unifykeys工具,unifykeys工具在如下目录: p212:/ # cd /sys/class/unifykeys/ p212:/sys/class/unifykeys # ls -l total 0 -rw-rw---- 1 root root 4096 2015-01-01 00:00 attach -r--r--r-- 1 root root 4096 2015-01-01 00:00 encrypt -r--r--r-- 1 root root 4096 2015-01-01 00:00 exist -r--r--r-- 1 root root 4096 2015-01-01 00:00 help -r--r--r-- 1 root root 4096 2015-01-01 00:00 list -rw-rw---- 1 root root 4096 2015-01-01 00:00 lock -rw-rw-rw- 1 media root 4096 2015-01-01 00:00 name -rw-rw-rw- 1 media root 4096 2015-01-01 00:00 read -r--r--r-- 1 root root 4096 2015-01-01 00:00 size lrwxrwxrwx 1 root root 0 2015-01-01 00:00 unifykeys -> ../../devices/virtual/unifykeys/unifykeys -r--r--r-- 1 root root 4096 2015-01-01 00:00 version --w--w---- 1 root root 4096 2015-01-01 00:00 write p212:/sys/class/unifykeys # 可以看到有很多节点可以操作,我们主要用到一下几个节点: list 通过读取list节点可以获取当前的支持烧写那些key,如下支持一共14个key的烧写 p212:/sys/class/unifykeys # cat list 14 keys installed 00: usid, normal, 7 01: mac, normal, 7 02: hdcp, secure, 7 03: secure_boot_set, efuse, 2 04: mac_bt, normal, 7 05: mac_wifi, normal, 7 06: hdcp2_tx, normal, 7 07: hdcp2_rx, normal, 7 08: widevinekeybox, secure, 7 09: deviceid, normal, 7 10: hdcp22_fw_private, secure, 7 11: PlayReadykeybox25, secure, 7 12: prpubkeybox, secure, 7 13: prprivkeybox, secure, 7 name 通过对name节点的写入,可以选择设置对哪一种key进行操作 如下操作为选择对usid这个key进行操作: p212:/sys/class/unifykeys # echo usid > name write 通过对write节点进行写入,即是对上面选择好的key进行烧写 p212:/sys/class/unifykeys # echo 1afa72b03bca > write read 通过对read节点的读取,可以查看上面选择好的key的具体值 p212:/sys/class/unifykeys # cat read 1afa72b03bcap212:/sys/class/unifykeys # 主要是这几个节点。 ========================================================================== 下面介绍下,烧写了这些key之后,例如usid和deviceid,APP怎么读取。 在开机的时候,在最首先是uboot会去读取这些存储key的分区,加载到uboot的环境变量中,例如ro.boot.serialno中会保存你刚刚写入的usid的值。然后在init进程中,Android系统会复制该属性的值,新建名为ro.serialno的系统属性来保存这个值,这样APP即可通过读取ro.serialno的系统属性来获取盒子的唯一id。 有些时候预装的客户的APP,客户的APP读取的不是ro.serialno这个属性来读取盒子的ID,而是客户APP自己定义好的,这个时候我们不能要求客户修改APP,我们可以自己在系统中增加客户的名字的系统属性,代码如下:路径:Android_project/system/core/init/init.cpp: static void export_kernel_boot_props() { struct { const char *src_prop; const char *dst_prop; const char *default_value; } prop_map[] = { { "ro.boot.serialno", "ro.serialno", "", }, { "ro.boot.mode", "ro.bootmode", "unknown", }, { "ro.boot.baseband", "ro.baseband", "unknown", }, { "ro.boot.bootloader", "ro.bootloader", "unknown", }, { "ro.boot.hardware", "ro.hardware", "unknown", }, { "ro.boot.revision", "ro.revision", "0", }, { "ro.boot.firstboot", "ro.firstboot", "0", }, { "ro.boot.serialno", "ro.device_id", "", },//这里新增ro.device_id属性,复制ro.boot.serialno的值 }; for (size_t i = 0; i < ARRAY_SIZE(prop_map); i++) { std::string value = property_get(prop_map.src_prop); property_set(prop_map.dst_prop, (!value.empty()) ? value.c_str() : prop_map.default_value); } } 编译,烧录,搞定! = v =
|