前言¶
概述
本文章是基于视觉SS928V100开发板,进行OpenHarmony 5.1.0 Release小型系统相关功能的移植;主要包括解决方案集成,产品配置添加,内核移植适配、编译,XTS认证,HUKS组件增强特性,图形增强特性,媒体增强特性的适配案例总结。
读者对象
本文档主要适用于视觉OpenHarmony Small系统升级的操作人员。操作人员必须具备以下经验和技能:
熟悉OpenHarmony源码编译构建。
熟悉视觉类芯片SDK版本。
符号约定
在本文中可能出现下列标志,它们所代表的含义如下。
符号 |
说明 |
|---|---|
|
表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。 |
|
表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。 |
|
表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。 |
|
用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。 “须知”不涉及人身伤害。 |
|
对正文中重点信息的补充说明。 “说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。 |
修改记录
文档版本 |
发布日期 |
修改说明 |
|---|---|---|
00B02 |
2026-03-05 |
第2次临时版本发布。 修改文档结构,新增编译、启动、HUKS、third_party等子系统的适配 |
00B01 |
2025-09-15 |
第1次临时版本发布。 |
开发板device_board_hisilicon适配¶
本目录用于存放SS928V100的开发板相关内容,支持运行小型系统的开发板;介绍了单板、内核、工具链和编译器等信息。
device/board/hisilicon/hispark_ss928v100/
├── BUILD.gn
├── kernel
│ ├── BUILD.gn #编译框架GN文件
│ ├── kernel.mk #用于配置内核编译交叉工具链、源码环境、defconfig等信息
│ └── kernel_module_build.sh #内核编译入口shell脚本文件
├── linux
│ ├── config.gni #用于描述这个产品样例所使用的单板、内核、工具链、编译器等信息
│ └── LICENSE
├── ohos.build #定义一个device_hispark_ss928v100子系统,该设备下module_list字段列出了设备需要加载的模块
└── README_zh.md
OpenHarmony上SS928V100的内核编译代码模型¶
图 1 OpenHarmony上SS928V100内核编译代码模型

