电子说
固件编译是一种将源代码转化为可执行文件的过程,其中涉及了多个环节和工具的使用。在这次的学习过程中,我主要了解了设置编译工具链、对代码工程进行配置、关键步骤说明等方面的内容,下面我将结合自己的学习经历和感受,谈谈自己的心得体会。
在深入了解XR806和OpenHarmony的过程中,我领略到了轻量级系统在嵌入式解决方案中的独特地位和潜力。OpenHarmony作为一种通用的轻量级系统,尤其适用于MCU类处理器,如Arm Cortex-M和RISC-V 32位设备。在硬件资源极其有限的情况下,它提供了丰富的功能和工具,如多种轻量级网络协议、轻量级的图形框架,以及丰富的IOT总线读写部件等。这样的系统非常适合于智能家居领域的连接类模组、传感器设备、穿戴类设备等产品的开发。
XR806_OpenHarmony代码的构成部分包括device和vendor两部分。其中,device目录主要包含芯片层驱动,负责承接Harmony系统和芯片驱动库。这部分代码结构清晰,包括适配器、编译脚本、指导文档、动态配置编译环境的脚本、编译工具、例程以及rtos接口层等。而vendor目录则主要包含方案设置,其中,Harmony的主要特点之一是组件的插拔,这是通过vendor/config.json对方案进行裁剪实现的。
获取源码的过程也给我留下了深刻的印象。除了安装码云repo工具,还可以使用pip3安装requests库,并设置镜像源以加快下载速度。这些步骤都展示了在开源社区中获取和使用资源的便捷性。
Device目录主要包括芯片层驱动,负责承接Harmony系统和芯片驱动库。其结构如下:
Vendor目录主要为方案设置,Harmony主要特点之一为组件的插拔,通过vendor/config.json对方案进行裁剪。其结构如下:
获取源码:
安装码云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。这些步骤需要我们认真按照说明进行操作,才能确保固件编译的顺利进行。
对固件编译的过程进行详细的讲解,主要包括以下步骤:
在编译过程中可能会遇到一些异常情况,例如旧的flash分配方案不再使用。此时需要在自动生成的image_auto_cal.cfg文件中覆盖image_wlan_ble.cfg或者image.cfg的内容。
通过这次学习,我深刻认识到了固件编译的复杂性和细节性。在编译过程中,不仅需要选择合适的编译器和编译选项,还需要根据项目需求进行正确的配置和调试。此外,对于出现的问题需要及时进行处理和解决,否则可能会影响整个编译过程的顺利进行。因此,在进行固件编译时,我们需要有充分的准备和耐心,并不断学习和积累经验。
总之,这次学习让我对固件编译有了更深入的了解和认识。通过设置编译工具链、对代码工程进行配置、关键步骤说明等方面的学习,我不仅掌握了固件编译的基本流程和方法,还学会了如何处理和解决编译过程中可能出现的问题。这些知识将对我今后的学习和工作产生积极的影响。
全部0条评论
快来发表一下你的评论吧 !