
兆易创新Cortex-M7 GD32H459适配OpenHarmony轻量系统适配教程 原创
笔者利用国庆假期的时间适配了一款Cortex-M7 的国产厂商兆易创新GD32H459,开源地址:https://gitee.com/GD32H759_OpenHarmony
OpenHarmony 4.1r 轻量系统移植到GD32H759文档
1.学习本文档的意义
1.学习如何移植OpenHarmony轻量系统4.1r到GD32 m7内核GD32H737/GD32H757/GD32H759系列MCU上。
2.本文档移植的具体型号为GD32H759IMT6,采用的开发板是慧勤智远GD32H759IMT6开发板
2.学习OpenHarmony轻量系统开发
1.移植之前必须要先熟悉慧勤智远GD32H759IMT6开发板的使用,了解板子的裸机编程、板子裸机工程的默认调试串口。
2.获取到GD32H759IMT6的底层驱动源代码(Firmware Library)
2.0 熟悉GD32H759IMT6的裸机开发
1.兆易创新提供了官方的开发工具GD32 Embedded Builder,下载地址:https://www.gd32mcu.com/cn/download/0?kw=GD32H7
2.解压直接打开(免安装)
3.新建C工程
4.选择arm工程
5.选择GD32H759系列芯片GD32H759IMT6
6.此时就可以看到GD32H759IMT6的驱动库、ld链接文件和.s文件
7.简单点个灯
8.调试串口,PA9和PA10两个GPIO口
2.1 安装源码对应的hb工具
使用什么版本的OpenHarmony的源码,就安装此版本源码对应的hb工具
3.轻量系统GD32H759IMT6芯片移植案例
3.1 目录规划
GD32H759IMT6基于Cortex-M7
,移植架构采用Board与SoC分离方案,使用arm-none-eabi-gcc
工具链(在轻量系统源码中可以指定编译工具链路径,具体可以查看 https://gitee.com/AT32437_OpenHarmony/arm-gnu-toolchain-12.3.rel1-x86_64-arm-none-eabi)
芯片适配目录规划为:
产品样例目录规划为:
3.2 预编译适配
预编译适配内容就是围绕hb set命令的适配,使工程能够通过该命令设置根目录、单板目录、产品目录、单板公司名等环境变量,为后续适配编译做准备。
具体的预编译适配步骤如下:
1.在vendor\gigadevice\GD32H759IMT6_BOARD\目录下新增config.json文件,用于描述这个产品样例所使用的单板、内核等信息,描述信息可参考如下内容:
2.在device\board\gigadevice_board\gd32h759\liteos_m目录下新增一个config.gni文件,用于描述该产品的编译配置信息,内核配置为m7
3.3 添加GD32H759IMT6驱动库
把原厂的驱动文件放置在device\soc\gigadevice\gd32h7xx\libraries和device\soc\gigadevice\gd32h7xx\liteos_m目录下面,为了消除编译报错需要进行一些修改
1.device/soc/artery/at32f4xx/libraries/drivers/inc/gd32h7xx_timer.h中INVALID修改为GD32H759IMT6_INVALID,规避重定义问题
2.device/soc/artery/at32f4xx/libraries/drivers/src/gd32h7xx_timer.c中INVALID修改为GD32H759IMT6_INVALID,规避重定义问题
3.4 修改.ld文件
GD32H759IMT6是链接脚本gd32h7xx_flash.ld,适配OpenHarmony轻量系统需要做以下修改,具体修改对比请查看GD32H759IMT6适配OpenHarmony轻量系统前后gd32h7xx_flash
1.注释GROUP(libgcc.a libc.a libm.a libnosys.a)
,取消libgcc.a libc.a libm.a libnosys.a的引用
3.5 在config.gni添加编译时需要的cflag和LDFLAGS
1.前面提到了兆易创新提供了开发工具GD32 Embedded Builder,需要从中提取编译时需要添加的编译标志,如下图所示
2.还需要添加MCU宏GD32H7XX
,USE_STDPERIPH_DRIVER
3.6 Cortex-M7的MCU和Cortex-M4适配Liteos-m的不同——fpu适配
适配Cortex-M7的GD32H759IMT6时,需要在config.gni的board_cflags中添加-D__FPU_PRESENT=1U``-D__FPU_USED=1U
,并且需要在gd32h7xx.h中注释掉__FPU_PRESENT。
OpenHarmony轻量系统源码kernel/liteos_m/arch/arm/cortex-m7/gcc/los_dispatch.S中需要同时定义__FPU_PRESENT=1U和__FPU_USED=1U,fpu才能添加进编译
相关issues:https://gitee.com/openharmony/kernel_liteos_m/issues/I4D575?from=project-issue
3.7 修改.s文件,并且LiteOS-M接管外部GD32H759IMT6中断
startup_gd32h7xx.S中继续使用GD32H759IMT6原生的中断处理函数
然后在target_config.h的LOSCFG_PLATFORM_HWI
和LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT
定义为1。表明LiteOS-M接管了GD32H759IMT6的中断
