• Lv0
    粉丝0

积分8 / 贡献0

提问0答案被采纳0文章1

作者动态

    [经验分享] RK3568------OpenHarmony 3.2-Release 板级移植 原创

    付晨阳1 显示全部楼层 发表于 2024-8-23 19:41:28

    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官网

    官网一共有4种获取方式,我选择的是直接站点下载压缩包 : OH源码包

    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

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

    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平台的基础代码补丁打入内核源码 ④复制内核源码的配置文件

    执行过程分析: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脚本,供大家参考(具体路径根据实际情况修改)

    # 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. 进入OH源码,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替换到OH源码路径下 //kernel/linux/patches/linux-5.10/rk3568_patch

    4.飞凌开发板移植验证

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

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

    5.问题

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


    总结

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

    ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/22245ac530da3d6cad319b1f19308b5a.jpeg =300x300)

    ©著作权归作者所有,转载或内容合作请联系作者

    您尚未登录,无法参与评论,登录后可以:
    参与开源共建问题交流
    认同或收藏高质量问答
    获取积分成为开源共建先驱

    Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

    返回顶部