需求:HDCP Key放在优盘,实现开机烧录
实现:对于有Supernova的Android方案,烧录HDCP Key可以通过SN在main完成。
9632因为没有SN,本想在Apollo找个类似SN的地方增加,碰到权限和文件操作命令问题,走了不少弯路。
比如:尝试在dtv_svc的main创建一个process来完成execv,报错:
CANNOT LINK EXECUTABLE "su": cannot find "libdl.so" from verneed[0] in DT_NEEDED list for "/system/xbin/su"
正解:在external新建一个进程,专门负责开机烧录HDCP Key。
1. 在external新建文件夹hdcp_service,并增加Android.mk和hdcp_service.c文件
Android.mk
LOCAL_PATH := $(call my-dir)
common_cflags := \
-std=c99 \
-Os \
-Wall \
-Wextra \
-Wno-char-subscripts \
-Wno-sign-compare \
-Wno-string-plus-int \
-Wno-uninitialized \
-Wno-unused-parameter \
-funsigned-char \
-ffunction-sections -fdata-sections \
-fno-asynchronous-unwind-tables \
# static executable for use in limited environments
include $(CLEAR_VARS)
LOCAL_SRC_FILES := hdcp_service.c
LOCAL_CFLAGS := $(common_cflags)
LOCAL_CXX_STL := none
LOCAL_CLANG := true
# LOCAL_MODULE_PATH and LOCAL_UNSTRIPPED_PATH do not equal
LOCAL_UNSTRIPPED_PATH := $(PRODUCT_OUT)/symbols/utilities
LOCAL_MODULE := hdcp_service
LOCAL_MODULE_CLASS := UTILITY_EXECUTABLES
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/system/bin
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_STEM := hdcp_service
LOCAL_PACK_MODULE_RELOCATIONS := false
LOCAL_STATIC_LIBRARIES := libc libcurl libz libcrypto_static libcutils
LOCAL_SHARED_LIBRARIES := libssl
LOCAL_FORCE_STATIC_EXECUTABLE := true
include $(BUILD_EXECUTABLE)
hdcp_service.c需要一个main函数,里面做文件操作,比如读取优盘文件,拷贝,激活等动作。
可以用mmm ./external/hdcp_service/ 单独编译,替换到/system/bin目录看效果。
2. build/make/target/product/embedded.mk 增加编译,不然不会生成可执行bin
hdcp_service \
3. device/mediatek/m7332/scripts/dtv_svc.sh启动hdcp_service进程。
当然,会碰到权限的问题,都可以一一解决。
作者:工程师 超人/微信:mantis2340
网友评论