关注分享主机优惠活动
国内外VPS云服务器

将OpenHarmony移植到星空ARM芯片 [1]

总结:初始化的读写数据、程序内定义和初始化的全局变量和静态变量都在这里。 现在,我们已经解释了准备移植点。 下面文章介绍了内核配置文件功能启动后如何进入鸿蒙轻量级内核。

9月30日,OpenHarmony 3.0 LTS版本发布。 新版本概述请参见 OpenHarmony 3.0 发布:OpenHarmony 3.0 发布 [ k4]鸿蒙 HarmonyOS 技术社区-鸿蒙官方合作伙伴-51CTO.COM

本文将向您展示如何将 OpenHarmony 3.0 移植到 Starry Sky Pi 开发板。

1. Starry Sky 开发板概述

星空派(GD)开发板是起点中文网发布的一款GD32开发板。 技术。 板上有一颗GD32F303ZET6芯片,可以直接替换STM32F103和GD32F103系列。

支持WiFi、4G、loRa等物联网通信接口。 板载flash、eeprom等支持3.2寸TFT-液晶屏。 所有 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 已经完成了与 Cortex®-M4 内核相关的一般移植工作 I'我正在做。 具体可以在“kernel/liteos_m/kernel/arch/arm”文件夹中查看代码。

可以显示到目前为止,支持 cortex-m4 内核。 因此,基本上不需要内核移植,工作量明显减少,但GD32F303芯片必须移植。

(2)哈佛架构

GD32F303采用哈佛架构,架构代码特性指令及数据是分开存放的。 对于GD32F303,代码存储在片上闪存中,地址为0x8000000。

数据(即代码、内存等中使用的各种变量)存储在芯片内部RAM 上的地址为 0x20000000,总共 64K 或 0x10000。

(3)编译结果分析

对于 GD32F303,编译后的固件通常是 bin 或 hex 格式。 编译的最终结果通常会产生四个不同的内容。 有时这称为 4。部分:

(1) Code:程序代码部分。 代码操作主体由所有程序指令组成,通常被烧录到 GD32F303 片上闪存中。

(2) RO-data:只读数据段。 程序全局常量数据和字符串位于此处。 不需要将这些只读全局变量放入内存中,因为它们的数据是只读的并且不会改变。 可以直接放在flash中,节省内存。

(3) RW-data:程序中定义和初始化的初始化数据 读写数据。静态变量在这里。 由于内存刚上电后内存中的数据是未知的,因此这些全局变量和静态变量的初始值必须提前存储在Flash中。 上电后,CPU将Flash中的初始值分配给内存。 到一个变量中。

(4) ZI-data:未初始化的全局变量或初始化为 0 个全局变量。 这些变量默认都是0。 这些存储器只有在CPU上电后才需要清除。

从上面我们可以得出两个结论:

1) 编译好的固件必须写入GD32F303的片上flash中,这需要三个数据:code、RO- data、RW- data。p>

2)芯片上电后,GD32F303将RW-data的内容复制到内存中相应位置,创建一个初始化的全局数据,必须保证数据值得到反映:变量和静态变量必须正确,并且在运行主函数之前必须清除 ZI-data 段。 p style="margin-left:.0001pt;text-align:left;">3.将GD32F303芯片移植到OpenHarmony3.0

相关移植代码如下代码,下载链接:

GD32F303 for Open Harmony 3.0:GD32F303 for Open Harmony 3.0 作者:连志安 13510979604

(1)首先按照官网教程,在Ubuntu上搭建开发环境。

下载arm交叉编译器:

git 克隆 https://gitee.com/harylee/gcc-arm-none-eabi- 10-2020-q4-major.git,在.bashrc文件中设置交叉编译器环境变量bin目录或在device/st/stm32l4r9i_disco/liteos_m/config.gni文件中设置board_toolchain_path宏。马苏。 交叉编译容器bin路径。

(2) 下载上述移植代码。 这些文件夹是:

将device文件夹下的gd文件夹复制到OpenHarmony3.0代码的device文件夹

将vendor文件夹下的gd文件夹复制到OpenHarmony3.0代码的vendor文件夹

复制后的OpenHarmony3.0设备文件夹内容如下。

OpenHarmony3.0供应商文件夹的内容如下。

(3)编译

OpenHarmony3.0源码Go到代码的根目录并输入“hb set”以查看代码。 由 gd32f303_qidian 编译选项生成。 选择。

输入 hb build -f 开始完整编译:

[OHOS INFO] gd32f303_qidian 如果构建成功,就说明编译成功了。 。

编译完成后会显示在“out/gd32f303_qidian/gd32f303_qidia”中。编译结果会显示在“n”文件夹中,其中的“gd32f303_qidian_ninjia.hex”是可以直接写入开发板的固件。

4. 供应商文件夹

该文件下最重要的文件是“config.json”

内容如下,主要配置相关组件。

4. 设备代码

(1) 设备文件夹:

该文件夹包含Starry Sky Pi开发板的重要代码部分。自动文件、主要函数、中断处理等

由于端口的长度,本文将重点讨论启动文件和链接脚本。

(1) 启动文件

启动文件startup_gd32f30x.s。 最重要的是将RW-data的内容复制到内存中相应的位置,并保证初始化的全局变量和静态变量的值是正确的。 我们还需要清除内存中的ZI-数据段,最后运行main函数。

所有代码都是汇编代码。 请参阅 st 和 gd 的相关启动文件。 重要的代码是:

(2) 链接脚本

链接脚本是“gd32f30x_qidian.ld”指定如何分发代码、RO-数据、RW-数据、ZI-数据。

首先指定内存地址为0x20000000,大小为64K。

片内Flash地址为0x8000000,大小为512K

这是与芯片相关的,必须正确更改,否则可能无法工作。

这个与芯片有关,所以需要正确更改,否则

( 3)固件生成规则。

同时,链接脚本还指定了固件生成规则:

这里只截取了一部分:生成固件开头的isr_vector,可以看到启动文件中存放的是中断向量表。定义

下一步是文本或代码段。

还有一个Rodata,它是只读数据段。

还有其他定义。 我们将在下一篇文章中详细解释。

至此,我们已经介绍了启动文件和链接脚本中更重要的部分。

5. liteos-m 内核配置

进入“device/gd/gd32f303_qidian/liteos_m”文件夹,您可以: 请参阅此文件“config.gni”。

该文件用于配置 liteos-m 内核。

比较重要的部分是指定处理器架构和交叉编译工具链,如下所示。

p >

使用的交叉编译工具链为“arm-none-eabi-”。

下面还设置了gd标准库头文件的相关宏定义和路径,所以更改是必须的。

好吧~~~,备用移植点已结束。 下一篇我们会讲解openharmony内核配置文件,启动main函数后如何进入鸿蒙轻量级内核~~

未经允许不得转载:主机频道 » 将OpenHarmony移植到星空ARM芯片 [1]

评论 抢沙发

评论前必须登录!