基于SCDAYU800A开发板的OpenHarmony移植与适配研究
Research on the Porting and Adaptation of OpenHarmony Based on the SCDAYU800A Development Board
DOI: 10.12677/etis.2025.22010, PDF, HTML, XML,   
作者: 王 剑, 孙庆生:长江大学计算机科学学院,湖北 荆州;闻 飞:江苏润开鸿数字科技有限公司,江苏 南京
关键词: SCDAYU800A开发板OpenHarmonyRISC-V架构移植适配触摸屏驱动SCDAYU800 Development Board OpenHarmony RISC-V Architecture Porting and Adaptation Touchscreen Driver
摘要: 文章详细介绍了针对润开鸿鸿锐开发板SCDAYU800A的OpenHarmony操作系统的移植适配过程。润开鸿鸿锐开发板SCDAYU800A基于平头哥高性能RISC-V架构曳影TH1520芯片,具备强大的AI算力和丰富的功能接口。通过对OpenHarmony的适配,实现了从产品定义、工具链适配到内核移植、驱动适配等关键环节的完整流程。并重点探讨了RISC-V架构下针对标准系统Linux内核的移植以及触摸屏驱动的开发,为基于RISC-V架构的嵌入式系统研究提供了实践参考。
Abstract: This paper provides a detailed introduction to the porting and adaptation process of the OpenHarmony operating system for the RunKaiHong Hongrui development board SCDAYU800A. The SCDAYU800 development board, based on the Pingtouge high-performance RISC-V architecture Yieying TH1520 chip, features powerful AI computing capabilities and a rich set of functional interfaces. By adapting to OpenHarmony, the entire process from product definition to toolchain adaptation, kernel transplantation, and driver adaptation has been successfully implemented. The paper focuses on the adaptation of the transplantation of the Linux kernel under the RISC-V architecture, and the development of the touchscreen driver, providing practical references for embedded system development based on the RISC-V architecture.
文章引用:王剑, 闻飞, 孙庆生. 基于SCDAYU800A开发板的OpenHarmony移植与适配研究[J]. 嵌入式技术与智能系统, 2025, 2(2): 123-132. https://doi.org/10.12677/etis.2025.22010

1. 引言

随着RISC-V指令集架构的快速发展,基于该架构的计算机系统在工业控制、智能设备等领域得到了广泛应用[1]-[3]。润开鸿鸿锐开发板SCDAYU800A作为一款高性能的RISC-V开发平台,具备强大的AI算力和丰富的功能接口,适用于多种应用场景。OpenHarmony是一个由华为公司贡献给开放原子基金会(OpenAtom Foundation)的开源项目。它是一个全场景分布式操作系统,旨在为各种智能设备提供统一的操作体验。本文将重点探讨如何将OpenHarmony 4.1 Release版本移植到润开鸿鸿锐开发板SCDAYU800A上,并实现系统的稳定运行。

2. 润开鸿鸿锐开发板SCDAYU800A硬件特性

润开鸿鸿锐开发板SCDAYU800A具备平头哥高性能RISC-V架构曳影TH1520芯片,集成4核高性能RISC-V处理器玄铁C910架构。润开鸿鸿锐开发板SCDAYU800A的外观如图1所示。

Figure 1. Runkaihong Hongrui development board SCDAYU800A appearance

1. 润开鸿鸿锐开发板SCDAYU800A的外观

该开发板具备以下硬件特性:

1) AI算力达4TOPs,支持蓝牙、音频、视频和摄像头等功能。

2) 支持多种视频输入输出接口,如MIPI、HDMI等。

3) 提供丰富的扩展接口,如GPIO、SPI、I2C等。

4) 适用于工控平板、智慧大屏、智能NVR、信息发布系统、云终端、车载中控等多种场景。

图2显示了润开鸿鸿锐开发板SCDAYU800A Mipi屏幕安装的方法。

Figure 2. Runkaihong Hongrui development board SCDAYU800A Mipi screen installation

2. 润开鸿鸿锐开发板SCDAYU800A Mipi屏幕安装

3. OpenHarmony移植流程

