RK3568------Openharmony 3.2-Release 板级移植

RK3568------Openharmony 3.2-Release 板级移植


前言

最近电力行业推动电鸿蒙的概念。因此我们公司开始着手在已有的MCU平台适配Openharmony系统,本人之前一直从事上层应用开发,没有相关工作经历,因此在CSDN平台记录整个工作过程,与各位共同学习

一、Openharmony 源码版本选择

在我写这篇文章的时候,Openharmony的官网已推出4.1-release版本的源码,我之所以选择Openharmony 3.2-release版本,是因为上文提到的电鸿蒙里RK3568平台的源码是基于Openharmony 3.2-release搭建的。为了后续项目匹配电鸿蒙,我选择在Openharmony 3.2-release移植
后文对 Openharmony简称 ohos

二、ohos源码下载&&编译环境

1.源码下载

ohos官网

官网一共有4种获取方式,我选择的是直接站点下载压缩包 : ohos源码包
在这里插入图片描述

2.编译环境

官网提供2种开发方式,分别为基于IDE开发和命令行开发,写的很详细,但是2种开发方式都需要安装各种库和依赖,对于刚接触的人来说,不是很友好。所以在官网设备开发文档菜单栏------工具中,介绍了基于Docker编译环境 https://docs.openharmony.cn/pages/v4.0/zh-cn/device-dev/get-code/gettools-acquire.md,这种方式非常友好,只需要在本地拉取Docker镜像,就可以在基于镜像的容器中编译源码了
在这里插入图片描述

嫌麻烦不想读文档的,自行准备一个Ubuntu 20.04虚拟机,直接上干货

拉取Docker镜像

docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/docker_oh_standard:3.2

进入存放ohos源码的路径下,运行容器

docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/docker_oh_standard:3.2

在这里插入图片描述
在容器中,手动安装交叉编译工具

apt-get update && apt-get install -y gcc-arm-linux-gnueabi

建议安装交叉编译工具后,将该容器做成镜像,重新生成一次,不然每次启动,都要手动安装一次交叉编译工具

编译工程,验证源码与编译环境是否正确

./build.sh --product-name rk3568 --ccache

编译成功结果如下
在这里插入图片描述

三、内核移植

1.OpenHarmony 内核编译流程解析

rk3568平台的内核配置和预编译脚本在://device/board/hihope/rk3568/kernel/build_kernel.sh
在这里插入图片描述

①:复制一份内核源码
②将HDF框架补丁打入内核源码
③将支持RK3568平台的基础代码补丁打入内核源码
④复制内核源码的配置文件

执行过程分析:ohos 源码中含有原生Linux-5.10源码,将Linux内核源码拷贝出来以后,先打HDF框架补丁,在打基于RK3568平台的补丁,最后只需修改dts和驱动,重新生成一个新的补丁,替换掉原项目的补丁,就可以适配自己的板子了

2.飞凌OK3568-C开发板移植

基于上文提到的ohos内核编译流程解析,我们通过搭建自己的内核源码来适配飞凌的开发板

  1. 拷贝一份Linux-5.10原生内核源码
  2. 打入ohos中RK3568平台的补丁
  3. 修改ohos中RK3568的预编译脚本
  4. 修改本地代码编译内核脚本
  5. 将OK3568-C的设备树移植到本地内核中
  6. 重新生成一份Patch补丁
  7. 替换ohos中的补丁文件

以上操作,我已写了一个Makefile脚本,供大家参考(具体路径根据实际情况修改)

# Linux内核目录
KERNEL_SRC_TMP_PATH := ~/Documents/linux-5.10

# OpenHarmony目录相关变量
OHOS_BUILD_HOME := ~/Documents/OpenHarmony-v3.2-Release/OpenHarmony
DEVICE_NAME := rk3568
KERNEL_VERSION := linux-5.10
KERNEL_SRC_PATH := $(OHOS_BUILD_HOME)/kernel/linux/${KERNEL_VERSION}
DEVICE_PATCH_DIR := $(OHOS_BUILD_HOME)/kernel/linux/patches/${KERNEL_VERSION}/$(DEVICE_NAME)_patch
DEVICE_PATCH_FILE := $(DEVICE_PATCH_DIR)/kernel.patch
KERNEL_PATCH_PATH := $(OHOS_BUILD_HOME)/kernel/linux/patches/${KERNEL_VERSION}