OpenHarmony的内核编译¶
OpenHarmony的Linux内核是基于开源Linux内核LTS 5.10y/6.6.y分支上,回合CVE补丁和OpenHarmony特性。若要支持芯片的内核特性,则需要从开源Linux内核LTS上对应分支上,选取同一个版本或者版本号相近的内核源码。本系统芯片的内核选型和OpenHarmony的Linux内核相同的linux-6.6.86版本,可以直接将SDK提供的linux-6.6.86.patch补丁文件直接应用于鸿蒙内核源码上,解决代码冲突即可。
kernel的编译入口在device/board/hisilicon/hispark_ss928v100/kernel/BUILD.gn。为提高调试kernel的效率,可将command命令打印出来、在当前目录下执行可单独编译内核。
build_ext_component("build_kernel") {
no_default_deps = true
exec_path = rebase_path(".", root_build_dir)
outdir = rebase_path("$root_out_dir")
build_type = "small"
product_path_rebase = rebase_path(product_path, ohos_root_path)
command = "chmod +x ./kernel_module_build.sh && ./kernel_module_build.sh ${outdir} ${build_type} ${target_cpu} ${product_path_rebase} ${board_name} ${linux_kernel_version}"
}
内核编译的详细流程配置在device/board/hisilicon/hispark_ss928v100/kernel/kernel.mk
说明:
当内核编译时,会将kernel/linux/linux-6.6的源代码拷贝至$(OUT_DIR)/kernel/${KERNEL_VERSION},再进行打补丁的动作
使用工程的全量编译命令,编译生成uImage内核镜像 ./build.sh --product-name=ipcamera_hispark_ss928v100_linux --ccache --no-prebuilt-sdk --build-target build_kernel 也可以选择指定编译的内核版本,默认以config.json文件配置为准 --gn-args linux_kernel_version=\"linux-6.6\"
本文基于Linux-6.6内核版本,不支持Linux-5.10
芯片device_soc_hisilicon适配¶
本目录用于存放芯片相关内容,包含HDI实现(display、huks、media、middleware)、芯片SDK(用户态库、头文件、驱动源码、MPP Sample等)
device/soc/hisilicon
├── common
│ ├── hal
│ │ ├── display #南向显示适配实现,如FrameBuffer框架适配
│ │ ├── huks #南向安全组件的硬件密钥加解密接口实现
│ │ ├── media
│ │ │ ├── audio
│ │ │ ├── build
│ │ │ ├── camera
│ │ │ ├── codec
│ │ │ ├── common
│ │ │ ├── format
│ │ │ └── ...
│ │ ├── middleware #媒体中间件
│ │ │ ├── source #支持SS928V100和SS927V100的媒体中间件
│ │ │ └── ...
│ │ └── ...
│ └── ...
└── ss928v100
├── burn
│ └── emmc_burn_table.xml #烧写emmc介质的镜像分区表
├── kernel
│ └── arch #芯片的dts文件
├── NOTICE
├── README_zh.md
├── sdk_linux
│ ├── BUILD.gn
│ ├── build.sh #编译SDK入口:编译ko、atf
│ ├── config.gni
│ ├── open_source #编译SDK依赖的开源软件,提供配置指导和定制补丁
│ ├── smp #SDK软件,自研,包括内核驱动源码、sample实例代码,闭源库
│ ├── ss928v100_sdk_patch_001.patch #OpenHarmony环境上编译SDK制作的patch
│ └── ss928v100_sdk_patch_002.patch #基于编译内核fip.bin ATF制作的patch
├── soc.gni
└── uboot
└── LICENSE
OpenHarmony环境上集成编译芯片SDK¶
配置OpenHarmony环境上编译芯片SDK的相关参数。
修改文件device/soc/hisilicon/ss928v100/sdk_linux/BUILD.gn,配置芯片SDK编译的相关参数。
ohos_root_path:OpenHarmony源码根目录;
outdir:OpenHarmony源码编译out目录;
y:是否为Lite型系统;
clang_dir:编译工具链路径;
linux_kernel_version:指定使用的内核版本;
chip:芯片型号。
if (defined(ohos_lite)) {
...
build_ext_component("sdk_make") {
exec_path = rebase_path(".", root_build_dir)
outdir = rebase_path("$root_out_dir")
clang_dir = ""
if (ohos_build_compiler_dir != "") {
clang_dir = rebase_path("$ohos_build_compiler_dir")
}
chip = "ss928v100"
if (board_name == "hispark_ss927v100") {
chip = "ss927v100"
}
command = "./build.sh ${ohos_root_path} ${outdir} y ${clang_dir} ${linux_kernel_version} ${chip}"
deps = [ "//device/board/hisilicon/${device_name}/kernel:build_kernel" ]
}
...
}
说明: 配置OpenHarmony环境上适配芯片SDK的编译:command = "./build.sh ${ohos_root_path} ${outdir} y ${clang_dir} ${linux_kernel_version} ${chip}"
配置编译SDK的工具链¶
SDK包中提供内核驱动源码和Sample源码,可以通过源码进行编译。在编译前,需要配置编译工具链,将编译工具链路径加入到环境变量中。
将Clang编译工具链路径加到环境变量中,执行:export PATH=/path/to/toolchains:$PATH
例如,Clang所在的路径为/path/to/llvm_clang/bin,则执行:
export PATH=/path/to/llvm_clang/bin:$PATH
检查Clang配置环境变量是否生效。
command -v clang
OpenHarmony环境上编译ko和atf¶
修改device/soc/hisilicon/ss928v100/sdk_linux/build.sh
set -e
OHOS_ROOT_PATH=$1
OUTDIR=$2
OHOS_LITE=$3
COMPILER_DIR=$4
CHIP=$6
export KERNEL_VERSION="$5"
if [ -z "${OHOS_ROOT_PATH}" ];then
OHOS_ROOT_PATH=$(pwd)/../../../..
else
echo "OHOS_ROOT_PATH=${OHOS_ROOT_PATH}"
fi
export OHOS_ROOT_PATH
export OHOS_OUTDIR
if [ ${COMPILER_DIR} != "" ];then
export COMPILER_PATH=${COMPILER_DIR}/bin
fi
SDK_LINUX_SRC_PATH=${OHOS_ROOT_PATH}/device/soc/hisilicon/ss928v100/sdk_linux
SDK_LINUX_TMP_PATH=${OUTDIR}/sdk_linux/src_tmp
SDK_LINUX_SMP_PATH=${SDK_LINUX_TMP_PATH}/smp
SDK_LINUX_OPEN_PATH=${SDK_LINUX_TMP_PATH}/open_source
SDK_LINUX_ATF_PATH=${SDK_LINUX_TMP_PATH}/open_source/trusted-firmware-a
SYSROOT_PATH=${OHOS_ROOT_PATH}/out/hispark_${CHIP}/ipcamera_hispark_${CHIP}_linux/sysroot
export SYSROOT_PATH
OSDRV_CROSS_PATH=${OHOS_ROOT_PATH}/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu
...
echo "Add patchs to sdk..."
pushd ${SDK_LINUX_SMP_PATH}
patch -p1 < ./ss928v100_sdk_patch_001.patch
popd
echo "Add patchs to atf..."
pushd ${SDK_LINUX_ATF_PATH}
patch -p1 < ./ss928v100_sdk_patch_002.patch
popd
echo "compile ko..."
pushd "${SDK_LINUX_SMP_PATH}/a55_linux/mpp/out/obj" && \
make clean OHOS_LITE=y CHIP="${CHIP}" SYSROOT_PATH="${SYSROOT_PATH}" && \
make -j OHOS_LITE=y CHIP="${CHIP}" SYSROOT_PATH="${SYSROOT_PATH}" && popd
echo "compile atf..."
pushd ${SDK_LINUX_OPEN_PATH}/trusted-firmware-a && make clean OHOS_LITE=y &&
make -j OHOS_LITE=y CHIP=${CHIP} KERNEL_VER=${KERNEL_VERSION} OSDRV_CROSS=${OSDRV_CROSS_PATH}&& popd
...
mkdir -p ${SDK_LINUX_TMP_PATH}/out
cp -rf ${SDK_LINUX_SMP_PATH}/a55_linux/mpp/out/ko ${SDK_LINUX_TMP_PATH}/out
# batch sign ko file
${SDK_LINUX_SRC_PATH}/batch_sign_ko.sh ${SDK_LINUX_TMP_PATH}/out
# copy images and burn_table file
cp -rf ${SDK_LINUX_SRC_PATH}/../burn/* ${OUTDIR}
# cp uImage,exe atf, flip.bin改名uImage,并替换掉;
cp -rf ${SDK_LINUX_OPEN_PATH}/trusted-firmware-a/trusted-firmware-a-2.2/build/${CHIP}/release/fip.bin ${OUTDIR}
# $(hide) cp -rf $(KERNEL_OBJ_TMP_PATH)/arch/$(KERNEL_ARCH)/boot/uImage $(OUT_DIR)
说明: OpenHarmony环境上编译ko和atf的流程:
配置编译SDK的环境变量:OHOS_ROOT_PATH、COMPILER_PATH、SYSROOT_PATH、OHOS_OUTDIR
编译SDK提供的驱动源码,在${SDK_LINUX_SMP_PATH}/a55_linux/mpp/out/ko生成ko文件,由于鸿蒙内核base_defconfig开启CONFIG_MODULE_SIG,因此需要使用batch_sign_ko.sh对ko进行签名
使用ATF软件对前面编译内核生成的uImage,封装成fip镜像
往rootfs中打包SDK用户态库¶
修改文件device/soc/hisilicon/ss928v100/sdk_linux/BUILD.gn,将芯片SDK提供的用户态lib库文件拷贝进outdir中,从而被打包进rootfs中。
sdk_libs_name_set:为在OpenHarmony环境上运行MPP Sample所依赖的用户态lib库文件列表。
sdk_libs_name_set = [
"libaac_comm.so",
"libaac_dec.so",
"libaac_enc.so",
"libaac_sbr_dec.so",
"libaac_sbr_enc.so",
"libaiv.so",
...
]
lib_lite_abspath = rebase_path("$SDK_LINUX_LIB_LITE_PATH", ".")
sdk_linux_libs_targets = []
foreach(lib, sdk_libs_name_set) {
copy("$lib") {
sources = [ "$lib_lite_abspath/$lib" ]
outputs = [ "$root_out_dir/$lib" ]
}
sdk_linux_libs_targets += [ ":$lib" ]
}
group("sdk_linux_lite_libs") {
deps = sdk_linux_libs_targets
}
编译MPP Sample¶
进入sdk/smp/a55_linux/mpp/sample,执行:make
编译完成后,各sample可执行文件位于sdk/smp/a55_linux/mpp/sample对应的目录下。
说明: sample中使用了SDK_init和SDK_exit来进行MPP各个模块的初始化和退出。hnr需要使用pqp模块,SDK_init中默认未初始化pqp模块,因此需要单独对hnr的sample进行重编,具体步骤为:
将sdk/smp/a55_linux/mpp/sample/common/sdk_module_init.h头文件中的宏定义INIT_PQP修改为1;
进入hnr目录重编,命令如下。
cd sdk/smp/a55_linux/mpp/sample/hnr make clean make
产品vendor_hisilicon配置¶
产品目录规划为:
vendor/hisilicon/hispark_ss928v100_linux/ #hispark_ss928v100_linux小系统相关配置
├── BUILD.gn
├── config.json #定义当前产品集成subsystem范围,添加到config.json才会加入编译构建
├── fs.yml #指导构建打包生成rootfs,将组件编译产物打包设置文件属性、权限、创建软链接,制作文件系统镜像
├── hals
├── hdf_config
├── init_configs
│ ├── BUILD.gn
│ ├── etc #定义系统初始化启动脚本,用于创建和挂载设备节点、加载ko文件等
│ └── init_linux_openharmony.cfg #定义系统启动时的初始化参数和配置,由init进程解析加载
└── ohos.build
kernel适配¶
kernel_linux_config适配¶
新增hispark_ss928v100目录,用于存放SS928V100内核集成的defconfig文件;若有扩展特性,新增配置项可添加至support_defconfig文件中,或者新增一个defconfig文件。
kernel/linux/config/linux-6.6
├── arch
├── hispark_ss928v100
│ ├── arm64_defconfig #芯片单板arm64特性的内核配置文件,为SDK提供的defconfig文件重命名
│ └── support_defconfig #适配鸿蒙内核linux-6.6编译和鼠标等外设配置文件
├── type
│ ├── small_defconfig #小型系统常用配置文件
│ └── standard_defconfig #标准系统常用配置文件
└── base_defconfig #OpenHarmony特性依赖的内核必选模块以及安全红线特性等必须开启的配置项,其中配置不可被覆盖
为了遵循社区的Config配置规则,采取Linux提供的合并defconfig配置文件的脚本scripts/kconfig/merge_config.sh进行多个配置文件覆盖合并,合并顺序越靠后覆盖优先级越高。编译时,首先会将如下配置文件拷贝至$(OUT_DIR)/kernel/${KERNEL_VERSION},然后按照顺序合并生成新的defconfig文件,最后若要新增配置文件,也可放置在base_defconfig之前。
$(hide) cp -rf $(KERNEL_CONFIG_PATH)/. $(KERNEL_SRC_TMP_PATH)/
$(hide) bash $(KERNEL_SRC_TMP_PATH)/scripts/kconfig/merge_config.sh -O $(KERNEL_SRC_TMP_PATH)/arch/$(KERNEL_ARCH)/configs/ \
-m $(KERNEL_SRC_TMP_PATH)/type/small_defconfig $(KERNEL_SRC_TMP_PATH)/$(DEVICE_NAME)/arch/arm64_defconfig \
$(KERNEL_SRC_TMP_PATH)/$(DEVICE_NAME)/arch/support_defconfig $(KERNEL_SRC_TMP_PATH)/base_defconfig
$(hide) mv ${KERNEL_SRC_TMP_PATH}/arch/$(KERNEL_ARCH)/configs/.config ${KERNEL_SRC_TMP_PATH}/arch/$(KERNEL_ARCH)/configs/$(DEFCONFIG_FILE)
$(hide) $(KERNEL_MAKE) -C $(KERNEL_SRC_TMP_PATH) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) distclean
$(hide) $(KERNEL_MAKE) -C $(KERNEL_SRC_TMP_PATH) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(DEFCONFIG_FILE)
kernel_linux_patches适配¶
新增hispark_ss928v100_patch目录,用于存放SS928V100内核集成的补丁文件;若有扩展特性,可单独新增一个patch文件追加应用。
kernel/linux/patches/linux-6.6
├── common_patch
│ └── hdf.patch
└── hispark_ss928v100_patch
├── 0001-kernel-hispark_ss928v100.patch #芯片特性的内核补丁文件,为SDK提供内核补丁解决代码冲突后制作
├── 0002-kernel-compile-support.patch #适配OpenHarmony Linux-6.6内核编译的补丁文件
└── patch_hispark_ss928v100.sh #hispark_ss928v100内核打补丁的shell文件
前置步骤已将开源鸿蒙源码拷贝至$(OUT_DIR)/kernel/${KERNEL_VERSION},接着说明内核补丁如何应用。
合入HDF补丁
按照drivers/hdf_core/adapter/khdf/linux/patch_hdf.sh中HDF补丁应用方法,将kernel/linux/patches/linux-6.6/common_patch/hdf.patch应用到源码上,同时将依赖的三方软件和源码配置好、详情见patch_hdf.sh。
配置依赖的bounds_checking_function软件
若编译linux-6.6内核时,则配套要修改bounds_checking_function/include/securec.h的stdarg.h。
ifeq ($(KERNEL_VERSION), linux-6.6) sed -i 's/<stdarg.h>/<linux\/stdarg.h>/' $(KERNEL_SRC_TMP_PATH)/bounds_checking_function/include/securec.h endif
合入芯片平台适配鸿蒙内核基线的补丁
$(hide) echo "apply kernel patch..." $(hide) chmod 755 $(DEVICE_PATCH_DIR)/patch_$(DEVICE_NAME).sh $(hide) cd $(KERNEL_SRC_TMP_PATH);$(DEVICE_PATCH_DIR)/patch_$(DEVICE_NAME).sh $(DEVICE_PATCH_DIR)
若有新增其它内核补丁文件,可继续配置在kernel/linux/patches/linux-6.6/hispark_ss928v100_patch路径下,同步修改shell脚本文件即可。
将OpenHarmony内核特性的源码软链接至out目录下的内核临时编译目录
OpenHarmony内核新增的特性源代码目录在kernel/linux/common_modules,需要在编译时软链接至临时内核编译目录下
UNIFIED_COLLECTION_PATCH_FILE := ${OHOS_BUILD_HOME}/kernel/linux/common_modules/ucollection/apply_ucollection.sh CODE_SIGN_PATCH_FILE := ${OHOS_BUILD_HOME}/kernel/linux/common_modules/code_sign/apply_code_sign.sh HIDEADDR_PATCH_FILE=${OHOS_BUILD_HOME}/kernel/linux/common_modules/memory_security/apply_hideaddr.sh NEWIP_PATCH_FILE=${OHOS_BUILD_HOME}/kernel/linux/common_modules/newip/apply_newip.sh TZDRIVER_PATCH_FILE=${OHOS_BUILD_HOME}/kernel/linux/common_modules/tzdriver/apply_tzdriver.sh XPM_PATCH_FILE=${OHOS_BUILD_HOME}/kernel/linux/common_modules/xpm/apply_xpm.sh CED_PATCH_FILE=${OHOS_BUILD_HOME}/kernel/linux/common_modules/container_escape_detection/apply_ced.sh QOS_AUTH_PATCH_FILE=${OHOS_BUILD_HOME}/kernel/linux/common_modules/qos_auth/apply_qos_auth.sh DEC_PATCH_FILE=${OHOS_BUILD_HOME}/kernel/linux/common_modules/dec/apply_dec.sh ... ifeq ($(UNIFIED_COLLECTION_PATCH_FILE), $(wildcard $(UNIFIED_COLLECTION_PATCH_FILE))) $(hide) $(UNIFIED_COLLECTION_PATCH_FILE) $(OHOS_BUILD_HOME) $(KERNEL_SRC_TMP_PATH) $(DEVICE_NAME) $(KERNEL_VERSION) endif ifeq ($(CODE_SIGN_PATCH_FILE), $(wildcard $(CODE_SIGN_PATCH_FILE))) $(hide) $(CODE_SIGN_PATCH_FILE) $(OHOS_BUILD_HOME) $(KERNEL_SRC_TMP_PATH) $(DEVICE_NAME) $(KERNEL_VERSION) endif ifeq ($(HIDEADDR_PATCH_FILE), $(wildcard $(HIDEADDR_PATCH_FILE))) $(hide) $(HIDEADDR_PATCH_FILE) $(OHOS_BUILD_HOME) $(KERNEL_SRC_TMP_PATH) $(DEVICE_NAME) $(KERNEL_VERSION) endif ifeq ($(NEWIP_PATCH_FILE), $(wildcard $(NEWIP_PATCH_FILE))) $(hide) bash $(NEWIP_PATCH_FILE) $(OHOS_BUILD_HOME) $(KERNEL_SRC_TMP_PATH) $(DEVICE_NAME) $(KERNEL_VERSION) endif ifeq ($(TZDRIVER_PATCH_FILE), $(wildcard $(TZDRIVER_PATCH_FILE))) $(hide) $(TZDRIVER_PATCH_FILE) $(OHOS_BUILD_HOME) $(KERNEL_SRC_TMP_PATH) $(DEVICE_NAME) $(KERNEL_VERSION) endif ifeq ($(XPM_PATCH_FILE), $(wildcard $(XPM_PATCH_FILE))) $(hide) $(XPM_PATCH_FILE) $(OHOS_BUILD_HOME) $(KERNEL_SRC_TMP_PATH) $(DEVICE_NAME) $(KERNEL_VERSION) endif ifeq ($(CED_PATCH_FILE), $(wildcard $(CED_PATCH_FILE))) $(hide) $(CED_PATCH_FILE) $(OHOS_BUILD_HOME) $(KERNEL_SRC_TMP_PATH) $(DEVICE_NAME) $(KERNEL_VERSION) endif ifeq ($(QOS_AUTH_PATCH_FILE), $(wildcard $(QOS_AUTH_PATCH_FILE))) $(hide) bash $(QOS_AUTH_PATCH_FILE) $(OHOS_BUILD_HOME) $(KERNEL_SRC_TMP_PATH) $(DEVICE_NAME) $(KERNEL_VERSION) endif ifeq ($(DEC_PATCH_FILE), $(wildcard $(DEC_PATCH_FILE))) $(hide) bash $(DEC_PATCH_FILE) $(OHOS_BUILD_HOME) $(KERNEL_SRC_TMP_PATH) $(DEVICE_NAME) $(KERNEL_VERSION) endif
编译子系统适配¶
原生默认arch = "arm",社区上暂不支持arm64的CPU架构。
修改 build\lite\config\BUILDCONFIG.gn使其支持支持64位
# Hisilicon modify for 64bit if (target_cpu == "arm64") { arch = "arm64" } else { arch = "arm" }
Lite设备上的language_cpp使用旧的-std=c++11,C++许多新特性和改进无法使用。
修改build/lite/config/BUILD.gn升级language_cpp至C++17
config("language_cpp") { cflags_cc = [ "-std=c++17" ] }
OpenHarmony系统在gn文件中对执行exec_script限制,但SS928V100集成时使用到了该模块,需要配置豁免、否则编译报错。
修改build/core/gn/ohos_exec_script_allowlist.gni将不符合社区规则的gn文件相对路径配置进去
ohos_exec_script_config = { exec_script_allowlist = [ ... "//device/soc/hisilicon/common/hal/media/BUILD.gn", ] }
全量编译跳过SDK子系统。
全量ohos编译会编译ohos-sdk,本系统暂不依赖SDK子系统、为了提升编译效率,因此配置跳过;若对SDK有依赖的话,可以不增加--no-prebuilt-sdk参数。
./build.sh --product-name=ipcamera_hispark_ss927v100_linux --ccache --no-prebuilt-sdk全量编译跳过init_ohpm下载。
全量ohos编译会执行init_ohpm,本系统暂不依赖ohpm下载、为了提升编译效率,因此配置跳过;若有依赖可不适配此章节。
修改build/build_scripts/build.sh文件,忽略init_ohpm函数执行
if [[ "$*" != *ohos-sdk* ]]; then if [[ "$*" != *ipcamera_hispark* ]]; then echo "[OHOS INFO] Ohpm initialization started..." init_ohpm if [[ "$?" -ne 0 ]]; then echo -e "\033[31m[OHOS ERROR] ohpm initialization failed!\033[0m" exit 1 fi echo -e "\033[32m[OHOS INFO] ohpm initialization successful!\033[0m" fi fi echo -e "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"
启动子系统适配¶
为解决单板软重启(即命令行输入reboot)失效问题,需要修改base/startup/init/services/init/lite/init_signal_handler.c。
在SIGTERM的流程中,增加RebootSystem();
static void SigHandler(int sig)
{
switch (sig) {
case SIGCHLD: {
...
case SIGTERM: {
StopAllServices(0, NULL, 0, NULL);
RebootSystem();
break;
}
default:
break;
}
}
HUKS子系统适配¶
为了HUKS部件能正常使用SS928V100硬件密钥的加解密能力,需要对安全组件进行特性增强。采取在drivers/peripheral/huks定义南向接口、对HUkS组件宏隔离兼容性适配,芯片增强特性API接口实现在device/soc/hisilicon/common/hal/huks的方案。
bundle.json和build/config.gni定义参数变量huks_enable_hisilicon_cipher_in_small来取消历史的芯片开发板的宏隔离,由vendor下的config.json传值控制
对开源huks组件增强硬件加解密特性部分,新增通用HKS_CIPHER_ROOT_KEY隔离
提取对原生huks增强的函数,在drivers/peripheral/huks/interfaces/include/huks_hdi_cipher.h中定义,并由device/soc/hisilicon/common/hal/huks实现
说明:
本文仅支持SS928V100和SS927V100对HUKS组件的硬件密钥增强,其它芯片若要支持需结合具体SDK的API实现,在device/soc/hisilicon/common/hal/huks目录下增加改芯片适配实现即可。
若不想使用芯片的硬件增强特性,则可在在ohos/vendor/hisilicon/hispark_ss928v100_linux/config.json设置参数huks_enable_hisilicon_cipher_in_small取值为false。
third_party适配¶
third_party_openssl适配¶
由于SS928V100为arm64架构,不同于社区上L1的Hi3516DV300的arm32,在适配编译时遇到异常报错../../../third_party/openssl/crypto/modes/ctr128.c:166:13: warning: call to undeclared function 'asm'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
图 1 openssl编译报错

使用 __asm__ 语法,是GCC的标准化扩展语法,适用于更广泛的编译器环境,而使用 asm 语法,是更旧的GCC语法,某些较新的编译器中可能已弃用。
提供适配方案,修改文件third_party/openssl/include/crypto/modes.h增加defined(__clang__) || (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8))隔离用以适配新的 __asm__ 语法
# if defined(__clang__) || (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8))
# define BSWAP8(x) ({ u64 ret_; \
__asm__ ("rev %0,%1" \
: "=r"(ret_) : "r"(x)); ret_; })
# define BSWAP4(x) ({ u32 ret_; \
__asm__ ("rev %w0,%w1" \
: "=r"(ret_) : "r"(x)); ret_; })
# else
# define BSWAP8(x) ({ u64 ret_; \
asm ("rev %0,%1" \
: "=r"(ret_) : "r"(x)); ret_; })
# define BSWAP4(x) ({ u32 ret_; \
asm ("rev %w0,%w1" \
: "=r"(ret_) : "r"(x)); ret_; })
# endif
XTS适配¶
OpenHarmony子系统适配只需要在vendor/hisilicon/hispark_ss928v100_linux/config.json中增加对应子系统和部件,这样编译系统会将该部件纳入编译目标中。
本章节主要介绍SS928V100适配L1(不带屏)设备满足XTS认证的依赖的子系统集,如下仅提供参考。
xts_acts适配¶
带屏设备上ActsAbilityMgrTest:testDisConnectAbility用例执行失败
执行带屏acts套件的用例时,test/xts/acts/ability_lite/ability_posix/src/AbilityMgrTest.cpp的testDisConnectAbility执行失败。此用例是因为了验证DisConnectAbility接口,而下述代码g_errorcode==16为异常保护,会导致用例无法有效执行;但是DisConnectAbility和ConnectAbility要成对出现,会导致用例失败。
图 1 testDisConnectAbility用例代码

打印此处的g_errorcode输出为-1也不符合异常保护的逻辑,此处为社区acts套件用例问题。后续会向社区反馈修复。
采取删除该g_errorcode==16异常保护的逻辑处理,让其能正常进入执行DisconnectAbility
HWTEST_F(AbilityMgrTest, testDisConnectAbility, Function | MediumTest | Level1) { printf("------start testDisConnectAbility------\n"); Want want = { nullptr }; ElementName element = { nullptr }; SetElementBundleName(&element, "com.openharmony.testnative"); SetElementAbilityName(&element, "ServiceAbility"); SetWantElement(&want, element); sem_init(&g_sem, 0, 0); int result = ConnectAbility(&want, &g_conn, this); struct timespec ts = {}; clock_gettime(CLOCK_REALTIME, &ts); ts.tv_sec += WAIT_TIMEOUT; sem_timedwait(&g_sem, &ts); printf("sem exit \n"); printf("ret of connect is %d \n ", result); result = DisconnectAbility(&g_conn); usleep(900000); EXPECT_EQ(result, 0); printf("ret of disconnect is %d \n ", result); ClearElement(&element); ClearWant(&want); printf("------end testDisConnectAbility------\n"); }
ActsSamgrTest:testIPCClient0130执行失败
图 2 testIPCClient0130用例源码增加维测日志

图 3 testIPCClient0130用例失败分析

由上述svcIdentity.handle和svcIdentity.token打印日志看出,输出均为0xffffffff,但断言结果缺大相径庭;查看2个变量定义结构体得出:svcIdentity.token类型为uintptr_t,依赖arch的位数、而社区上是arm,若是arm64则会出现问题,应是扩展为0x00000000ffffffff,导致比较失败。从上述sizeof(svcIdentity.token)=8可以确定了
修改test/xts/acts/distributed_schedule_lite/system_ability_manager_posix/src/LiteIPCClientTest.cpp将svcIdentity.token断言修改成变量默认初始值INVALID_INDEX
HWTEST_F(LiteIPCClientTest, testIPCClient0130, Function | MediumTest | Level2) { SvcIdentity svcIdentity = SAMGR_GetRemoteIdentity("noExistService", "noExistFeature"); ASSERT_EQ(svcIdentity.handle == 0xffffffff, TRUE); // token type is uintptr_t ASSERT_EQ(svcIdentity.token == INVALID_INDEX, TRUE); };
xts_tools适配¶
用户若能正常配置xdevice测试环境可跳过此章节。
xts_tools将xdevice源码编译的工具打包成xdevice-0.0.0-py*.*.egg和xdevice_ohos-0.0.0-py.*.*.egg。当执行acts/run.bat脚本时,会从https://pypi.org/simple/xdevice/下载软件,经常会配置xdevice环境失败。
图 1 xts_tools打包生成egg文件代码

修改test/xts/tools/lite/build/suite.py文件,将xdevice打包改成tar.gz
command = [utils.get_python_cmd(), "setup.py", "sdist"]
说明: 此问题社区主干已修复,自OH6.0Release之后版本无需单独修改,修复PR如下: https://gitcode.com/openharmony/xts_tools/commit/5422d05f1d068cb75f4b0098bf36bdf179c849e3?ref=master
XTS认证适配¶
无屏的XTS认证适配¶
添加依赖的OpenHarmony子系统集
"subsystems": [ { "subsystem": "systemabilitymgr", "components": [ { "component": "samgr_lite", "features":[] }, { "component": "safwk_lite", "features":[] } ] }, { "subsystem": "hiviewdfx", "components": [ { "component": "hilog_lite", "features":[] }, { "component": "faultloggerd", "features":[] } ] }, { "subsystem": "security", "components": [ { "component": "permission_lite", "features":[] }, { "component": "appverify", "features":[] }, { "component": "device_auth", "features":[] }, { "component": "huks", "features": [ "huks_config_file = \"hks_config_small.h\"", "huks_uid_trust_list_define = \"{}\"" ] } ] }, { "subsystem": "startup", "components": [ { "component": "bootstrap_lite", "features":[] }, { "component": "init", "features":["init_feature_begetctl_liteos=true"] }, { "component": "appspawn", "features":[] } ] }, { "subsystem": "kernel", "components": [ { "component": "linux", "features":[] } ] }, { "subsystem": "hdf", "components": [ { "component": "hdf_core", "features":[ "hdf_core_platform_test_support = true" ] } ] }, { "subsystem": "bundlemanager", "components": [ { "component": "bundle_framework_lite", "features":[] } ] }, { "subsystem": "developtools", "components": [ { "component": "syscap_codec", "features":[] } ] }, { "subsystem": "xts", "components": [ { "component": "acts", "features":[] }, { "component": "tools", "features":[] }, { "component": "device_attest_lite", "features":[] } ] }, { "subsystem": "communication", "components": [ { "component": "dhcp", "features":[] } ] } ],
修改vendor/hisilicon/hispark_ss928v100_linux/init_configs/init_linux_openharmony.cfg新增启动服务。
"start ueventd", "start shell", "start apphilogcat", "start foundation", "start bundle_daemon", "start faultloggerd", "start devattest_service", "start huks_server"
修改test/xts/acts/build_lite/BUILD.gn文件,注释ActsBundleMgrTest和ActsAbilityMgrTest,这2个TestCase为带屏设备需要,无屏设备不需要测试。
} else if (ohos_kernel_type == "linux") { all_features += [ "//test/xts/acts/distributeddatamgr_lite/kv_store_posix:ActsKvStoreTest", "//test/xts/acts/startup_lite/syspara_posix:ActsParameterTest", "//test/xts/acts/startup_lite/bootstrap_posix:ActsBootstrapTest", "//test/xts/acts/communication_lite/lwip_posix:ActsLwipTest", "//test/xts/acts/security_lite:securitytest", #"//test/xts/acts/multimedia_lite/camera_lite_posix/camera_native:ActsMediaCameraTest", #"//test/xts/acts/multimedia_lite/media_lite_posix/player_native:ActsMediaPlayerTest", #"//test/xts/acts/multimedia_lite/media_lite_posix/recorder_native:ActsMediaRecorderTest", "//test/xts/acts/distributed_schedule_lite/system_ability_manager_posix:ActsSamgrTest", #"//test/xts/acts/appexecfwk_lite/appexecfwk_posix:ActsBundleMgrTest", #"//test/xts/acts/ability_lite/ability_posix:ActsAbilityMgrTest", "//test/xts/acts/ai_lite/ai_engine_posix/base:ActsAiEngineTest", "//test/xts/acts/xts_lite/device_attest_lite/device_attestStart_posix:ActsDeviceAttestStartTest", "//test/xts/acts/xts_lite/device_attest_lite/device_attestQuerry_posix:ActsDeviceAttestQuerryTest", ] }
带屏的XTS认证适配¶
config.json中添加依赖子系统
在vendor/hisilicon/hispark_ss928v100_linux/config.json中增加ability子系统,为带屏测试套件编译所需。
{ "subsystem": "ability", "components": [ { "component": "ability_lite", "features":[ "ability_lite_enable_ohos_appexecfwk_feature_ability = true" ] }, { "component": "dmsfwk_lite", "features":[] } ] },
修改test/xts/acts/build_lite/BUILD.gn文件,放开ActsBundleMgrTest和ActsAbilityMgrTest参与acts套件编译,ActsBundleMgrTest和ActsAbilityMgrTest为带屏设备需要。
} else if (ohos_kernel_type == "linux") { all_features += [ "//test/xts/acts/distributeddatamgr_lite/kv_store_posix:ActsKvStoreTest", "//test/xts/acts/startup_lite/syspara_posix:ActsParameterTest", "//test/xts/acts/startup_lite/bootstrap_posix:ActsBootstrapTest", "//test/xts/acts/communication_lite/lwip_posix:ActsLwipTest", "//test/xts/acts/security_lite:securitytest", #"//test/xts/acts/multimedia_lite/camera_lite_posix/camera_native:ActsMediaCameraTest", #"//test/xts/acts/multimedia_lite/media_lite_posix/player_native:ActsMediaPlayerTest", #"//test/xts/acts/multimedia_lite/media_lite_posix/recorder_native:ActsMediaRecorderTest", "//test/xts/acts/distributed_schedule_lite/system_ability_manager_posix:ActsSamgrTest", "//test/xts/acts/appexecfwk_lite/appexecfwk_posix:ActsBundleMgrTest", "//test/xts/acts/ability_lite/ability_posix:ActsAbilityMgrTest", "//test/xts/acts/ai_lite/ai_engine_posix/base:ActsAiEngineTest", "//test/xts/acts/xts_lite/device_attest_lite/device_attestStart_posix:ActsDeviceAttestStartTest", "//test/xts/acts/xts_lite/device_attest_lite/device_attestQuerry_posix:ActsDeviceAttestQuerryTest", ] }
添加系统启动服务配置
修改vendor/hisilicon/hispark_ss928v100_linux/init_configs/init_linux_openharmony.cfg新增启动服务,"start appspawn"为新增修改。
"start ueventd", "start shell", "start apphilogcat", "start foundation", "start bundle_daemon", "start appspawn", "start faultloggerd", "start devattest_service", "start huks_server"
若遇到执行ActsAbilityMgrTest模块卡死情况,则需要适配security_appverify组件,解决hap校验问题即可。
XTS测试说明¶
XTS测试过程中,若出现卡死或单个testcase执行失败场景时,可以在板端执行单个testcase调试命令,定位具体用例失败原因。
以ActsAbilityMgrTest为例说明。重新NFS挂载好单板后,在板端执行观察用例执行情况。
./ActsAbilityMgrTest.bin --gtest_output=xml:/storage/test_root/aafwk/reportsn --gtest_output=xml:/storage/test_root/aafwk/reportsSS928V100单板执行XTS测试出现ActsHuksLiteFunctionTest出现一些用例failed时
图 1 HksCipherTest003用例failed日志

SS928V100、SS927V100 硬件单板量产阶段需一次性烧写 KEY0,不可重复烧写。若KEY0未烧写,硬件会拦截密钥派生操作,无法正常使用硬件密钥完成加解密操作。
SS928V100硬件单板烧写KEY0步骤如下。
进入 U-Boot 命令行,依次执行如下命令
mw 0x10122008 0x6 # 以下四行为设置需要烧写的 key, # 以 key=128'h00010203_04050607_08090a0b_0c0d0e0f 为例 mw 0x1012200C 0x0c0d0e0f mw 0x10122010 0x08090a0b mw 0x10122014 0x04050607 mw 0x10122018 0x00010203 mw 0x10123000 0x2 mw 0x10122004 0x1acce551
警告:
上述烧写命令中 key 的烧写只是一个参数,实际烧写请使用随机数,不可使用示例中的 key。对单板上下电重启,烧写的key0生效(reboot软重启无法生效,需上下电才能生效),再跑XTS用例可看出XTS认证的huks用例都PASS。
图形¶
OpenHarmony增加图形子系统,需要在vendor/hisilicon/hispark_ss928v100_linux/config.json中增加对应子系统和部件,同时在device/soc/hisilicon目录中是芯片相关的适配,其中图形的适配代码存在于device/soc/hisilicon/common/hal/display中。
config.json中新增图形子系统依赖的部件¶
在vendor/hisilicon/hispark_ss928v100_linux/config.json文件,"subsystems"标签中添加如下代码:
{
"subsystem": "arkui",
"components": [
{ "component": "ui_lite", "features":[ "ui_lite_enable_graphic_font_config = true" ] }
]
},
{
"subsystem": "graphic",
"components": [
{ "component": "graphic_utils_lite", "features":[] },
{ "component": "surface_lite", "features":[] }
]
},
{
"subsystem": "window",
"components": [
{ "component": "window_manager_lite", "features":[] }
]
}
device/soc/hisilicon下新增SS928V100图形相关驱动代码¶
在device/soc/hisilicon/common/hal/display下新增SS928V100目录,用于放置SS928V100图形驱动相关代码。图形驱动HDI接口的整体介绍可以参考drivers/peripheral/display/README_zh.md文档中的描述。
**注意:**相比于Hi3516DV300芯片适配,SS928V100的sdk经过用户态整改后,需要在用户态先执行sdk各模块的init操作,再调用sdk接口。如果只启动图形功能,需要在InitDisplay里调用SdkInit完成几个模块的初始化接口调用:
static void SdkInit()
{
td_s32 ret;
ret = osal_init();
if (ret != 0) {
HDF_LOGE("%s: osal_init error:%d", __func__, ret);
}
ret = ot_base_mod_init();
if (ret != 0) {
HDF_LOGE("%s: BaseModInit error:%d", __func__, ret);
}
ret = ot_sys_mod_init();
if (ret != 0) {
HDF_LOGE("%s: SysModInit error:%d", __func__, ret);
}
ret = ot_rgn_mod_init();
if (ret != 0) {
HDF_LOGE("%s: ot_rgn_mod_init error:%d", __func__, ret);
}
ret = ot_vo_mod_init();
if (ret != 0) {
HDF_LOGE("%s: VoModInit error:%d", __func__, ret);
}
}
同时,需要在DeinitDisplay函数里调用SdkExit完成去初始化:
static void SdkExit()
{
ot_vo_mod_exit();
ot_rgn_mod_exit();
ot_sys_mod_exit();
ot_base_mod_exit();
osal_exit();
}
device/soc/hisilicon下SS928V100驱动代码编译适配¶
在device/soc/hisilicon/common/hal/display/BUILD.GN里增加SS928V100的编译命令:
if (board_name == "hispark_ss928v100" || board_name == "hispark_ss927v100") {
shared_library("display_layer") {
output_name = "display_layer"
sources = [
"//drivers/peripheral/display/hal/disp_hal.c",
"ss928/src/display_layer.c",
"ss928/src/display_overlay_layer.c",
"ss928/src/vpss_resmng.c",
"ss928/src/hdmi.c",
"ss928/src/vo_parameter_calc.c",
"ss928/src/bt1120.c"
]
include_dirs = [
"./ss928/include",
"./ss928/include/adapt",
"//drivers/peripheral/base",
"//drivers/peripheral/display/hal",
"//drivers/peripheral/display/interfaces/include",
"//base/hiviewdfx/hilog_lite/interfaces/native/innerkits",
]
deps = [
"//third_party/bounds_checking_function:libsec_shared",
"//drivers/hdf_core/adapter/uhdf2/utils:libhdf_utils"
]
defines = ["__USER__"]
cflags = [
"-Wall",
"-Wextra",
"-Werror",
"-fsigned-char",
"-fno-common",
"-fno-strict-aliasing",
"-Wno-format",
"-Wno-format-extra-args",
"-Wno-error=implicit-function-declaration",
]
if (ohos_kernel_type == "linux") {
include_dirs += [
"//device/soc/hisilicon/ss928v100/sdk_linux/smp/a55_linux/mpp/out/include"
]
deps += ["//device/soc/hisilicon/ss928v100/sdk_linux:hispark_ss928v100_sdk"]
}
defines += [ "ENABLE_H8" ]
defines += [ "DISENABLE_DISP" ]
defines += [ "__HDMI_SUPPORT__" ]
ldflags = [
"-lss_mpi",
"-lss_voice_engine",
"-lss_hdmi",
"-lot_osal",
"-lot_base",
"-lot_sys",
"-lot_vo",
"-lot_rgn",
"-lot_irq",
]
defines += [ "VPSS_GRP_START_ID=100" ]
ldflags += [
"-lss_dnvqe",
"-lss_upvqe"
]
}
shared_library("display_gfx") {
output_name = "display_gfx"
sources = [ "ss928/src/display_gfx.c" ]
include_dirs = [
"./ss928/include",
"./ss928/include/adapt",
"//drivers/peripheral/base",
"//drivers/peripheral/display/hal",
"//drivers/peripheral/display/interfaces/include",
"//base/hiviewdfx/hilog_lite/interfaces/native/innerkits",
]
defines = [ "__USER__" ]
deps = [
"//third_party/bounds_checking_function:libsec_shared",
"//drivers/hdf_core/adapter/uhdf2/utils:libhdf_utils"
]
cflags = [
"-Wall",
"-Wextra",
"-Werror",
"-fsigned-char",
"-fno-common",
"-fno-strict-aliasing",
"-Wno-format",
"-Wno-format-extra-args",
]
include_dirs += [
"//device/soc/hisilicon/ss928v100/sdk_linux/smp/a55_linux/mpp/out/include"
]
deps += ["//device/soc/hisilicon/ss928v100/sdk_linux:hispark_ss928v100_sdk"]
defines += [ "ENABLE_H8" ]
ldflags = [ "-lss_tde" ]
}
shared_library("display_gralloc") {
output_name = "display_gralloc"
sources = [ "ss928/src/display_gralloc.c" ]
include_dirs = [
"./ss928/include",
"./ss928/include/adapt",
"//drivers/peripheral/base",
"//drivers/peripheral/display/hal",
"//drivers/peripheral/display/interfaces/include",
"//base/hiviewdfx/hilog_lite/interfaces/native/innerkits",
]
defines = [ "__USER__" ]
deps = [
"//third_party/bounds_checking_function:libsec_shared",
"//drivers/hdf_core/adapter/uhdf2/utils:libhdf_utils"
]
cflags = [
"-Wall",
"-Wextra",
"-Werror",
"-fsigned-char",
"-fno-common",
"-fno-strict-aliasing",
"-Wno-format",
"-Wno-format-extra-args",
]
include_dirs += [
"//device/soc/hisilicon/ss928v100/sdk_linux/smp/a55_linux/mpp/out/include"
]
deps += ["//device/soc/hisilicon/ss928v100/sdk_linux:hispark_ss928v100_sdk"]
defines += [ "ENABLE_H8" ]
ldflags = [
"-lss_mpi",
"-lss_voice_engine",
]
ldflags += [
"-lss_dnvqe",
"-lss_upvqe"
]
}
lite_component("hdi_display") {
features = [
":display_layer",
":display_gfx",
":display_gralloc"
]
}
}
图形服务开机自启动适配¶
在vendor/hisilicon/hispark_ss928v100_linux/init_configs/init_linux_openharmony.cfg中增加图形子系统的启动命令,并修改图形服务的启动权限,可以在单板商店后自动启动图形服务。
在"cmds"中增加如下行:
"start wms_server",
由于SDK用户态整改,图形子系统调用sdk部分接口打开/dev下设备时需要增加权限,在“services”中找到name为wms_server的项,修改caps如下:
{
"name" : "wms_server",
"path" : ["/bin/wms_server"],
"uid" : 10,
"gid" : 10,
"once" : 1,
"importance" : 0,
"caps" : [1, 17, 21, 23]
}
媒体¶
OpenHarmony增加媒体子系统,需要在vendor/hisilicon/hispark_ss928v100_linux/config.json中增加对应子系统和部件,同时在device/soc/hisilicon目录中是芯片相关的适配,其中图形的适配代码存在于device/soc/hisilicon/common/hal/media中。
config.json中新增媒体子系统依赖的部件¶
在vendor/hisilicon/hispark_ss928v100_linux/config.json文件,"subsystems"标签中添加如下代码:
{
"subsystem": "multimedia",
"components": [
{ "component": "camera_lite", "features":[] },
{ "component": "media_lite", "features":[] },
{ "component": "audio_lite", "features":[] },
{ "component": "camera_service", "features":[] }
]
},
device/soc/hisilicon下适配SS928V100媒体代码¶
在device/soc/hisilicon/common/hal/media下新增SS928V100目录,用于放置SS928V100媒体相关适配代码。
**注意:**相比于Hi3516DV300芯片适配,SS928V100的sdk经过用户态整改后,需要在用户态先执行sdk各模块的init操作,再调用sdk接口。启动媒体功能,需要在HalCameraInit里调用SDK_init完成几个模块的初始化接口调用,并对应地在HalCameraDeinit调用SDK_exit完成去初始化,如下图所示。

在对应的device/soc/hisilicon/common/hal/media/camera/source/BUILD.gn文件中新增对sdk发布的部分so的依赖:
ldflags += [ "-lot_osal" ]
ldflags += [ "-lot_irq" ]
ldflags += [ "-lss_isp" ]
ldflags += [ "-lot_mpi_isp" ]
ldflags += [ "-lot_isp" ]
ldflags += [ "-lot_base" ]
ldflags += [ "-lss_crb" ]
ldflags += [ "-lss_ir_auto" ]
ldflags += [ "-lss_awb" ]
ldflags += [ "-lss_ive" ]
ldflags += [ "-lss_dnvqe" ]
ldflags += [ "-lss_drc" ]
ldflags += [ "-lss_ldci" ]
ldflags += [ "-lss_upvqe" ]
ldflags += [ "-lss_dehaze" ]
ldflags += [ "-lss_voice_engine" ]
ldflags += [ "-lss_ae" ]
ldflags += [ "-lss_bnr" ]
ldflags += [ "-lss_acs" ]
ldflags += [ "-lss_extend_stats" ]
ldflags += [ "-lss_calcflicker" ]
ldflags += [ "-lss_hdmi" ]
ldflags += [ "-lot_sys" ]
ldflags += [ "-lot_chnl" ]
ldflags += [ "-lot_rgn" ]
ldflags += [ "-lot_dis" ]
ldflags += [ "-lot_vpp" ]
ldflags += [ "-lot_vi" ]
ldflags += [ "-lot_vpss" ]
ldflags += [ "-lot_vo" ]
ldflags += [ "-lot_vedu" ]
ldflags += [ "-lot_rc" ]
ldflags += [ "-lot_venc" ]
ldflags += [ "-lot_h264e" ]
ldflags += [ "-lot_h265e" ]
ldflags += [ "-lot_jpege" ]
ldflags += [ "-lot_jpegd" ]
ldflags += [ "-lot_vfmw" ]
ldflags += [ "-lot_vdec" ]
ldflags += [ "-lot_aio" ]
ldflags += [ "-lot_ai" ]
ldflags += [ "-lot_ao" ]
ldflags += [ "-lot_aenc" ]
ldflags += [ "-lot_adec" ]
ldflags += [ "-lot_acodec" ]
middleware相关适配
在device/soc/hisilicon/common/hal/middleware/BUILD.gn中,新增分支处理SS928V100适配,如下图。

foundation/multimedia/media_lite/services下新增sensor相关ini配置¶
在foundation/multimedia/media_lite/services下新增cameradev_hy_s0603_928.ini,并在对应的foundation/multimedia/media_lite/services/BUILD.gn文件中新增SS928V100的ini拷贝动作,如下图。

媒体服务开机自启动适配¶
在vendor/hisilicon/hispark_ss928v100_linux/init_configs/init_linux_openharmony.cfg中增加媒体子系统的启动命令,在"cmds"中增加如下行。
"start media_server",




