OH5.1小型系统+linux内核
芯片型号厂商核心架构典型应用场景备注华为海思Cortex-A7智能摄像头、视觉 AI 开发套件社区适配非常成熟的明星芯片,有润和软件等公司推出的官方开发板。RK2206瑞芯微Cortex-M4低功耗物联网、智能家居设备虽有 Cortex-M 内核,但在 OpenHarmony 体系中被归类为小型系统,适用于轻量级、低功耗场景。华为海思高端智能摄像头、视频处理作为 Hi3516 系列的升级款,已出现
文档概述
说明:
1.文章由移远通信技术股份有限公司提供
2.以下内容包含了个人理解,仅供参考,如有不合理处,请联系笔者修改18107158288(微信同号)
一、环境信息
软件版本:OH 5.1
硬件信息:hi3516DV300
二、背景介绍
目前笔者收集了一下在 OpenHarmony 上支持的小型系统的设备如下:
| 芯片型号 | 厂商 | 核心架构 | 典型应用场景 | 备注 |
|---|---|---|---|---|
| Hi3516DV300 | 华为海思 | Cortex-A7 | 智能摄像头、视觉 AI 开发套件 | 社区适配非常成熟的明星芯片,有润和软件等公司推出的官方开发板。 |
| RK2206 | 瑞芯微 | Cortex-M4 | 低功耗物联网、智能家居设备 | 虽有 Cortex-M 内核,但在 OpenHarmony 体系中被归类为小型系统,适用于轻量级、低功耗场景。 |
| Hi3516DV500 | 华为海思 | – | 高端智能摄像头、视频处理 | 作为 Hi3516 系列的升级款,已出现在标准系统和小型系统的支持列表中。 |
| ASR1601/1603/1606 | 翱捷科技 | – | 蜂窝物联网设备、Tracker、共享设备 | Cat.1 系列芯片,具备高性能、多制式、低功耗特点,已广泛应用于鸿蒙物联网设备。 |
| ASR3601/3603 | 翱捷科技 | – | 儿童手表、功能机、POS 机 | 面向可穿戴及功能机领域的多模 Cat.1 芯片。 |
| SSD202 | 星宸科技 | Cortex-A7 双核 | 智能显示终端、楼宇对讲、家电彩屏 | 主打显示驱动的小型系统芯片。 |
同时,笔者也发现了一个问题:Linux 内核普遍被认为是给标准系统用的,这么多小型系统设备,哪些是支持 Linux 内核+小型系统的呢?功夫不负有心人,总算让笔者找到了一款 Linux 内核+小型系统的设备——hi3516DV300。
Hi3516DV300 是海思(HISILICON)推出的一款主打智能视觉处理的 SoC 芯片,广泛应用于安防监控、人脸识别、AI 机器视觉等嵌入式场景。以下是关于该芯片的核心信息整理:
核心特性与性能
处理器架构:双核 ARM Cortex-A7 @ 900MHz,支持 NEON 加速和 FPU 浮点运算单元,适合中低算力需求的边缘计算任务。
AI 算力:集成神经网络加速引擎,提供高达 1.0 Tops 的 AI 算力,可支持基础的人脸检测、跟踪、校正等智能分析功能。
视频编解码能力:
- 支持 H.264/H.265 编码与解码
- 最大编码分辨率可达 2688×1944@20fps
- 支持多码流实时编码(如 1080P + 720P + 360P 同时编码)
- JPEG 最高支持 16M 像素(4608×3456)@10fps 编码
ISP 图像处理:支持 3D 去噪、动态对比度增强、图像缩放、旋转、Mirror/Flip 等功能,支持 WDR(宽动态范围)与 Lean 模式切换。
三、环境搭建
明确了产品信息,那么就需要去搭建源码编译环境了,建议在 Ubuntu 20.04 上进行搭建,可以优先下载 5.1 版本的 OpenHarmony 代码。
我们去官网下载。首先我们打开官网网址:
https://gitcode.com/openharmony
然后找到源码下载章节:
点击这个下载说明,找到这个操作步骤,Release Notes 这个然后接着点击。