移植就是把程序从一个运行环境转移到另一个运行环境。在主机–开发机的交叉模式下,即是把主机上的程序下载到目标机上运行。图3显示了OpenHarmony移植到SCDAYU800的流程情况。OpenHarmony版本选择必须大于3.2 Beta2以上版本。

Figure 3. Flowchart of porting OpenHarmony to SCDAYU800

3. OpenHarmony移植到SCDAYU800的流程图

OpenHarmony的移植过程包括产品定义、工具链适配、musl库适配、内核移植、init启动子系统移植、显示适配等关键环节[4]。以下是移植步骤。

3.1. 产品定义

在OpenHarmony的移植过程中,产品定义是基础步骤。针对OpenHarmony标准系统,适配新的产品的方法是首先要在vendor、device/board和device/soc三个目录下创建产品相关的三个目录vendor/hihope/${product_name}、device/board/hihope/${product_name}和device/soc/${chip_product}/${chip},以SCDAYU800A为例,在当前产品中product_name设置为dayu800,chip_product设置为thead,chip设置为th1520。

vendor/hihope/dayu800目录主要存放厂家资料以及产品的配置文件,包括描述产品的config.json、产品的hcs配置文件以及其他配置文件等。

device/board/hihope/dayu800目录主要用于存放开发板相关的文件,包括外设驱动、启动参数、内核编译相关文件、烧录相关文件、uboot相关文件以及升级相关文件。

device/soc/thead/th1520目录主要用于存放和芯片SoC相关的文件和库,这些文件只会因芯片soc改变才会修改,而不会因为开发板变化而进行修改。

快速适配这三个仓的方法是学习能编译通过的产品,例如rk3568产品,然后将其拷贝一份,并重命名为当前产品名,然后按照以下步骤根据自己产品的特性进行逐步修改。根据上述分析,首先需要在//vendor/hihope目录下创建dayu800产品目录,并创建config.json文件,用于描述产品所使用的SOC及所需的子系统。配置文件内容如下[5]

"product_name": "dayu800",

"device_company": "thead",

"device_build_path": "device/board/hihope/dayu800",

"target_cpu": "RISCV64",

"type": "standard",

"version": "3.0",

"board": "dayu800",

"api_version": 11,

"enable_ramdisk": true,

"build_selinux": false,

"build_seccomp": false,

"inherit": [

"vendor/hihope/dayu800/rich.json",

"vendor/hihope/dayu800/chipset_common.json"

],

"subsystems": [

{

"subsystem": "security",

"components": [

{

"component": "selinux",

"features": []

}

]

}

// 其他子系统配置

]

}

该部分根据vendor仓的定义,在//device/board/hihope目录下创建一个dayu800的产品,然后创建一个ohos.build文件定义产品的subsystem以及BUILD.gn定义产品的编译项目。

在//device/soc下根据芯片公司名称创建一个thead的仓,存放th1520 soc相关的代码和闭源库,通过//device/board/hihope/BUILD.gn添加模块进行关联编译。该仓下的ohos.build文件描述的是设备子系统,这里使用的是device_th1520,相关名称需要将拷贝过来的文件修改为当前设备的子系统名。同时需要将ohos.build的module_list下的模块及子模块中涉及的part_name和subsystem_name全部修改为device_th1520。

至此,可以通过使用如下命令,启动dayu800的构建:

./build.sh --product-name dayu800

3.2. 工具链适配

因为官方的OpenHarmony不支持RISCV64架构,因此在工具链架构的配置上相对来说配置起来比较困难,首先解决的是build仓中的架构适配,这部分仿照ARM64配置的部分进行相应的RISCV64架构添加,同时对于musl的编译配置根据RISCV64架构进行对应添加,内核的编译部分根据平头哥提供的编译工具链,使用llvm会有相关私有指令集无法编译[6]

3.3. musl库适配

