前言¶
概述
本文档详细的描述了如何将SS928V100 SDK的内核补丁和OpenHarmony内核源码进行合并的操作指导,来生成同时具有SS928V100 SDK内核相关特性和OpenHarmony内核相关特性的内核源码。
读者对象
本文档主要适用于视觉芯片OpenHarmony Small系统升级的操作人员。操作人员必须具备以下经验和技能:
熟悉OpenHarmony源码编译构建。
熟悉视觉类芯片SDK版本。
符号约定
在本文中可能出现下列标志,它们所代表的含义如下。
符号 |
说明 |
|---|---|
|
表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。 |
|
表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。 |
|
表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。 |
|
用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。 “须知”不涉及人身伤害。 |
|
对正文中重点信息的补充说明。 “说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。 |
修订记录
修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。
文档版本 |
发布日期 |
修改说明 |
|---|---|---|
00B01 |
2025-09-15 |
第1次临时版本发布。 |
概述¶
本文档介绍了如何适配SS928V100 SDK的内核补丁到OpenHarmony内核源码中,来生成同时具有SS928V100 SDK内核相关特性和OpenHarmony内核相关特性的内核源码。SS928V100 SDK的linux-6.6内核源码是基于linux开源内核代码(版本号为linux-6.6.86)打上SDK内核补丁后得到的。OpenHarmony(下面简称OH)的linux-6.6内核源码也是基于linux开源内核代码(版本号为linux-6.6.86)打上OpenHarmony系统特性相关内核补丁后得到的。基于同一linux-6.686内核版本下,适配SS928V100 SDK内核补丁到OpenHarmony内核源码的过程即是将两者的内核补丁进行合并的过程。首先会基于SDK内核源码与OH内核源码的差异制作成SDK的内核补丁文件,称为oh_ss928.patch。接着,将OH内核独立的特性解耦成一份OH内核补丁文件,称为oh_feature.patch。最终编译过程中依次打入SDK的内核补丁和OH内核补丁生成内核源码。
制作SDK特性patch¶
基于SDK内核源码与OH内核源码的差异制作成SDK的内核补丁文件,称为oh_ss928.patch。具体步骤如下:
使用开源Linux-6.6.86源码和SDK软件包提供的内核patch还原SDK内核源码。
从HiSpark社区的platform/ss928v100_clang/open_source/linux目录下获取补丁文件linux-6.6.86.patch,从该目录的readme.txt中获取linux-6.6.86源码下载路径并下载源码压缩包linux-6.6.86.tar.gz,使用如下命令还原出linux-6.6.86源码。
tar -zxvf linux-6.6.86.tar.gz cd linux-6.6.86 patch -p1 < ../linux-6.6.86.patch
使用git比较OH与SDK内核源码得到差异patch文件。新建如下make_linux_path.sh脚本文件。
#!/bin/bash make_sdk_patch() { # 入参1为:OH内核源码绝对目录,如OpenHarmony-v5.1.0-Release/OpenHarmony/kernel/linux/linux-6.6 # 入参2为:SDK内核源码绝对目录,如sdk/platform/ss928v100_clang/open_source/linux/linux-6.6.86 local oh_kernel_dir=$1 local sdk_kernel_dir=$2 local patch_file="oh_ss928.patch" local current_dir=$(pwd) local temp_dir=$(mktemp -d) cp -rf $oh_kernel_dir "$temp_dir"/A cd "$temp_dir"/A || exit rm -rf .git # 初始化git仓库并提交 git init > /dev/null git add --all git commit -m "Initial commit (A)" > /dev/null rm -rf * # 复制目录B到临时目录 cp -rf $sdk_kernel_dir/* ./ git add --all git commit -m "Update to B" > /dev/null # 生成补丁文件 git diff HEAD^ HEAD > $current_dir/$patch_file # 返回补丁文件路径 echo "Patch file generated: $current_dir/$patch_file" # 清理临时目录,若脚本清理不掉可手动命令清理 cd .. rm -rf "$temp_dir" } make_sdk_patch $1 $2
授予make_linux_path.sh脚本执行权限。
chmod +x make_linux_path.sh执行下述命令即可生成oh_ss928.patch。
./make_linux_path.sh /path/to/OpenHarmony-v5.1.0-Release/OpenHarmony/kernel/linux/linux-6.6 /path/to/sdk/platform/ss928v100_clang/open_source/linux/linux-6.6.86
说明:上述/path/to/OpenHarmony-v5.1.0-Release/OpenHarmony/kernel/linux/linux-6.6和/path/to/sdk/platform/ss928v100_clang/open_source/linux/linux-6.6.86为举例,实际应用请传正确的路径。
要求传入OH内核源码的目录和SDK内核源码的目录绝对路径。
图 1 ./make_linux_path.sh执行成功截图