选择自己需要下载的版本,我们这边选择 5.1 版本。
然后就使用 repo+http 的方式下载源码。点击进去有文档教程,这样我们的源码就下载好了。现在就剩解决编译问题了。
四丶编译源码
代码下载之后,就使用编译命令编译了,编译命令如下:
./build.sh --product-name ipcamera_hispark_taurus_linux --ccache --no-prebuilt-sdk
在编译的时候,会有报错:
修改点总览
| 序号 | 文件 | 问题类型 | 关键改动 |
|---|---|---|---|
| 1 | kernel.gni | 配置层 | linux-6.6 → linux-5.10 |
| 2 | wifi_native/BUILD.gn | 依赖 | 添加 wpa_supplicant 依赖 |
| 3 | hi_irq/Makefile | Shell 语法 | exit1 → exit 1 |
| 4 | cfg.mak | 配置同步 | linux-4.19.y → linux-5.10.y |
| 5 | build.sh | 工具链模式 | 添加 CONFIG_USER_LLVM=y |
| 6 | Makefile.linux.param | LLVM 工具链 | LLVM=1, LLVM_IAS=1, LD/AR/NM |
| 7 | cbb/Makefile.linux | 工具路径 | strip 使用绝对路径 |
详细说明
修改点 1:build/ohos/kernel/kernel.gni
修改内容
\\diff
- linux_kernel_version = “linux-6.6”
- linux_kernel_version = “linux-5.10”
\\
❌ 不修改的错误
\
FAILED: hispark_taurus_small.patch not found
Error: File not found in linux-6.6/patches/
\\
🔍 根本原因
- OpenHarmony 仅为 hispark_taurus 提供了 linux-4.19 和 linux-5.10 的补丁文件
- 默认的 linux-6.6 在 \device/board/hisilicon/hispark_taurus/linux/patches/\ 中不存在
- GN 编译查找 \hispark_taurus_small.patch\,找不到就编译失败
✅ 为什么修改能解决
- 将内核版本设为 linux-5.10,编译系统可以找到对应的补丁文件
- 内核成功应用补丁,顺利编译
修改点 2:foundation/communication/wifi/…/wifi_native/BUILD.gn
修改内容
\\diff
“//base/hiviewdfx/hilog_lite/frameworks/featured:hilog_shared”,
- “//third_party/wpa_supplicant/wpa_supplicant-2.9:wpa_supplicant”,
\\
❌ 不修改的错误
\
ld.lld: error: undefined reference to ‘wpa_xxx’ functions
ld.lld: unable to find library -lwpa_client
\\
🔍 根本原因
- \wifi_native\ 在链接时指定了 -lwpa_client\,但没有声明编译时依赖
- Ninja 构建系统不知道要先构建 wpa_supplicant
- 链接时 wpa_supplicant 库还未生成,导致链接器找不到符号
✅ 为什么修改能解决
- 添加显式依赖后,Ninja 确保 wpa_supplicant 在 wifi_native 之前编译完成
- 链接时库文件已存在,链接器可以正确解析所有符号
修改点 3:device/soc/hisilicon/hi3516dv300/sdk_linux/drv/interdrv/common/hi_irq/Makefile
修改内容
\\diff
- cd $@; make || exit1;
- cd $@; make || exit 1;
\\
❌ 不修改的错误
\
/bin/sh: exit1: command not found
make: *** [Makefile:21: kernel] Error 127
\\
🔍 根本原因
- Shell 中 \exit1\ 被当作"命令名"而不是 \exit\ 命令的参数
- Shell 试图执行一个叫 \exit1\ 的程序,导致"命令未找到"
✅ 为什么修改能解决
- \exit 1\ 是正确的 Shell 语法:\exit\ 是命令,\1\ 是退出码参数
- make 规则正确执行,子进程失败时返回正确的错误码
修改点 4:device/soc/hisilicon/hi3516dv300/sdk_linux/drv/mpp/cfg.mak
修改内容
\\diff
- export CONFIG_KERNEL_VERSION=linux-4.19.y
- export CONFIG_KERNEL_VERSION=linux-5.10.y
- export CONFIG_LINUX_4_19_y=y
- export CONFIG_LINUX_5_10_y=y
\\
❌ 不修改的错误
\
Error: Kernel version mismatch
SDK configured for linux-4.19 but kernel is linux-5.10
\\
🔍 根本原因
- 两层配置不同步(多层构建系统问题)
- GN 层设为 linux-5.10,SDK Make 层还是 linux-4.19
- SDK 编译时查找 4.19 的内核头文件,但实际内核是 5.10,API 不兼容
✅ 为什么修改能解决
- cfg.mak 更新为 linux-5.10 后,SDK 驱动模块能找到正确的内核头文件
- 头文件 API 和编译参数保持一致,编译通过
修改点 5:device/soc/hisilicon/hi3516dv300/sdk_linux/build.sh
修改内容
\\diff
- CONFIG_USER_LLVM=y # 添加到 make 命令
\\
❌ 不修改的错误
\
/usr/bin/as: unrecognized option ‘-EL’
Error: assembler error - ARM flags not recognized
\\
🔍 根本原因
- 没有 \CONFIG_USER_LLVM=y\,Kbuild 不知道要用 LLVM 工具链
- clang 生成 ARM 汇编,Kbuild 用 host 的 /usr/bin/as(x86 汇编器)处理
- x86 汇编器不认识 -EL(ARM 小端标志),报错
✅ 为什么修改能解决
- 传入 \CONFIG_USER_LLVM=y\ 后,Kbuild 启用 LLVM 模式
- 使用 clang 的汇编器处理 ARM 代码
- ARM 汇编标志被正确识别
修改点 6:device/soc/hisilicon/hi3516dv300/sdk_linux/drv/mpp/Makefile.linux.param
Part A:导出变量块(lines 89-107)
修改内容:
- 添加完整的 \CROSS_PATH\ 路径定义
- 添加 \HOSTCC\ 导出
- 删除注释行和错误的 “ar” 定义
Part B:COMPILER_TRIPLE 块(lines 138-145)
修改内容:
- 添加 \LLVM=1\ 标志
- 添加 \LLVM_IAS=1\ 标志
- 添加 \LD=/ld.lld\
- 添加 \AR=/llvm-ar\
- 添加 \NM=/llvm-nm\
❌ 不修改的错误
- 缺 LLVM=1 和 LLVM_IAS=1:/usr/bin/as: unrecognized option ‘-EL’\
- 缺 LD/AR/NM:\ld.lld/ar/nm command not found\
🔍 根本原因
- Kbuild 默认用 GCC 工具链,即使传入 \CC=clang\ 也不会改变
- clang 生成的 ARM 汇编被 x86 汇编器处理 → 错误
- Kbuild 需要 LD/AR/NM 三个工具,不指定时用 GNU 默认值,在 PATH 中找不到
✅ 为什么修改能解决
- \LLVM=1\:启用 LLVM 工具链模式
- \LLVM_IAS=1\:启用 LLVM 集成汇编器(关键!直接解决 -EL 问题)
- \LD/AR/NM\:显式指定 LLVM 工具的完整路径
修改点 7:device/soc/hisilicon/hi3516dv300/sdk_linux/drv/mpp/cbb/Makefile.linux
修改内容
\\diff
- @\strip
- @/\strip
\\
❌ 不修改的错误
\
arm-linux-gnueabi-strip: command not found
\\
🔍 根本原因
- \\ 仅是前缀,不包含路径信息
- 在 OHOS_LITE 环境的 PATH 中找不到 \rm-linux-gnueabi-strip\
- 依赖 PATH 环境变量是不稳定的做法
✅ 为什么修改能解决
- \\ 是绝对路径,使用完整的绝对路径
- shell 直接执行,不依赖 PATH
- 增强可靠性和可移植性

五、参考文档
https://gitcode.com/openharmony/docs/blob/master/zh-cn/release-notes/OpenHarmony-v5.1.0-release.md
https://device.harmonyos.com/cn/docs/documentation/guide/ide-hi3516dv300-compile-0000001146686054
https://device.harmonyos.com/cn/docs/documentation/guide/upload_hi3516_small_system-0000001326267405
更多推荐




所有评论(0)