0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何移植OpenHarmony 3.0 到星空派开发板上

OpenHarmony技术社区 来源:51CTO博客 作者:连志安 2021-10-19 09:08 次阅读

9 月 30 日,OpenHarmony 3.0 LTS 版本发布。本文将介绍如何移植 OpenHarmony 3.0 到星空派开发板上。

星空派开发板介绍

星空派(GD)开发板是由旗点科技推出的一款 gd32 开发板,板载 GD32F303ZET6 芯片,可直接替代 STM32F103 和 GD32F103 系列。

它支持 WiFi、4GloRa 等物联通信接口。板载 Flash、eeprom 等,支持 3.2 寸的 TFT-LCD 屏幕。

所有 IO 口均引出,可完整地进行外设开发,包括:JTAG、RTC、I2CUART、SPI、SDIO、EXMC、DACADCUSB、TFT-LCD 等。

ARM 芯片移植轻量系统基础知识

在做芯片移植工作之前,我们需要掌握一点点基础知识。

①适配 LiteOS-M 轻量系统

GD32F303 系列器件是基于 Arm Cortex-M4 处理器的 32 位通用微控制器

所以我们使用的是内核是 LiteOS-M,对应的是 OpenHarmony 轻量系统。

事实上,OpenHarmony 已经做好了 Cortex-M4 核相关的通用移植工作,具体代码可以查看文件夹:“kernelliteos_mkernelarcharm”。

可以看到目前已经支持了 cortex-m4 核。所以内核移植工作基本不需要,减少了我们很多工作量,但是我们仍然需要移植 GD32F303 芯片相关的。

②哈佛架构

GD32F303 采用的是哈佛架构,哈佛架构的特点是代码指令和数据分开存储。对于 GD32F303 而言,代码是存放在片内 flash 上,地址是 0x8000000。

数据(也就是代码中用到的各种变量、内存等)是存放在芯片内部内存 RAM 上,地址是 0x20000000,总共 64K,即 0x10000。

③编译结果分析

对于 GD32F303 而言,编译出来的固件一般是 bin 格式、或者 hex 格式。

通常编译最后的结果会产生 4 种不同的内容,有时我们也称为 4 段:

code:即程序代码部分,该内容由所有程序指令组成,也是代码运行的主体,通常是要烧录到 GD32F303 片内 flash 上。

RO-data:只读数据段,例如我们在程序中所定义的全局常量数据和字符串都位于此处。由于这些数据都是只读,不会改变的,那这些只读的全局就没必要放到内存种,可以直接放到 flash 中,可以节省内存。

RW-data:已初始化的读写数据,程序中定义并且初始化的全局变量和静态变量位于此处。由于内存刚上电后,内存上的数据是未知,所以我们需要事先把这些全局变量、静态变量的初始值先存放到 flash 中,然后上电后,由 CPU 将 flash 中的初始值赋予到内存中的变量中。

ZI-data:未初始化的全局变量或者初始化为0的全局变量,这些变量默认都是 0,我们只需要 CPU 上电后,将这些内存都清零即可。

由上我们可以的出来 2 个结论:

1)我们编译出来的固件要烧录到 GD32F303 的片内 flash,需要由 3 段数据:code、RO-data、RW-data。

2)芯片上电后,GD32F303 需要将 RW-data 的内容复制到内存对应位置,从而保证初始化的全局变量和静态变量的值正确;还要对内存中的 ZI-data 段进行清零操作,最后才能执行 main 函数。

④程序如何启动

对于 ARM Cortex-M 系列的芯片而言,当芯片上电后,ARM 核会将地址为 0x8000000 的数据映射到 0 地址,然后从 0 地址开始读取程序指令。

而 0x8000000 地址是芯片内部 flash 的起始地址。也就是编译生成的固件最终要烧录到的地址。所以我们的固件前面的代码非常重要,它是我们芯片启动后执行的第一条指令。

⑤中断向量表

对于 ARM Cortex-M 系列的芯片而言,0x8000000 地址第一个字节是栈指针,由于栈是从高往下增长的,所以该栈指向芯片最大内存处即可。

接下来从 0x8000000 的第 2 个字节开始是中断向量表,存放着所有中断处理函数指针。

前面 16 个是内核中断,其中第一个中断指针存放的是 Reset_Handler 复位中断处理函数。

芯片一上电、或者复位,都会先从该中断函数开始运行,所以这个函数是我们最重要的,我们需要在该函数中完成 RW-data、ZI-data 数据的操作,同时初始化好芯片时钟、最后进入 main 函数。

