阅读: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 =

最新喜欢:

thomas_2022thomas... 150257150257 conlanconlan yamyam zhaoyf13zhaoyf...
If you have nothing to lose, then you can do anything.
沙发#
发布于:2019-09-25 18:29
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
板凳#
发布于:2019-11-04 14:28
这些 序列号有什么作用, 我的预置GMS不能用是不是和这个有关
地板#
发布于:2019-11-04 14:47
阿赞88:这些 序列号有什么作用, 我的预置GMS不能用是不是和这个有关回到原帖
你的GMS不能用,是什么现象?
可能是这个变量你没有修改:
/device/amlogic/ampere/ampere.mk

-PRODUCT_BRAND := Droidlogic
+PRODUCT_BRAND := Amlogic

试试看



If you have nothing to lose, then you can do anything.
游客

返回顶部