.PHONY: all clean
copy_kernel:
    rm -rf $(KERNEL_SRC_TMP_PATH);mkdir -p $(KERNEL_SRC_TMP_PATH);cp -arfL $(KERNEL_SRC_PATH)/* $(KERNEL_SRC_TMP_PATH)/;cd $(KERNEL_SRC_TMP_PATH) && git init && git add . && git commit -a -sm "初始内核"

kernel_patch:
    cd $(KERNEL_SRC_TMP_PATH) && patch -p1 < $(DEVICE_PATCH_FILE)
    cd $(KERNEL_SRC_TMP_PATH) && find ./* -name *.orig | xargs rm -rf && git add . && git commit -a -sm "RK3568补丁"

all:
    make clean
    make copy_kernel
    make patch_kernel

clean:
    rm -rf $(KERNEL_SRC_TMP_PATH)

具体操作如下:

  1. make copy_kernel
  1. make kernel_patch
  1. 进入ohos源码,vim //device/board/hihope/rk3568/kernel/build_kernel.sh

在这里插入图片描述这里的OK-RK3568是我给飞凌自定义的板子名称,大家按自己的需求修改

  1. 进入本地内核源码,vim //linux-5.10/make-ohos.sh

修改为自己的设备树二进制文件
在这里插入图片描述

OK-RK3568:对应上文预编译脚本中的板子名称,要一致
arm64:平台
0xfe660000:串口地址
OK3568-C-linux:设备树文件名
rockchip_linux_defconfig:配置文件名
在这里插入图片描述
将设备树变量替换成自己的
在这里插入图片描述
在这里插入图片描述

  1. 将自己的设备树文件全部放在本地内核路径下 //linux-5.10/arch/arm64/boot/dts/rockchip
  1. git diff 初始版本的编号 HEAD > kernel.patch
  1. 将生成的补丁kernel.patch替换到ohos源码路径下 //kernel/linux/patches/linux-5.10/rk3568_patch

4.飞凌开发板移植验证

RK3568核心板上有一个LED灯是可控的,修改内核配置文件(//kernel/linux/config/linux-5.10/arch/arm64/configs)以后,编译ohos,将镜像烧写进开发板后,可以看到核心板上蓝色灯闪烁

在这里插入图片描述
终端打印:
在这里插入图片描述

5.问题

如果在移植设备树文件以后,将镜像烧录到板子上内核报错:
Cannot load fstab from command line
在这里插入图片描述
说明找不到分区文件,如果遇到这个问题,可以私聊我寻求答案


总结

本人之前一直从事应用开发,借着这次电鸿的契机进行系统级开发的学习,将我在工作中的遇到的问题及解决思路记录并分享,希望可以与诸君共勉
目前网上技术讨论群大都是鸿蒙的应用开发,总结此类文章也是希望将同样进行鸿蒙设备开发的同僚召集到一起,一起讨论学习。如果有同样在进行鸿蒙设备开发的朋友,可以加我的联系方式,期待您的消息

在这里插入图片描述

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: roc-rk3568-pc是一款基于RK3568芯片的台式电脑板,它能够提供高性能、低功耗、多媒体处理以及AI加速等特性。roc-rk3568-pc实现了PC级性能和功能,可以运行Linux和Android操作系统,同时支持多种显示接口和存储接口。 例如,roc-rk3568-pc支持双频WiFi和蓝牙,可以通过HDMI、DP、VGA等接口连接显示器,还可以使用USB3.0、SATA、NVMe等接口连接存储设备。此外,roc-rk3568-pc还配备了四个USB 2.0接口、两个USB 3.0接口、一个千兆网口、一个SPI Flash等。 对于开发者和爱好者来说,roc-rk3568-pc提供了完整的软件开发包(SDK),包括操作系统、编译器、驱动程序、应用程序等。同时,roc-rk3568-pc还有丰富的软件生态系统和社区支持,大大降低了开发门槛和开发成本。 总之,roc-rk3568-pc是一款高性能、全功能、易开发的台式电脑板,适用于各种应用场景,例如家庭娱乐、远程办公、物联网等。 ### 回答2: ROC-RK3568-PC例程是一个基于ROC-RK3568平台设计的针对PC设备的系统应用程序。该例程主要提供了一个使用ROC-RK3568平台的PC设备的示例,用户可通过该例程学习ROC-RK3568平台的基本应用,相应的硬件配置和软件编程技术。 针对ROC-RK3568-PC例程,用户需要掌握一定的嵌入式系统开发技术。首先,用户需要了解ROC-RK3568平台的基本知识,并安装相应的开发环境和编译器。在编写程序的过程中,用户需要熟悉C/C++语言和Linux操作系统,同时掌握设备驱动和应用程序的编写方法,用于实现安装、媒体播放、网络通信、GUI开发等功能。 ROC-RK3568-PC例程的主要任务是提供一个基本的嵌入式系统应用程序示例,让开发者通过学习和修改代码,快速掌握ROC-RK3568平台的开发和应用。该例程的编写需要开发者对ROC-RK3568平台熟悉到一定程度,需要有一定的软件编码能力和嵌入式系统设计经验。同时,用户还需要具备较好的沟通能力和团队协作能力,与其他成员共同完成开发任务。 总的来说,ROC-RK3568-PC例程是一个有实际应用价值的例程,对于想要深入了解嵌入式系统开发的开发者,学习和掌握该例程的编写技术是非常有益的。 ### 回答3: ROC-RK3568-PC例程是指基于ROC-RK3568芯片的PC开发板的样例程序。ROC-RK3568是一款高性能的处理器芯片,可以广泛应用于智能家居、工业控制、远程监控等领域。ROC-RK3568-PC是采用该芯片设计的一款开发板,可以为开发者提供丰富的硬件接口,并支持多种操作系统,如Ubuntu、Android等。 ROC-RK3568-PC例程提供了各种各样的代码示例和应用程序,可以帮助开发者更好地理解和使用ROC-RK3568芯片,实现自己的应用程序。例如,样例程序包括了基于Qt的UI界面设计、GPIO控制、I2C读写、串口通信、网络通信、摄像头采集等功能。此外,还提供了蓝牙配对、TCP/IP通信、远程控制等应用程序,可以帮助开发者快速搭建自己的应用系统。 对于需要使用ROC-RK3568芯片进行开发的开发者来说,ROC-RK3568-PC例程是一个非常有用的参考,可以加快开发进度,提高开发效率。自定义应用程序时,只需要根据自己的需求进行修改或者扩展即可。ROC-RK3568-PC例程提供了良好的参考和基础,为开发者快速实现自己所需的功能提供了便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值