【4】AT32F437 OpenHarmony轻量系统移植教程(1)

news2024/9/24 3:19:27

开源地址:https://gitee.com/AT32437_OpenHarmony

1.学习本文档的意义

1.学习移植OpenHarmony轻量系统到AT32全系列mcu上,本文档移植的具体型号为AT32F437ZMT7

2.学习OpenHarmony轻量系统开发

2.移植前的准备工作

1.移植之前必须要先熟悉AT-START-F437开发板的使用,了解板子的裸机编程、板子裸机工程的默认调试串口。

2.获取到AT32F437的底层驱动源代码(Firmware Library)

2.0 熟悉AT32F437的裸机开发

1.雅特力提供了官方的开发工具AT32IDE,下载地址:https://www.arterytek.com/cn/product/AT32F437.jsp#Resource

image.png

当然AT32F437也支持了KeilIAR这个两个开发工具,但是这里我们使用AT32IDE就足够了。

2.具体使用AT32IDE开发AT32F437的步骤请参考雅特力提供的使用手册,笔者在创建第一个裸机工程437_led_printf时候发现默认的调试串口是PA9

image.png

3.通过分析裸机工程获取到要移植涉及的at32f437相关文件,这些都是移植需要的文件

image.png

2.1 安装源码对应的hb工具

使用什么版本的OpenHarmony的源码,就安装此版本源码对应的hb工具

前提条件
Linux服务器,Ubuntu16.04及以上64位系统版本。
Python 3.7.4及以上。
源码下载成功。
安装hb
在源码根目录下执行:

python3 -m pip install --user build/hb

执行hb help有相关帮助信息,有打印信息即表示安装成功,当前hb 主要提供了hb set,hb build,hb tool,hb env,hb clean五个选项。卸载方法:

python3 -m pip uninstall ohos-build

3.轻量系统AT32F437芯片移植案例

3.1 目录规划

