【XR806开发板试用】实战OpenHarmony固件编译

电子说

1.3w人已加入

描述

固件编译是一种将源代码转化为可执行文件的过程,其中涉及了多个环节和工具的使用。在这次的学习过程中,我主要了解了设置编译工具链、对代码工程进行配置、关键步骤说明等方面的内容,下面我将结合自己的学习经历和感受,谈谈自己的心得体会。

在深入了解XR806和OpenHarmony的过程中,我领略到了轻量级系统在嵌入式解决方案中的独特地位和潜力。OpenHarmony作为一种通用的轻量级系统,尤其适用于MCU类处理器,如Arm Cortex-M和RISC-V 32位设备。在硬件资源极其有限的情况下,它提供了丰富的功能和工具,如多种轻量级网络协议、轻量级的图形框架,以及丰富的IOT总线读写部件等。这样的系统非常适合于智能家居领域的连接类模组、传感器设备、穿戴类设备等产品的开发。

OpenHarmony

XR806_OpenHarmony代码的构成部分包括device和vendor两部分。其中,device目录主要包含芯片层驱动,负责承接Harmony系统和芯片驱动库。这部分代码结构清晰,包括适配器、编译脚本、指导文档、动态配置编译环境的脚本、编译工具、例程以及rtos接口层等。而vendor目录则主要包含方案设置,其中,Harmony的主要特点之一是组件的插拔,这是通过vendor/config.json对方案进行裁剪实现的。

获取源码的过程也给我留下了深刻的印象。除了安装码云repo工具,还可以使用pip3安装requests库,并设置镜像源以加快下载速度。这些步骤都展示了在开源社区中获取和使用资源的便捷性。

Device目录主要包括芯片层驱动,负责承接Harmony系统和芯片驱动库。其结构如下:

  • adapter: Harmony接口适配
  • BUILD.gn: gn编译脚本
  • build.sh: 编译脚本,用于搭桥Harmony与原生SDK
  • doc: 指导文档
  • libcopy.py: 编译脚本,用于动态配置编译环境
  • liteos_m: 编译工具,编译选项设置
  • ohosdemo: 例程
  • os: rtos接口层,通过接口层方便后续移植其他rtos
  • target_config.h: liteos系统裁剪
  • xr_skylark: 芯片原生驱动

Vendor目录主要为方案设置,Harmony主要特点之一为组件的插拔,通过vendor/config.json对方案进行裁剪。其结构如下:

  • BUILD.gn: 编译脚本
  • config.json: 方案裁剪
  • hals: 系统信息

获取源码:
安装码云repo工具,可以执行如下命令:

curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo 
#如果没有权限,可下载至其他目录,并将其配置到环境变量中
chmod a+x /usr/local/bin/repo
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests

设置镜像源(可选):

vim ~/.bashrc
#在文件的最后输入以下内容
export PATH=~/bin:$PATH
export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/
#设置完成后重启shell
#设置为清华镜像源后,下载源码时如果提示server certificate verification failed,输入export GIT_SSL_NO_VERIFY=1后重新下载即可。

下载源码:

# OpenHarmony通用于各种系统,导致整个系统文件比较多,XR806把部分不必要的代码仓在xml中删除了。
# 如果想要减少或增加需要下载的代码仓,请把manifest仓fork到本地后,自行裁剪。
repo init -u https://gitee.com/awol/open-harmony_-xr806_manifest.git -b master --no-repo-verify -m devboard_xr806.xml 
repo sync -c 
repo forall -c 'git lfs pull'

首先,设置编译工具链是进行固件编译的前提条件。在XR806_SDK中,推荐使用gcc-arm-none-eabi-10-2020-q4-major进行编译。为了方便后续的操作,我们需要将编译工具链下载并保存到“~/tools”目录下。如果该目录不存在,我们还需要先创建它。这个环节让我明白了在编译之前,一定要先确保编译工具链的正确安装和配置。

使用文本格式来模拟鱼骨图的结构。

XR806支持的OpenHarmony系统