生成的oh_ss928.patch在当前目录下。
制作OH特性patch¶
内核适配中需要的OH系统相关内核特性包括如下几个目录及相关文件。
drivers/staging/hilog
drivers/staging/hievent
drivers/staging/hisysevent
drivers/staging/blackbox
具体方法可参考如下步骤解耦出OH特性patch:
使用脚本拷贝出部分目录文件。
新增make_oh_feature_patch.sh脚本文件。
#!/bin/bash make_oh_feature_patch() { # 入参1为:OH内核源码目录,如OpenHarmony-v5.1.0-Release/OpenHarmony/kernel/linux/linux-6.6,使用绝对路径 # 入参2为:第2章中制作出的SDK内核补丁文件oh_ss928.patch的绝对路径 local oh_kernel_dir=$1 local sdk_patch_file=$2 local current_dir=$(pwd) if [ -d "$current_dir/A" ]; then echo "当前目录下存在目录A,请先删除或重命名" exit 0 fi cp -rf $oh_kernel_dir $current_dir/A cd A || exit patch -p1 < $sdk_patch_file rm -rf .git git init > /dev/null git add --all git commit -m "Initial commit (A)" > /dev/null mkdir -p drivers/staging/blackbox mkdir -p drivers/staging/hievent mkdir -p drivers/staging/hilog mkdir -p drivers/staging/hisysevent mkdir -p include/dfx cp $oh_kernel_dir/drivers/staging/blackbox/* drivers/staging/blackbox/ cp $oh_kernel_dir/drivers/staging/hievent/* drivers/staging/hievent/ cp $oh_kernel_dir/drivers/staging/hilog/* drivers/staging/hilog/ cp $oh_kernel_dir/drivers/staging/hisysevent/* drivers/staging/hisysevent/ cp $oh_kernel_dir/include/dfx/hiview_hisysevent.h include/dfx/ cp $oh_kernel_dir/include/linux/blackbox.h include/linux/ cp $oh_kernel_dir/include/linux/blackbox_*.h include/linux/ git add drivers/staging/blackbox/* git add drivers/staging/hievent/* git add drivers/staging/hilog/* git add drivers/staging/hisysevent/* git add include/dfx/* git add include/linux/blackbox.h git add include/linux/blackbox_*.h } make_oh_feature_patch $1 $2
授予make_oh_feature_patch.sh执行权限。
chmod +x make_oh_feature_patch.sh执行下述命令。
./make_oh_feature_patch.sh /path/to/OpenHarmony-v5.1.0-Release/OpenHarmony/kernel/linux/linux-6.6 /path/to/oh_ss928.patch
说明:上述/path/to/OpenHarmony-v5.1.0-Release/OpenHarmony/kernel/linux/linux-6.6和/path/to/oh_ss928.patch为举例,实际应用请传正确的路。
要求传入OH内核源码的目录和SDK patch文件的绝对路径。执行完会将OH内核源码复制到在当前目录下的目录A,因此执行前要保证执行目录下没有目录名称为A的目录 。
图 1 执行make_oh_feature_patch.sh执行成功后截图

修改如下三个文件,添加修改中的加粗部分。
A/drivers/staging/Kconfig
... source "drivers/staging/vme_user/Kconfig" source "drivers/staging/hilog/Kconfig" source "drivers/staging/hievent/Kconfig" source "drivers/staging/hisysevent/Kconfig" source "drivers/staging/blackbox/Kconfig" endif # STAGING ...
A/drivers/staging/Makefile
... obj-$(CONFIG_XIL_AXIS_FIFO) += axis-fifo/ obj-$(CONFIG_FIELDBUS_DEV) += fieldbus/ obj-$(CONFIG_QLGE) += qlge/ obj-$(CONFIG_HILOG) += hilog/ obj-$(CONFIG_HIEVENT) += hievent/ obj-$(CONFIG_HISYSEVENT) += hisysevent/ obj-$(CONFIG_BLACKBOX) += blackbox/ ...
A/scripts/Makefile.lib
... ld_flags = $(KBUILD_LDFLAGS) $(ldflags-y) $(LDFLAGS_$(@F)) DTC_INCLUDE := $(srctree)/scripts/dtc/include-prefixes DTC_INCLUDE += $(srctree)/include dtc_cpp_flags = -Wp,-MMD,$(depfile).pre.tmp -nostdinc \ $(addprefix -I,$(DTC_INCLUDE)) ...
修改完后在目录A下使用git add添加修改过的文件。
git add drivers/staging/Kconfig git add drivers/staging/Makefile git add scripts/Makefile.lib
在目录A下使用git比较两次提交的差异制作出oh_feature.patch
git commit -m "Update to B" git diff HEAD^ HEAD > ../oh_feature.patch
生成的oh_feature.patch在A目录的父目录下
内核编译¶
OH系统内核编译脚本在OpenHarmony/kernel/linux/build目录下, 编译前中会依次打入三个patch文件到内核源码: hdf.patch, oh_ss928.patch, oh_feature.patch。hdf.patch是OH代码中单独存放的hdf驱动相关的补丁,oh_ss928.patch就是第2章中制作的patch它主要包含了sdk的补丁,oh_feature.patch就是第3章中制作的patch它主要包含了OH系统特性的补丁。
生成内核编译配置¶
通过如下步骤生成OH内核编译配置文件:
复制SS928V100 SDK提供的默认内核编译配置文件/path/to/sdk/open_source/linux/linux-6.6.86/arch/arm64/configs/ss928v100_emmc_defconfig到ohos的目录下ohos/kernel/linux/config/linux-6.6/arch/arm64/configs/hispark_ss928v100_small_defconfig。
说明:
ss928v100_emmc_defconfig为emmc存储介质的配置,ss928v100_nand_defconfig为spi nand存储介质的配置。在配置文件hispark_ss928v100_small_defconfig中添加如下的OH特性的内核选项配置,然后保存文件。
CONFIG_STAGING=y CONFIG_HILOG=y CONFIG_HILOG_BUFFER_SIZE=4096 CONFIG_HIEVENT=y CONFIG_BBOX_BUFFER_SIZE=2048 CONFIG_ANDROID_BINDER_IPC=y CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
编译内核¶
在ohos目录下SS928V100单独编译内核的命令如下。
./build.sh --product-name=ipcamera_hispark_ss928v100_linux --ccache --no-prebuilt-sdk -T linux_kernel
编译结束之后会在out/hispark_ss928v100/ipcamera_hispark_ss928v100_linux/目录下生成编译产物。




