MTK Android9.0 给vendor下文件夹权限,用于读取文件列表

embedded/2024/10/21 0:30:28/

1.背景

最近在TV开发中遇到一个问题:如何判断设备烧录过HDCP KEY的问题,由于MTK的官方接口返回值并不准确,只能判断2.2是否烧录,不能准确判断1.4是否烧录过,因为HDCP 的KEY有两个,分别是1.4和2.2,为了兼容更多用户的设备,这两个文件都要烧录成功,MTK的接口如下:

if (MtkTvFApiSystemWrapper.getInstance().checkFile("vendor/tvcertificate/hdcp_key.bin")|| MtkTvFApiSystemWrapper.getInstance().checkFile("vendor/tvcertificate/hdcp2_key.bin")) {//  Toast.makeText(getActivity(), "HDCP KEY已烧录,请勿重复操作!", Toast.LENGTH_LONG);hasHdcpKey=true;}

为了能准确判断是否烧录了这两个文件,只能换其他方法,

后来经测试发现,烧录HDCP KEY文件后,在 'vendor/tvcertificate/tee'路径下会生成两个文件,分别是0和1,所以只要能够获取该路径下的文件列表就可以判断是否烧录过HDCP KEY文件了。

2.获取'./tee'下的文件列表

  public static final String HDCP_TEE="vendor/tvcertificate/tee";/*** 判断 ./tee 路径下有没有名为0和1的文件* @return*/public static boolean isHasHdcp14() {File fileTee = new File(HDCP_TEE);File[] listFiles = fileTee.listFiles();String[] arrayString = fileTee.list();boolean hasHdcp14 = false;if (arrayString == null || arrayString.length == 0) {Log.d(TAG, "isHasHdcp14: list null");return false;} else {List<String> nameList = Arrays.asList(arrayString);for (int i = 0; i < nameList.size(); i++) {Log.d(TAG, "isHasHdcp14: list " + nameList.get(i).toString());if (nameList.contains("0") && nameList.contains("1")) {hasHdcp14 = true;Log.d(TAG, "isHasHdcp14: = true");}}}return hasHdcp14;}

因为没有权限读取这个文件,所以返回为null

3.给指定文件权限

要修改init.mt5862.rc文件,mt5862是平台名称,

这个文件有执行顺序,我们选择在开机后修改权限,这样用户如果在开机后,立刻去系统设置中检查HDCP KEY是否烧录也没有问题,因为已经拿到权限了

on boot# create the coredump file...chmod 666 /vendor/tvcertificate/teechmod 666 /vendor/tvcertificate/tee/0chmod 666 /vendor/tvcertificate/tee/1...

如上,修改了这个文件后,需要重新编译固件,烧录到设备上,

拿到权限后再调方法就可以获取./tee路径下的文件列表了

其他文件权限,可以参考这个流程。


http://www.ppmy.cn/embedded/44214.html

相关文章

SELINUX=enforcing时无法启动httpd服务的解决方案(semanage命令以及setroubleshoot-server插件的妙用)

一、问题描述&#xff1a; 当/etc/selinux/conf被要求必须是SELINUXenforcing&#xff0c;不被允许使用setenforce 0宽松模式 我们启动httpd就会报错&#xff1a; Job for httpd.service failed because the control process exited with error code. See "systemctl s…

sdbusplus:通过文件描述符传递数据

有的时候需要传递大量的数据,如果将数据通过dbus传递,会消耗大量的带宽。可以通过传递一个文件描述符替代传递数据: 以下的service通过文件描述符接收数据: //fd_service.cpp #include <sdbusplus/asio/connection.hpp> #include <sdbusplus/asio/object_server…

查看环境中python3安装在哪指令

1. 查看安装在哪&#xff1a; pip install where where python3 2. 查看是否安装&#xff1a; pip freeze | grep transformers

文心智能体平台丨创建你的四六级学习小助手

引言 在人工智能飞速发展的今天&#xff0c;我们迎来了文心智能体平台。该平台集成了最先进的人工智能技术&#xff0c;旨在为用户提供个性化、高效的学习辅助服务。今天&#xff0c;我们将向大家介绍如何利用文心智能体平台&#xff0c;创建一个专属于你的四六级学习小助手。…

k8s部署calico遇到的问题

kubernetes安装calico calico官网 环境&#xff1a;centos7.9&#xff0c;calico 3.23&#xff0c;kuberadm 1.26 问题1&#xff1a;执行kubectl create -f calico.yml后报错如下 error: resource mapping not found for name: “tigera-operator” namespace: “” from “…

深入分析 Android Activity (一)

文章目录 深入分析 Android Activity (一)1. Activity 的窗口管理2. Activity 的生命周期管理onCreateonStartonResumeonPauseonStoponDestroyonRestart 3. Activity 与 Fragment 的交互添加 FragmentFragment 的生命周期 4. Activity 的任务和返回栈5. 配置变化处理 总结 深入…

python -【五】数据容器

数据容器 一、列表 列表的循环 name_list [张三, 李四, 王五] print(f类型是&#xff1a;{type(name_list)})# while 遍历列表 count 0 while count < len(name_list):print(fwhile 下标为[{count}] 的内容是[{name_list[count]}])count 1# for 循环 for name in name…

python打造自定义汽车模块:从设计到组装的全过程

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、定义汽车模块与核心类 三、模拟汽车组装过程 四、抽象与封装 五、完整汽车…