AT32F437基于Cortex-M4,移植架构采用Board与SoC分离方案,使用arm-none-eabi-gcc工具链(在轻量系统源码中可以指定编译工具链路径,具体可以查看 https://gitee.com/AT32437_OpenHarmony/arm-gnu-toolchain-12.3.rel1-x86_64-arm-none-eabi)

芯片适配目录规划为:

device
├── board              --- 单板厂商目录
│   └── artery_board   --- 单板厂商名字:雅特力
└── soc                --- SoC厂商目录
    └── artery         --- SoC厂商名称
          └── at32f4xx --- SoC Series名

产品样例目录规划为:

vendor
└── artery             --- 开发产品样例厂商目录
    └── AT-START-F437  --- 产品名字:AT-START-F437

3.2 预编译适配

预编译适配内容就是围绕hb set命令的适配,使工程能够通过该命令设置根目录、单板目录、产品目录、单板公司名等环境变量,为后续适配编译做准备。

具体的预编译适配步骤如下:

1.在vendor/artery/AT-START-F437目录下新增config.json文件,用于描述这个产品样例所使用的单板、内核等信息,描述信息可参考如下内容:

{
  "product_name": "AT-START-F437",      --- 用于hb set进行选择时,显示的产品名称
  "ohos_version": "OpenHarmony 4.1",
  "type": "mini",                       --- 构建系统的类型,mini/small/standard
  "version": "3.0",                     --- 构建系统的版本,1.0/2.0/3.0
  "device_company": "artery_board",     --- 单板厂商名,用于编译时找到/device/board/artery_board目录
  "board": "atstartf437",               --- 单板名,用于编译时找到/device/board/artery_board/atstartf437目录
  "kernel_type": "liteos_m",            --- 内核类型,因为OpenHarmony支持多内核,一块单板可能适配了多个内核,所以需要指定某个内核进行编译
  "kernel_version": "3.0.0",            --- 内核版本,一块单板可能适配了多个linux内核版本,所以需要指定某个具体的内核版本进行编译
  "subsystems": [ ]                     --- 选择所需要编译构建的子系统
}

2.在/device/board/artery_board/atstartf437/liteos_m目录下新增一个config.gni文件,用于描述该产品的编译配置信息:


# Kernel type, e.g. "linux", "liteos_a", "liteos_m".
kernel_type = "liteos_m"

# Kernel version.
kernel_version = "3.0.0"

# Board CPU type, e.g. "cortex-a7", "riscv32".
board_cpu = "cortex-m4"

# Board arch, e.g.  "armv7-a", "rv32imac".
board_arch = ""

#######################################################################################################
# 自定义编译工具链的路径
# Toolchain name used for system compiling.
# E.g. gcc-arm-none-eabi, arm-linux-harmonyeabi-gcc, ohos-clang,  riscv32-unknown-elf.
# Note: The default toolchain is "ohos-clang". It's not mandatory if you use the default toolchain.
board_toolchain = "arm-none-eabi-gcc"

#use_board_toolchain = true
# The toolchain path installed, it's not mandatory if you have added toolchain path to your ~/.bashrc.
board_toolchain_path = ""  

# Compiler prefix.
board_toolchain_prefix = "arm-none-eabi-"

# Compiler type, "gcc" or "clang".
board_toolchain_type = "gcc"
#######################################################################################################


# Board related common compile flags.
board_cflags = [               # cflag标志
  "-mcpu=cortex-m4",           
  "-march=armv7e-m",
  "-mthumb",
  "-mfloat-abi=hard",
  "-mfpu=fpv4-sp-d16",
  "-O3",                       # gcc编译优化等级为-O3
  "-fdata-sections",
  "-ffunction-sections",
  "-g",
  "-DTRACE",
  "-DAT_START_F437_V1",        # 厂商提供sdk中说明需要添加的cflags标志
  "-DOS_USE_TRACE_SEMIHOSTING_DEBUG",
  "-DAT32F437ZMT7",            # 厂商提供sdk中说明需要添加的cflags标志
  "-DUSE_STDPERIPH_DRIVER",    # 厂商提供sdk中说明需要添加的cflags标志
  "-DEXTEND_SRAM=FLASH_EOPB0_SRAM_512K",  # 厂商提供sdk中说明需要添加的cflags标志
  "-std=c99",
]

board_cxx_flags = board_cflags

board_asmflags = []

board_ld_flags = [ # 链接选项,与厂商Makefile中的LDFLAGS变量对应。
  "-Xlinker",
  "--gc-sections",# 需要的Linker 配置
  "--specs=nano.specs", # 为了使用printf函数
  "--specs=nosys.specs", # 为了使用printf函数
    "-Wl,--wrap=_calloc_r",
    "-Wl,--wrap=_malloc_r",
    "-Wl,--wrap=_realloc_r",
    "-Wl,--wrap=_reallocf_r",
    "-Wl,--wrap=_free_r",
    "-Wl,--wrap=_memalign_r",
    "-Wl,--wrap=_malloc_usable_size_r",

]

# Board related headfiles search path.
board_include_dirs = [
    "//commonlibrary/utils_lite/include",
]

# Board adapter dir for OHOS components.
board_adapter_dir = ""

# Sysroot path.
board_configed_sysroot = ""

# Board storage type, it used for file system generation.
storage_type = ""
  • board_cpu中指定芯片为cortex-m4系列mcu
  • board_toolchain中指定编译工具链为"arm-none-eabi-gcc"
  • board_cflags中添加编译标志,
    • 需要添加裸机工程的构建目录的makefile中的链接标识-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffunction-sections -g,另外关于链接优化等级可以设置为-O3
      • image.png

    • 还需要从裸机工程.cproject获取板级cflags-DAT_START_F437_V1-DAT32F437ZMT7-DUSE_STDPERIPH_DRIVER-DEXTEND_SRAM=FLASH_EOPB0_SRAM_512K
      • image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2159162.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTTP协议:发展、请求响应、状态码 等

文章目录 HTTP发展历程HTTP请求URL和URIHTTP协议版本HTTP请求方法GET 和 POST 区别HTTP状态码HTTP 请求与响应报文HTTP 请求流程 HTTP 超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在…

SAP-ABAP消息号 AD857

激活表时报错 返回表,找到报错的字段 维护参考表和字段

免费!大厂太卷了,又一款AI对口型神器,让照片开口说话唱歌,吊打阿里EMO?(附保姆级教程)

大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年,也一名 AIGC 爱好者,持续分享更多前沿的「AI 工具」和「AI副业玩法」,欢迎一起交流~(AI资料点文末卡片自取) 之前分享了一款…

【小白向】怎么去除视频水印?HitPaw帮你轻松解决

序言 HitPaw是一款优秀的去除视频水印的工具。 特点:不仅仅能够去除图片、视频里的固定水印,还能去除移动水印。 尤其是它的AI去水印功能,效果非常好。 极简使用教程 下载安装 HitPaw需要在电脑上安装软件才能使用。 支持Windows系统和…

【AIGC】ChatGPT RAG提取文档内容,高效制作PPT、论文

目录 一、理解 RAG 技术 二、利用 ChatGPT 的 RAG 技术提取文档内容 三、高效制作 PPT 四、高效撰写论文 五、最佳实践与建议 六、工具推荐 随着人工智能生成内容(AIGC)的快速发展,利用先进的技术工具如 ChatGPT 的 RAG(Ret…

kismet和war driving具体准备(仅供无线安全学习)

war driving准备 一台笔记本 一个最好是双频的网卡,单频搜集信号少 我自己买的是http://e.tb.cn/h.grI4EmkDLOqQXHG?tkKZ5g3RVeH6f 如果经济条件允许可以去买大功率天线(我买的车载的 大概40db这样子 范围广) http://e.tb.cn/h.grCM0CQ6L…

YOLOv5-水印检测

简介: YOLOv5在YOLOv4算法的基础上做了进一步的改进,检测性能得到进一步的提升。虽然YOLOv5算法并没有与YOLOv4算法进行性能比较与分析,但是YOLOv5在COCO数据集上面的测试效果还是挺不错的。 YOLOv5是一种单阶段目标检测算法,该算…

教材改版难道是假的?!24下半年软考怎么还是用旧版?何时启用新教材?

之前一直有消息说软考有几个科目的教材要改版,导致不少打算报名2024年下半年软考的同学都在担心是否会影响考试…… 但一直到现在都没看到有新教材出版的消息,所以很多人怀疑之前教材改版的消息是不是假的,要不然怎么还在用旧版教材…… 那…

C++11新特性和扩展(1)

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 C11新特性和扩展 收录于专栏 [C进阶学习] 本专栏旨在分享学习C的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1.C11简介 2. 列表初始…

Oracle 数据库安装和配置指南

目录 1. 什么是Oracle数据库? 2. 安装前的准备工作 2.1 硬件要求 2.2 软件要求 2.3 下载Oracle安装包 3. Oracle数据库的安装步骤 3.1 Windows系统安装步骤 3.2 Linux系统安装步骤 4. 配置Oracle数据库 4.1 设置环境变量(Linux) 4.…

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Halo博客平台

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Halo博客平台 Halo博客平台是一款基于Java的开源博客系统,以其简单易用、功能强大、美观大方等特点而受到广泛欢迎,采用了多种先进的技术框架,包括Freemarker模板引擎、Vue.j…

项目总结,路径匹配的业务逻辑

redisHelper.addzset(HitchConstants.STOKE_GEO_ZSET_PREFIX,hitchGeoBo.getTargetID()(乘客ID),stroke.getId()->(司机的ID),getscore(hitchGeoBo); 如果他不这样乘客这里存储司机的ID,我们会发现假如再来一个司机,他是无法获…

通过 LabVIEW 正则表达式读取数值(整数或小数)

在LabVIEW开发中,字符串处理是一个非常常见的需求,尤其是在处理包含复杂格式的数字时。本文通过一个具体的例子来说明如何利用 Match Regular Expression Function 和 Match Pattern Function 读取并解析字符串中的数字,并重点探讨这两个函数…

书生·浦语作业集合

目录: 1. Linux基础知识 2.python基础知识 3.Git基础知识 4.书生大模型全链路开源体系 1.1-Linux基础知识 配置环境后,运行 hello_word.py 在本地终端中进行端口映射 映射成功后,访问 127.0.0.1:7860 1.2-python基础知识 任务…

【Python】生成dataframe的测试样例,用于测试一个或者多个dataframe

我们在处理dataframe测试时,发现,总需要重新构造一个新的dataframe,每次想找个现成的就想抓狂。 所以,为了方便随用随拿,我在这里直接保存一个直接生成dataframe 的方法。 1. 生成一个随机dataframe的方法&#xff1…

2024/9/19 Notes

1. MODULE_IMPORT_NS 当LINUX_KERNEL_CODE > KERNEL_VERSION(5,4,0), linux引入了namespace来控制内核中symbol引用范围。 比如跟USB Storage相关的一些函数,我们可以直接使用EXPORT_SYMBOL,使所有模块可以可用,也可以EXPORT_SYMBOL_NS&…

Leetcode 除自身以外数组的乘积

class Solution {public int[] productExceptSelf(int[] nums) {int length nums.length;//一维数组 answer[]存储最终的结果//首先从左往右记录乘积,暂时存储到一维数组 answer[] 中int[] answer new int[length];//先从左往右, 由于由于第一个元素左边没有元素&…

如何在算家云搭建RVC-WebUI(语音转换)

一、Retrieval-based-Voice-Conversion-WebUI简介 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转…

工业物联网关为工业生产数字化转型赋能-天拓四方

一、引言 在工业4.0的大背景下,工业物联网关成为了制造业转型升级的关键技术之一。它通过连接设备和系统,实现数据的实时采集、处理和传输,从而提升生产效率、降低成本、优化资源配置,并最终推动整个制造业的数字化进程。本文将详…

【AI创作组】工程方向的硕士研究生学习Matlab的路径

1. MATLAB软件概述 1.1 MATLAB发展历程 MATLAB自20世纪70年代诞生以来,已经经历了多次重要的版本更新和功能扩展。 初始版本:MATLAB的前身只是一个简单的交互式矩阵计算器,由Cleve B. Moler博士在1970年代初期开发,目的是为了方便学生和研究人员使用线性代数软件包LINPAC…