**1.星空派开发板介绍 **
星空派(GD)开发板是由旗点科技推出的一款GD32开发板,板载GD32F303ZET6芯片,可直接替代STM32F103和GD32F103系列。
支持WiFi、4G、loRa等物联通信接口。板载Flash、eeprom等,支持3.2寸的TFT-LCD屏幕。所有IO口均引出,可完整地进行外设开发,包括:JTAG、RTC、I2C、 UART、SPI、SDIO、EXMC、DAC、ADC、USB、TFT-LCD等。

**2.ARM芯片移植轻量系统基础知识 **
在做移植工作之前,我们需要掌握一点基础知识。
**(1)轻量级LiteOS-M **
GD32F303系列器件是基于Arm® Cortex®-M4处理器的32位控制器。所以我们使用通用内核是LiteOS-M,即OpenHarmony轻量系统。
OpenHarmony,OpenHarmony已经实现了Cortex®-M4核相关的通用移植工作,具体代码可以查看文件夹:“kernelliteos_mkernelarcharm”

可以看到目前已经支持cortex-m4核。所以我们内核相关的移植工作基本没有必要,但是减少了我们很多工作量,仍然需要移植GD32F303芯片的。
**(2)哈佛架构 **
GD32F303采用芯片架构,架构的特点是代码指令和数据哈佛的话,代码是存储在片内闪存上,对于单独的地址是0x8000000。
(也就是代码即在内的各种内存上的变量)是数据存放在芯片上,是0x0000000,地址60000000000000000000000000000000000000000000000000000000000000000000000000000000000000

**(3)编译结果分析 **
对于GD32F303而言,编译出来的一般是bin格式、或者十六进制格式。通常编译最后的结果会产生4种不同的内容,有时我们也叫4段:
1)代码:即程序代码部分,其内容由所有程序指令组成,也是代码运行的主体,通常是要烧录到GD32F303片内flash上。
2)这些RO,我们在程序中所定义的数据——例如数据不会改变数据和字符串。没有必要的另一种选择,可以直接选择闪存中的一种,可以计算。
3)RW 初始化的初始化和安装数据,因为程序中定义的电后参数:已将参数和参数用于此处。 、最终变量的初始值先上电到flash中后,由CPU中的初始值,然后将内存中的内存变量中的值。
4)这些变量初始化为初始化,或者我为0的CPU上电后清零数据,我们需要初始化这些参数,将内存都只允许零。
由上我们可以得出2个结论:
1)我们编译出来的闪存片内要烧录到GD32F303的flash,需要3段数据:code-data、RW-data

2)芯片操作上,需要将 GD32F303 复制到内存位置确保确保初始化后的数据正确值和属性的正确段内容,并最终对内存中的 ZI 数据进行,最终执行主要功能。
**(4)程序如何启动 **
ARM Cortex的芯片芯片上电后,ARM核-M0芯片系列开始地址为0x80000的数据映射到0地址,然后从0读取程序指令。
它是我们芯片启动后执行的第一条指令,它是我们芯片启动后执行的第一条指令。
**(5)横断表 **
对于 ARM Cortex-M 系列的芯片而言,0x8000字节000地址的第一个是栈指针,由于是从高往下增长的,所以该栈是最大的内存地址。
0x8000000000000000000000000000000000000000000000000000000000000000000000000000000000000的,存放表,存放向量表所有所有中断中断中断处理处理函数函数前面前面前面前面前面前面前面前面前面前面前面前面前面前面指针指针个个个个个个个中断中断中断该、换中操作,先从该函数开始运行,所以这个函数我们最重要的,我们需要在函数中完成 RW-data、数据数据的,同时初始化好芯片、最后进入主函数。

**3.移植GD32F303芯片到OpenHarmony3.0 **
这里提供移植相关的好代码,下载链接:
https://gitee.com/qidiyun/gd32-f303-for-open-harmony-3.0
(1)先按官网开发良好的Ubuntu环境。
下载arm交叉编译器:
git clone https://gitee.com/harylee/gcc-arm-none-eabi-10-2020-q4-major.git ,将交叉编译环境变量bin目录配置到.bashrc文件中或者配置device/st/ stm32l4r9i_disco/liteos_m/config.gni文件中board_toolchain_path宏为交叉编译器bin路径。
**(2)下载好的代码,文件夹如下: **

将设备文件夹下的gd文件夹复制到OpenHarmony3.0代码的设备文件夹下
将vend或文件夹下的gd文件夹复制到OpenHarmony3.0的设备文件夹下
复制后,OpenHarmony3.0的设备文件夹内容如下:

OpenHarmony3.0的vendor文件夹内容如下:

(3)编译
进入OpenHarmony3.0进入源码目录,输入hb set 可以看到由gd32f303_qidian的编译选项。选择。

输入 hb build -f 开始全编译:

有看到 [OHOS INFO] gd32f303_qidian build success 表示编译成功。
编译完成后,“gd32f303_qidiangd32f303_qidian”文件夹下查看编译结果,其中“gd32f303_qidian_ninjia.hex”可以直接记录到开发板的开发板上。

4.供应商文件夹
该文件下最重要的文件是“config.json”

内如,主要是配置相关组件:

4.设备
文件夹:设备(
下是星空派开发代码部分),其中有起始文件、主函数、中断处理等。

本文重点介绍图表内容、图表链接。
**(1)启动文件 **
启动文件startup_g3220x.s。最后执行主要功能。
代码编译,都是自st和gd相关的参考启动文件,重要代码如下:

**(2)脚本链接 **
链接脚本是“gd32f30x_qidian.ld”,用于指定code、RO-data、RW-data、ZI-data如何分发。
首先指定内存地址为0x20000000,大小为64K、
片上flash地址为:0x8000000,大小为512K
这里跟芯片相关,需要正确修改,否则可能起不来。

这里跟芯片相关,需要正确修改,否则可能起不来。
(3)收费生成规则。
脚本也指定了调用的链接规则:

这里只有截取的部分可以生成文件中定义的最开始存放的文件,就是这个向量,在启动的时候,在启动中:

就是文字,也就是代码段
还有rodata,数据世界。
后面还有其他定义,我们下一个细节。
至此我们的启动文件、链接脚本中比较关键的部分说明完毕。
**5. liteos-m内核配置 **
进入“devicegdgd32f303_qidianliteos_m”文件夹,可以看到有这个文件“config.gni”
该文件配置用于 liteos-m 内核。
其中重要比较部分是指定我们的处理器架构和交叉编译工具链,如下:

我们使用的交叉编译工具链是“arm-none-eabi-”
下面还配置了宏定义和gd标准库头文件的路径,需要大家相关。

原作者:连志安