当前位置:   article > 正文

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

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官网: https://docs.openharmony.cn/pages/v4.0/zh-cn/device-dev/get-code/sourcecode-acquire.md/

官网一共有4种获取方式,我选择的是直接站点下载压缩包 : https://docs.openharmony.cn/pages/v4.1/zh-cn/release-notes/OpenHarmony-v3.2-release.md
在这里插入图片描述

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

具体操作如下:

  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
在这里插入图片描述
说明找不到分区文件,如果遇到这个问题,可以私聊我寻求答案

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/548377
推荐阅读
相关标签
  

闽ICP备14008679号