musl库是一个轻量级、高性能的C标准库(libc)实现,专为Linux系统设计。它旨在提供标准兼容性、代码简洁性和高效性,尤其适合嵌入式系统、容器化环境(如Docker)或需要高度可移植性的场景。这里首先编译musl库是因为该库依赖的模块相对最少,能最快测试RISCV64架构编译配置结果是否符合要求,该部分的编译主要涉及到build仓的配置、musl仓的RISCV64架构配置,以及musl库中有架构的代码,这一块部分从glibc中获取。

3.4. 内核移植

内核移植是OpenHarmony移植过程中的核心环节。润开鸿鸿锐开发板SCDAYU800A采用平头哥提供的Linux内核,适配OpenHarmony特性。该部分的移植既要对Linux内核本身很熟悉,同时也要对鸿蒙的内核特性宏配置很熟悉。本内核移植工作的主要思路是:

第一步是配置内核的编译流程脚本。

内核的编译是device/board/hihope/dayu800/kernel/BUILD.gn中kernel模块调用对应目录下的build_kernel.sh脚本进行编译的。该脚本的核心思想是首先拷贝内核源码到out/kernel/src_tmp/linux-5.10路径下,给内核源码中打上HDF (Hardware Driver Foundation)的补丁,然后在内核源码中创建vendor路径的软链接(主要是设备树dts和产品的外设驱动),然后将编译的config文件拷贝到arch/arm64/config路径下,将产品的dts文件拷贝到vendor/arch/arm64/boot/dts/hihope路径下,接下来将外设驱动链接到内核中,编译内核。最后拷贝编译成功的镜像到out/dayu800/packages/phone/images中。

第二步是将产品的设备树dts完整地移植过来,然后编译内核并解决相应的编译问题。

第三步是将架构代码即arch/arm64下的代码尽可能地替换成产品linux中的内容,然后编译内核并解决相应的编译问题。

在device/board/hihope/dayu800/kernel目录下进行内核编译。除内核以外的代码编译采用的是OpenHarmony版本自身的llvm工具链。

这里只列出核心编译命令。

# 首次编译请先执行下面命令

./build/prebuilts_download.sh

# 全量代码编译

./build.sh --product-name dayu800 --gn-args full_mini_debug=false --ccache

# 单模块编译

# module_name举例:"kernel:kernel",表示编译kernel目录下的kernel模块,所有后面的kernel是module_name

./build.sh --product-name dayu800 --ccache --build-target module

# 内核模块编译

./build.sh --product-name dayu800 --ccache --build-target kernel

编译成功有如下信息打印

[OHOS INFO] c overall build overlap rate: 1.05

[OHOS INFO]

[OHOS INFO]

[OHOS INFO] dayu800 build success

[OHOS INFO] cost time: 0:45:57

=====build successful=====

2025-01-18 13:06:52

++++++++++++++++++++++++++++++++++++++++

将编译后的内核打包成boot.ext4镜像文件。

第四步是将产品linux的config⽂件内的宏移植过来。

第五步是运行内核,并根据运行时问题进行逐个解决。

3.5. init启动子系统移植

在成功适配musl库和内核后,需要适配和启动第一个init进程及其初始化配置文件。主要工作包括:

1) 编译适配startup_init模块。

2) 配置启动参数,确保系统能够正常启动。

3.6. 显示适配

显示适配是系统启动的最后一步,主要包括以下内容:

1) 在shell中运行bootanimation,确保启动动画正常显示。

2) 调试OpenHarmony的Launcher模块,完成系统启动。

3) 该模块涉及的仓为graphic_graphic_2d,代码路径为foundation/graphic/graphic_2d,该模块是针对当前产品⽽适配。

4. 触摸屏驱动开发

触摸屏驱动是润开鸿鸿锐开发板SCDAYU800A的重要组成部分,其开发过程基于HDF驱动管理框架中的Input模型。触摸屏的驱动被放置在//drivers/hdf_core/framework/model/input/driver/touchscreen目录中。移植触摸屏驱动主要工作是向系统注册ChipDevice模型实例[7]。触摸屏驱动的主要工作包括:

1) 对触摸屏驱动IC进行上电、配置硬件管脚并初始化其状态。

2) 注册中断、配置通信接口(I2C或SPI)。