移植GD32F303到OpenHarmony 3.0

这里提供移植好的相关代码,下载链接:

https://gitee.com/qidiyun/gd32-f303-for-open-harmony-3.0

①先按官网教程搭建好 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 路径。

②下载上方移植好的代码

将 device 文件夹下的 gd 文件夹复制到 OpenHarmony 3.0 代码的 device 文件夹下。

将 vendor 文件夹下的 gd 文件夹复制到 OpenHarmony 3.0 代码的 vendor 文件夹下。

复制后,OpenHarmony 3.0 的 device 文件夹内容

OpenHarmony 3.0 的 vendor 文件夹内容

③编译

进入 OpenHarmony 3.0 源码根目录,输入 hb set 可以看到由 gd32f303_qidian 的编译选项。选择。

d6b27f3c-3051-11ec-82a8-dac502259ad0.png

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

d6f9374c-3051-11ec-82a8-dac502259ad0.png

有看到 [OHOS INFO] gd32f303_qidian build success 表示编译成功。

编译完成后,可以在“outgd32f303_qidiangd32f303_qidian”文件夹下看到编译结果,其中“gd32f303_qidian_ninjia.hex”就是可以直接烧录到开发板的固件。

d72da7fc-3051-11ec-82a8-dac502259ad0.png

vendor 文件夹

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

d78c17ba-3051-11ec-82a8-dac502259ad0.png

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

d7dbb2c0-3051-11ec-82a8-dac502259ad0.png

device 代码解析:

device 文件夹:该文件夹下是星空派开发板的重要代码部分,其中就有启动文件、main 函数、中断处理等。

d8136aa8-3051-11ec-82a8-dac502259ad0.png

由于移植内容较长,本文重点介绍启动文件、链接脚本。

①启动文件

启动文件 startup_gd32f30x.s 。最重要的是将 RW-data 的内容复制到内存对应位置,从而保证初始化的全局变量和静态变量的值正确;还要对内存中的 ZI-data 段进行清零操作,最后才能执行 main 函数。

代码都是汇编,参考自 st 和 gd 相关启动文件,重要代码如下:

d859761a-3051-11ec-82a8-dac502259ad0.png

②链接脚本

链接脚本是“gd32f30x_qidian.ld”,用于指定code、RO-data、RW-data、ZI-data 如何分布。

首先指定内存地址为 0x20000000,大小为 64K、片上 flash 地址为:0x8000000,大小为 512K,这里跟芯片相关,需要正确修改,否则可能起不来。

d8a211f4-3051-11ec-82a8-dac502259ad0.png

这里跟芯片相关,需要正确修改,否则可能起不来。

③固件生成规则

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

d8ee6c02-3051-11ec-82a8-dac502259ad0.png

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

d949d056-3051-11ec-82a8-dac502259ad0.png

接下来就是 text,也就是代码段,还有 rodata,只读数据段。后面还有其它定义,我们下一篇再细节。至此我们的启动文件、链接脚本中比较关键的部分已经说明完。

liteos-m 内核配置

进入“devicegdgd32f303_qidianliteos_m”文件夹,可以看到有这个文件“config.gni”,该文件用于配置 liteos-m 内核。

其中比较重要部分是指定我们的处理器架构和交叉编译工具链,如下:

d9a674fa-3051-11ec-82a8-dac502259ad0.png

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

下面还配置了相关宏定义和 gd 标准库头文件路径,需要大家修改。

da00f45c-3051-11ec-82a8-dac502259ad0.png

好了,初步移植要点讲完了,下一篇文章讲 OpenHarmony 内核配置文件、main 函数启动后如何进入鸿蒙轻量内核~

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6002

    文章

    43990

    浏览量

    621246
  • 操作系统
    +关注

    关注

    37

    文章

    6293

    浏览量

    121921
  • HarmonyOS
    +关注

    关注

    79

    文章

    1864

    浏览量

    29278
  • OpenHarmony
    +关注

    关注

    23

    文章

    3328

    浏览量

    15172

