NanoPi M1 Plus 移植 Openharmony 之建立自己的开发仓库 原创 精华
【本文正在参与优质创作者激励】
1、前言
因为之前快速移植的时候,除了boot.img用自己编译的,其他img多用树莓派3B的img就能正常点亮,所以为了能快速成功移植选用树莓派3B作为参考。目前已经可以编译通过,可以显示画面,并支持触摸驱动,其他功能还很不完善。
2、 manifest base 的选择
树莓派3B的代码下载可以参考以下官方链接:
树莓派3B快速上手 OpenHarmony:https://gitee.com/openharmony-sig/devboard_vendor_rpi3b#预编译固件
或者原作者xfan1024的Gitee 仓库
https://gitee.com/xfan1024/oh-rpi3b
也可参考朱伟老师的帖子
OpenHarmony3.0在树莓派3B上的烧录与通讯:https://harmonyos.51cto.com/posts/9379
树莓派移植的主要仓库在:https://gitee.com/xfan1024/
我的编译环境之前是参考朱伟老师的帖子下载的
repo init 指令如下:
repo 参数说明如下:
-u URL,指定manifest位置
-m 选择仓库中的manifest文件,缺省为default.xml
-b 指定revision, 如一个特定的manifest分支.
从以上可以看出我用的树莓派3B对应的mainfest仓库为
https://gitee.com/xfan1024/oh-rpi3b.git
这个仓库的openharmony-3.0分支的oh-rpi3b.xml
如果参考openharmony官方网站的则是
对应的mainfest仓库为
https://gitee.com/openharmony-sig/manifest.git
这个仓库的master 分支的devboard_rpi3b.xml文件
这两个仓库版目前版本上差异不大只是vendor/rpi3这个仓库一个用sig下的一个是用xfan1024下的
3、参考树莓派3B新增NanoPi M1 Plus 的仓库
3.1、克隆树莓派3B仓库到自己的Gitee下
从oh-rpi3b.xml 中可以知道针对树莓派3B的主要差异如下:
可以先将这几个仓库从 https://gitee.com/xfan1024/ 克隆到自己的gitee下,我这边新建了一个OHOS_nanopi_m1_plus组织,然后将以上6个仓库克隆过来。
OHOS_nanopi_m1_plus组织地址:https://gitee.com/ohos_nanopi_m1_plus
修改oh-rpi3b.xml中以下内容:
将remote name=“xfan1024"替换为remote name=“ohos_nanopi_m1_plus”
将fetch=”." 替换fetch=“https://gitee.com/ohos_nanopi_m1_plus”
将review=“https://gitee.com/xfan1024/"/替换为review="https://gitee.com/ohos_nanopi_m1_plus/”
将全部的remote="xfan1024"替换为remote=“ohos_nanopi_m1_plus”
相关修改如下
将修改后的完整oh-rpi3b.xml重命名为任意你想要的名字如devboard_nanopim1plus_tag.xml,并在自己的gitee/或组织下建立一个manifest的仓库,把这个文件上传,将repo ini 指令中的url和manifest换成你自己的地址和文件,这样子你就可以通过以下指令下载到可以编译树莓派3B的仓库。
3.2、客制化NanoPi M1 Plus
首先我们列一个表格,填入信息如下
product | device | vendor | socvendor | |
---|---|---|---|---|
含义 | 嵌入式产品名 | SOC名 | 产品制造商 | SOC制造商 |
名字 | nanopim1plus | allwinnerh3 | friendlyarm | allwinner |
3.2.1、 建立NanoPi M1 Plus的 kernel 仓库
NanoPi M1 Plus的kernel 移植可以参考之前发的帖子 https://harmonyos.51cto.com/posts/9806
目前我移植使用的config是ohos_sunxi_defconfig可以比对sunxi_defconfig来查看差异部分,多开的config如下
移植后的仓库已上传
https://gitee.com/ohos_nanopi_m1_plus/oh-nanopi-m1-plus-kernel
上传好后将devboard_nanopim1plus_tagr.xml中
修改为
这样子就将kernel 的仓库替换好了。
3.2.2、 建立NanoPi M1 Plus的 vendor 仓库
Vendor 的仓库内容暂时没有做修改,但是为了后续修改方便,我拷贝了一份上传到
https://gitee.com/ohos_nanopi_m1_plus/oh-nanopi-m1-plus-vendor
另外因为我们定义的"产品制造商"是“friendlyarm”所以要放到"vendor/friendlyarm"路径下,修改devboard_nanopim1plus_tagr.xml中
为
3.2.3、 建立NanoPi M1 Plus的 device 仓库
device 目录结构是device\{SOC制造商}\{SOC名}
先拷贝一份device\rpi3为device\allwinner
修改如下
device\allwinner\build\ohos.build
device\allwinner\build\BUILD.gn
将device\allwinner\rpi3改为device\allwinner\allwinnerh3,并
将目下make_rpi_sdcard_image.py修改为make_nanopim1plus_sdcard_image.py
将build-rpi3.py修改为device\allwinner\allwinnerh3\build-nanopim1plus.py并修改如下:
将device\allwinner\allwinnerh3\BUILD.gn修改为如下
device\allwinner\allwinnerh3\kernel\build_kernel.py
接着将所有子目录下的BUILD.gn中rpi3_products改为allwinner_products在将其他的“rpi3_”开头的内容修改为“allwinnerh3_”
BUILD.gn还有修改的内容参考如下
device\allwinner\allwinnerh3\kernel\BUILD.gn
device\allwinner\allwinnerh3\hisi_lib\BUILD.gn
另外将
device\allwinner\allwinnerh3\build\vendor\etc\fstab.rpi3
修改为fstab.allwinnerh3
并且device\allwinner\allwinnerh3\kernel\boot这个目录替换为NanoPi M1 Plus的boot 分区
修改后的仓库上传
https://gitee.com/ohos_nanopi_m1_plus/oh-nanopi-m1-plus-device
最后修改
上传好后将devboard_nanopim1plus_tagr.xml中
修改为
3.2.4、 建立NanoPi M1 Plus的 projectpatch 仓库
之一部分主要修改如下
将projectpatch\patches\build\0001-build-support-rpi3.patch移除并在这个目录下新增如下 0001-PATCH-Support-nanopim1plus.patch,这个patch可以修改后commit再用git format-patch
0001-PATCH-Support-nanopim1plus.patch
修改projectpatch\patches\drivers_peripheral\0001-support-rpi3.patch
改为
projectpatch\patches\productdefine_common下删除0001-support-rpi3.patch,新增
0001-PATCH-Support-nanopim1plus.patch
修改后projectpatch上传
https://gitee.com/ohos_nanopi_m1_plus/oh-nanopi-m1-plus-projectpatch
上传好后将devboard_nanopim1plus_tagr.xml中
修改为
3.2.4、 建立NanoPi M1 Plus的 toolchain 和 oh-sd-fuse_h3仓库
toolchain 主要放编译kernel的toolchain仓库路径:https://gitee.com/ohos_nanopi_m1_plus/oh-nanopi-m1-plus-toolchain
oh-sd-fuse_h3 仓库路径 https://gitee.com/ohos_nanopi_m1_plus/oh-sd-fuse_h3
4 NanoPi M1 Plus 项目编译说明
4.1 NanoPi M1 Plus 移植Openharmony项目源码下载
通过repo获取
方式一(推荐)
通过repo + ssh 下载(需注册公钥,请参考码云帮助中心)。
方式二
通过repo + https 下载。
4.2 执行prebuilts
在源码根目录下执行脚本,安装编译器及二进制工具。
4.3 打入补丁解压toolchain
在源码根目录下执行
4.4 编译指令
在源码根目录下执行
4.5 合成SD卡烧录档案
在源码根目录下执行拷贝system.img、vendor.img 、userdata.img、boot.img的动作,然后进入device/allwinner/allwinnerh3/oh-sd-fuse_h3/执行生成烧录档案。
会在device/allwinner/allwinnerh3/oh-sd-fuse_h3/out生成可以烧录到SD 卡的h3-sd-friendlycore.img
以上NanoPi M1 Plus 移植 Openharmony 之建立自己的开发仓库的分享,祝大家新春愉快!
楼主新年码字辛苦啦!
感谢支持~~~~~~