3) 设定Input相关配置、下载及更新固件等操作。

图4显示了润开鸿鸿锐开发板SCDAYU800A触摸屏的常用管脚。

Figure 4. Common pins of the development board SCDAYU800A touch screen

4. 开发板SCDAYU800A触摸屏的常用管脚

润开鸿鸿锐开发板SCDAYU800A触摸屏驱动的开发过程分为以下三个步骤,这里仅列出部分代码。

4.1. 设备描述配置

在OpenHarmony中,配置(Configuration)通常指对系统、硬件或应用程序的参数、选项和功能进行定制和调整的过程,以满足特定设备或场景的需求。在HDF驱动框架下,需要在配置文件中注册驱动信息。设备描述配置主要包含Input驱动模型各模块层级信息配置文件路径为: vendor/hihope/dayu800/hdf_config/khdf/device_info/device_info.hcs,HDF框架依据该配置信息实现对Input模型各模块的依次加载。配置内容如下:

input :: host {

hostName = "input_host";

priority = 100;

device_input_manager :: device {

device0 :: deviceNode {

policy = 2; // 向外发布服务

priority = 100; // 加载优先级

preload = 0; // 加载该驱动

permission = 0660;

moduleName = "HDF_INPUT_MANAGER";

serviceName = "hdf_input_host";

deviceMatchAttr = "";

}

}

// 其他设备配置

}

4.2. 板级配置及器件私有配置

板级配置及器件私有配置文件路径为vendor/hihope/dayu800/hdf_config/khdf/input/input_config.hcs,配置内容如下:

root {

input_config {

touchConfig {

touch0 {

boardConfig {

match_attr = "touch_device1";

inputAttr {

inputType = 0; // 0代表触摸屏

solutionX = 800;

solutionY = 1280;

devName = "main_touch"; // 设备名称

}

// 其他配置

}

}

}

}

}

4.3. 添加器件驱动

在器件驱动中,主要实现平台预留的差异化接口。以数据获取及解析为例,润开鸿鸿锐开发板SCDAYU800A使用了gt911触摸屏,代码路径为: drivers/hdf_core/framework/model/input/driver/touchscreen/touch_gt911.c,部分代码如下:

static void ParsePointData(ChipDevice *device, FrameData *frame, uint8_t *buf, uint8_t pointNum)

{

int32_t resX = device->driver->boardCfg->attr.resolutionX;

int32_t resY = device->driver->boardCfg->attr.resolutionY;

// 数据解析逻辑

//器件私有配置解析

//器件设备注册到平台驱动

//调用Input HDI接口

}

图5显示了调用Input HDI的步骤。

Figure 5. Steps to call Input HDI

5. 调用Input HDI的步骤

5. 结论

本文介绍了润开鸿鸿锐开发板SCDAYU800A的OpenHarmony操作系统的移植适配过程。在分析OpenHarmony标准系统的前提下,成功实现了OpenHarmony在润开鸿鸿锐开发板SCDAYU800A上的稳定运行。该研究为基于RISC-V架构的单板机系统开发提供了实践参考,具有一定的应用价值。

参考文献

[1] RISC-V架构手册[EB/OL].
https://riscv.org/, 2024-12-11.
[2] 刘畅, 武延军, 吴敬征, 赵琛. RISC-V指令集架构研究综述[J]. 软件学报, 2021, 32(12): 3992-4024.
[3] 林金龙, 何小庆. 深入理解RISC-V程序开发[M]. 北京: 航空航天大学出版社, 2021.
[4] OpenHarmony官方文档[EB/OL].
https://www.openharmony.cn/docs/zh-cn/overview/, 2024-12-13.
[5] 润开鸿鸿锐开发板SCDAYU800A技术手册[EB/OL].
https://www.hoperun.com/, 2024-12-10.
[6] HDF驱动开发框架[EB/OL]. OpenHarmony开发者社区.
https://www.openharmony.cn/docs/zh-cn/overview/, 2024-12-12.
[7] ITOPEN/DAYU800 [EB/OL].
https://gitee.com/itopen/dayu800, 2025-01-23.