原文标题:OpenHarmony 3.0移植到ARM单片机

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    飞腾开发板评测获奖名单公布!!!

    恭喜以上小伙伴!经过飞腾专家评选,前三名小伙伴可保留飞腾开发板,其余小伙伴需退回开发板,有问题请微信联系工作人员(微信号:elecfans123) 飞腾
    发表于 01-30 17:02

    Shield Buddy TC375开发板是否支持将经典AUTOSAR堆栈(COMM,DIAG)移植开发板

    Shield Buddy TC375开发板是否支持将经典 AUTOSAR 堆栈(COMM,DIAG)移植开发板? 它适用于 MCAL
    发表于 01-30 08:30

    【飞腾4G版免费试用】飞腾4G版开发板套装测试及环境搭建

    先简单介绍一下这款飞腾4G版开发板套装; 飞腾是由中电港萤火工场研发的一款面向行业工程师、学生和爱好者的开源硬件。主板处理器采用飞腾嵌入式四核处理器,兼容ARM V8架构,包含2个FTC664核
    发表于 01-22 00:47

    【飞腾4G版免费试用】来更多的了解飞腾4G版开发板

    以及优刻谷边缘物联网关等产品。 值得一提的是,飞腾还公布了飞腾“种子计划”,该计划将在飞腾派发布一年内,以创新大赛、现场交流会、产品赋能培训会等形式,培育不少于10000名飞腾开发者。 飞腾
    发表于 01-22 00:34

    【飞腾4G版免费试用】飞腾开发板运行Ubuntu系统

    支持国内OpenKylin、OpenHarmony、SylixOS、RT-Thread等国产操作系统。 飞腾4G版开发板运行Ubuntu系统,来自于网络的资料,给大家整
    发表于 01-08 22:40

    【飞腾4G版免费试用】大家来了解飞腾4G版开发板

    OpenHarmony、SylixOS、RT-Thread等国产操作系统。 飞腾4G版开发板是由中电港萤火工场研发的一款面向行业工程师、学生和爱好者的开源硬件。主板处理器采用飞腾嵌入式四核处理器,兼容ARM V8
    发表于 01-02 22:43

    【飞腾4G版免费试用】初步认识飞腾4G版开发板

    这几天收到飞腾 4G 基础套件,给大家做个介绍,让大家可以了解一下这块开发板, 飞腾 4G 基础套件单板+电源+风扇 开源开发板 支持Ubuntu SylixOS OpenKyli
    发表于 01-02 22:23

    OpenHarmony开发板汇总

    前言: 本文章收录社区(dev-board-sig)的开发板,当前收录了部分开发板,后续持续更新中。 企业可以根据自己的项目需求,选择合适的开发板。 如果收录
    发表于 10-19 11:27

    【悟空H3开发板免费体验】2 烧写系统电测试

    卡插入开发板电。通过串口登录开发板。 初始要设置登录密码,连接网络,设置时区。 登录之后就可以查看网络连接了。TF也自动进行了扩容。 后面也可以通过SSH连接开发板
    发表于 10-01 19:20

    【悟空H3开发板免费体验】开箱电体验

    卡片电脑,它可以运行Android 4.4、Ubuntu 和 Debian 等操作系统。悟空开发板使用全志 H3 系统级芯片,同时拥有 256MB/512MB DDR3 内存。 电测试: 找到一根
    发表于 09-30 19:03

    【悟空H3开发板免费体验】悟空H3开发板

    开发板安装了Android 12,运行流畅,能够满足日常使用需求。 开发工具 :悟空H3开发板提供了完善的
    发表于 09-19 10:04

    【悟空H3开发板免费体验】-01-开箱电以及资料分享

    个图片镇楼 这里的悟空开发板和orangepi的软件以及硬件都是兼容的,所以可以参考orangepi来做开发。我们先来上一下开箱图片吧。 悟空的外包装,看起来简单明了。 整个的接
    发表于 09-12 15:16

    移植树莓派到飞腾的教程吗

    公司基于树莓开发板做的产品 希望移植飞腾派上,请大佬指导
    发表于 08-28 10:24

    【CW32饭盒开发板试用体验】+可爱的饭盒

    CW32F030评估 如今推出的CW32饭盒,则无论是包装还是在开发板的设计都向前大大地跨进了一步。 饭盒的塑料盒包装如图2所示,
    发表于 06-01 13:53

    【CW32饭盒开发板试用体验】+初识CW32饭盒开发板

    盼星星,盼月亮,终于收到了CW32饭盒开发板。回想起那天答复参加活动邮件发出去的那一刻,就在期盼。 以前也了解过CW32单片机,这是一款非常优秀的32位单片机。外部资源也丰富。这回的CW32饭盒
    发表于 05-29 15:51