当前位置:首页 > 嵌入式 > 《嵌入式技术与智能系统》
[导读]文章详细介绍了针对润开鸿鸿锐开发板SCDAYU800A的OpenHarmony操作系统的移植适配过程。润开鸿鸿锐开发板SCDAYU800A基于平头哥高性能RISC-V架构曳影TH1520芯片,具备强大的AI算力和丰富的功能接口。通过对OpenHarmony的适配,实现了从产品定义、工具链适配到内核移植、驱动适配等关键环节的完整流程。并重点探讨了RISC-V架构下针对标准系统Linux内核的移植以及触摸屏驱动的开发,为基于RISC-V架构的嵌入式系统研究提供了实践参考。

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].
[2] 刘畅, 武延军, 吴敬征, 赵琛. RISC-V指令集架构研究综述[J]. 软件学报, 2021, 32(12): 3992-4024.
[3] 林金龙, 何小庆. 深入理解RISC-V程序开发[M]. 北京: 航空航天大学出版社, 2021.
[4] OpenHarmony官方文档[EB/OL].
[5] 润开鸿鸿锐开发板SCDAYU800A技术手册[EB/OL].
[6] HDF驱动开发框架[EB/OL]. OpenHarmony开发者社区.
[7] ITOPEN/DAYU800 [EB/OL].
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