├── 轻量系统(Mini System)
│ ├── 硬件资源有限
│ ├── 支持最小内存:128KiB
│ ├── 提供轻量级网络协议
│ ├── 提供轻量级图形框架
│ ├── 提供丰富的IOT总线读写部件
│ └── 可用于智能家居领域的连接类模组、传感器设备、穿戴类设备等
├── XR806_OpenHarmony代码
│ ├── device目录:芯片层驱动,承接Harmony系统和芯片驱动库
│ │ ├── adapter:Harmony接口适配
│ │ ├── BUILD.gn:gn编译脚本
│ │ ├── build.sh:编译脚本,用于搭桥Harmony与原生SDK
│ │ ├── doc:指导文档
│ │ ├── libcopy.py:编译脚本,用于动态配置编译环境
│ │ ├── liteos_m:编译工具,编译选项设置
│ │ ├── ohosdemo:例程
│ │ ├── os:rtos接口层,方便后续移植其他rtos
│ │ ├── target_config.h:liteos系统裁剪
│ │ └── xr_skylark:芯片原生驱动
│ └── vendor目录:方案设置,通过vendor/config.json对方案进行裁剪
└── 其他操作:获取源码、固件编译等步骤

其次,OpenHarmony的编译分为两部分,一部分是编译OpenHarmony的系统库,另一部分是芯片驱动的编译,也叫原生库。这两部分分别使用gn脚本和makefile脚本进行编译。在配置代码工程时,我们需要进入原生SDK目录,并复制配置文件。然后通过图形化界面配置生成静态库和全局头文件。这个过程需要仔细认真,避免出现错误导致编译失败。

最后,关键步骤说明中涉及了一些命令和操作,这些步骤需要按照一定的顺序进行,否则可能会遇到问题。比如在执行make menuconfig命令后,我们需要获取目录下的.config文件并生成图形化配置界面;在hb set命令后,我们需要选择指定的工程并确认;在hb build -f命令后,如果出现了异常提示,可能是因为旧的flash分配方案不再使用,我们需要自动生成文件image_auto_cal.cfg并覆盖image_wlan_ble.cfg或者image.cfg。这些步骤需要我们认真按照说明进行操作,才能确保固件编译的顺利进行。

对固件编译的过程进行详细的讲解,主要包括以下步骤:

  1. 设置编译工具链 :首先需要下载适合编译的gcc编译器,并且推荐使用gcc-arm-none-eabi-10-2020-q4-major版本。下载完成后保存在“~/tools”目录下。
  2. 编译OpenHarmony的系统库 :OpenHarmony的编译分为两部分,一部分是编译OpenHarmony的系统库,这个过程使用gn脚本进行。在OpenHarmony的编译工具配置文件(device/xradio/xr806/liteos_m/config.gni)中设置编译器前缀(board_toolchain_prefix)和编译器类型(board_toolchain_type)。
  3. 编译芯片驱动的原生库 :另一部分是芯片驱动的编译,也叫原生库,这个过程使用makefile脚本进行。原生库的编译工具在device/xradio/xr806/xr_skylark/gcc.mk设置。
  4. 对代码工程进行配置 :首次编译工程,需要对原生库进行配置,否则无法编译通过。配置步骤包括进入原生SDK目录,复制配置文件,通过图形化界面配置,清除旧配置,根据配置生成静态库和全局头文件。
  5. 选择工程并编译 :选择指定的工程进行编译。常见的编译命令包括hb set用于选择工程,hb build -f用于编译。

在编译过程中可能会遇到一些异常情况,例如旧的flash分配方案不再使用。此时需要在自动生成的image_auto_cal.cfg文件中覆盖image_wlan_ble.cfg或者image.cfg的内容。

通过这次学习,我深刻认识到了固件编译的复杂性和细节性。在编译过程中,不仅需要选择合适的编译器和编译选项,还需要根据项目需求进行正确的配置和调试。此外,对于出现的问题需要及时进行处理和解决,否则可能会影响整个编译过程的顺利进行。因此,在进行固件编译时,我们需要有充分的准备和耐心,并不断学习和积累经验。

总之,这次学习让我对固件编译有了更深入的了解和认识。通过设置编译工具链、对代码工程进行配置、关键步骤说明等方面的学习,我不仅掌握了固件编译的基本流程和方法,还学会了如何处理和解决编译过程中可能出现的问题。这些知识将对我今后的学习和工作产生积极的影响。

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分