OpenHarmony开发者论坛
标题:
RK3568------OpenHarmony 3.2-Release 板级移植
[打印本页]
作者:
付晨阳1
时间:
2024-8-23 19:41
标题:
RK3568------OpenHarmony 3.2-Release 板级移植
[md]# RK3568------OpenHarmony 3.2-Release 板级移植
@[TOC](文章目录)
---
# 前言
最近电力行业推动电鸿蒙的概念。因此我们公司开始着手在已有的MCU平台适配OpenHarmony系统,本人之前一直从事上层应用开发,没有相关工作经历,因此在CSDN平台记录整个工作过程,与各位共同学习
# 一、OpenHarmony 源码版本选择
在我写这篇文章的时候,OpenHarmony的官网已推出4.1-release版本的源码,我之所以选择OpenHarmony 3.2-release版本,是因为上文提到的电鸿蒙里RK3568平台的源码是基于OpenHarmony 3.2-release搭建的。为了后续项目匹配电鸿蒙,我选择在OpenHarmony 3.2-release移植
`后文对 OpenHarmony简称 OH`
# 二、OH源码下载&&编译环境
## 1.源码下载
[OH官网](
https://docs.openharmony.cn/page ... rcecode-acquire.md/
)
官网一共有4种获取方式,我选择的是直接站点下载压缩包 : OH[源码包](
https://docs.openharmony.cn/page ... ony-v3.2-release.md
)
## 2.编译环境
官网提供2种开发方式,分别为基于IDE开发和命令行开发,写的很详细,但是2种开发方式都需要安装各种库和依赖,对于刚接触的人来说,不是很友好。所以在官网设备开发文档菜单栏------工具中,介绍了基于Docker编译环境 [
https://docs.openharmony.cn/page ... gettools-acquire.md
](
https://docs.openharmony.cn/page ... gettools-acquire.md
),这种方式非常友好,只需要在本地拉取Docker镜像,就可以在基于镜像的容器中编译源码了
![在这里插入图片描述](
https://i-blog.csdnimg.cn/blog_m ... 79bd3750ee1a87d.png
)
`嫌麻烦不想读文档的,自行准备一个Ubuntu 20.04虚拟机,直接上干货`
拉取Docker镜像
> docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/docker_oh_standard:3.2
进入**存放OH源码**的路径下,运行容器
> docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/docker_oh_standard:3.2
![在这里插入图片描述](
https://i-blog.csdnimg.cn/blog_m ... ab71b2bab5de9e8.png
)
在容器中,手动安装交叉编译工具
> apt-get update && apt-get install -y gcc-arm-linux-gnueabi
`建议安装交叉编译工具后,将该容器做成镜像,重新生成一次,不然每次启动,都要手动安装一次交叉编译工具`
编译工程,验证源码与编译环境是否正确
> ./build.sh --product-name rk3568 --ccache
编译成功结果如下
![在这里插入图片描述](
https://i-blog.csdnimg.cn/blog_m ... 1d8674cfd759877.png
)
# 三、内核移植
## 1.OpenHarmony 内核编译流程解析
rk3568平台的内核配置和预编译脚本在:**//device/board/hihope/rk3568/kernel/build_kernel.sh**
![在这里插入图片描述](
https://i-blog.csdnimg.cn/blog_m ... 32fbcd7f36bba6e.png
)
> ①:复制一份内核源码
> ②将HDF框架补丁打入内核源码
> ③将支持RK3568平台的基础代码补丁打入内核源码
> ④复制内核源码的配置文件
执行过程分析:OH 源码中含有原生Linux-5.10源码,将Linux内核源码拷贝出来以后,先打HDF框架补丁,在打基于RK3568平台的补丁,最后只需修改dts和驱动,重新生成一个新的补丁,替换掉原项目的补丁,就可以适配自己的板子了
## 2.飞凌OK3568-C开发板移植
基于上文提到的OH内核编译流程解析,我们通过搭建自己的内核源码来适配飞凌的开发板
> 1. **拷贝一份Linux-5.10原生内核源码**
> 2. **打入OH中RK3568平台的补丁**
> 3. **修改OH中RK3568的预编译脚本**
> 4. **修改本地代码编译内核脚本**
> 5. **将OK3568-C的设备树移植到本地内核中**
> 6. **重新生成一份Patch补丁**
> 7. **替换OH中的补丁文件**
`以上操作,我已写了一个Makefile脚本,供大家参考(具体路径根据实际情况修改)`
```c
# 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
> 2. make kernel_patch
> 3. 进入OH源码,vim //device/board/hihope/rk3568/kernel/build_kernel.sh
![在这里插入图片描述](
https://i-blog.csdnimg.cn/blog_m ... ab67bd62052d816.png
)这里的OK-RK3568是我给飞凌自定义的板子名称,大家按自己的需求修改
> 4. 进入本地内核源码,vim //linux-5.10/make-ohos.sh
修改为自己的设备树二进制文件
![在这里插入图片描述](
https://i-blog.csdnimg.cn/blog_m ... 5e819856557a3b8.png
)
OK-RK3568:对应上文预编译脚本中的板子名称,要一致
arm64:平台
0xfe660000:串口地址
OK3568-C-linux:设备树文件名
rockchip_linux_defconfig:配置文件名
![在这里插入图片描述](
https://i-blog.csdnimg.cn/blog_m ... 343d32b31564030.png
)
将设备树变量替换成自己的
![在这里插入图片描述](
https://i-blog.csdnimg.cn/blog_m ... 556f38cae68aff6.png
)
![在这里插入图片描述](
https://i-blog.csdnimg.cn/blog_m ... f3ff9cd87d832c9.png
)
> 5. 将自己的设备树文件全部放在本地内核路径下 //linux-5.10/arch/arm64/boot/dts/rockchip
> 6. git diff 初始版本的编号 HEAD > kernel.patch
> 7. 将生成的补丁kernel.patch替换到OH源码路径下 //kernel/linux/patches/linux-5.10/rk3568_patch
## 4.飞凌开发板移植验证
RK3568核心板上有一个LED灯是可控的,修改内核配置文件(//kernel/linux/config/linux-5.10/arch/arm64/configs)以后,编译OH,将镜像烧写进开发板后,可以看到核心板上蓝色灯闪烁
![在这里插入图片描述](
https://i-blog.csdnimg.cn/blog_m ... 4957d84f464db3.jpeg
)
终端打印:
![在这里插入图片描述](
https://i-blog.csdnimg.cn/blog_m ... 7a0fc08ba393203.png
)
## 5.问题
如果在移植设备树文件以后,将镜像烧录到板子上内核报错:
Cannot load fstab from command line
![在这里插入图片描述](
https://i-blog.csdnimg.cn/blog_m ... f888f7d4eba73c.jpeg
)
说明找不到分区文件,如果遇到这个问题,可以私聊我寻求答案
---
# 总结
本人之前一直从事应用开发,借着这次电鸿的契机进行系统级开发的学习,将我在工作中的遇到的问题及解决思路记录并分享,希望可以与诸君共勉
`目前网上技术讨论群大都是鸿蒙的应用开发,总结此类文章也是希望将同样进行鸿蒙设备开发的同僚召集到一起,一起讨论学习。如果有同样在进行鸿蒙设备开发的朋友,可以加我的联系方式,期待您的消息`
![在这里插入图片描述](
https://i-blog.csdnimg.cn/blog_m ... 319b1f19308b5a.jpeg
=300x300)
[/md]
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5