在Ubuntu上开发基于先楫MCU的RT-Thread应用指南

1、前言

RT-Thread Env 是 RT-Thread 推出的开发辅助工具,针对基于 RT-Thread 操作系统的项目工程,提供编译构建环境、图形化系统配置 及软件包管理功能。其内置的 menuconfig 提供了简单易用的配置剪裁工具,可对内核、组件和软件包进行自由裁剪,使系统以搭积木的方式进行构建。

先楫新发布的RT-Thread BSP v1.10也支持通过RT-Thread Env 来方便的图形化的配置和裁剪应用、完成编译、生成cmake工程和Segger Embedded Studio工程等操作。

本文从介绍基于Ubuntu的RT-Thread开发环境的搭建开始,结合先楫RT-Thread BSP v1.10的新特性,介绍利用RT-Thread Env如何使用如下工具链来开发RT-Thread应用。

  • gcc

  • zcc

  • Segger Embedded Studio

2、准备开发环境

按照 https://gitee.com/RT-Thread-Mirror/env 提供的步骤依次安装开发环境。

2.1 安装 RT-Thread Env 环境

注意:以下配置环境变量的示例针对的是不熟悉Ubuntu的新手用户,对于熟悉Linux环境变量配置的朋友,可按照自己的习惯来配置,实现同样的效果即可。

1、下载并安装

wget https://gitee.com/RT-Thread-
Mirror/env/raw/master/install_ubuntu.shchmod 777 install_ubuntu.sh./install_ubuntu.sh --gitee
rm install_ubuntu.sh

2、准备环境

在 ~/.bashrc 的最后一行追加

source ~/.env/env.sh

3、注意事项

版本匹配要求:

  • 先楫 RT-Thread BSP v1.10 是基于RT-Threadv5.0.2开发的,必须使用RT-Thread Env v1.5.2来开发。

环境配置问题解决方案:

  • 当遇到 scons --menuconfig 命令异常时,请按以下步骤处理:

    · 检查是否安装了冲突的kconfiglib

pip list | grep kconfiglib

      · 如果已安装(显示版本信息),则执行卸载

pip uninstall kconfiglib

2.1 安装工具链

以下三个工具链,可根据个人的喜好来安装

1、安装gcc工具链

  • 从如下链接下载gcc工具链:

https://github.com/hpmicro/riscv-gnu-toolchain/releases/download/2022.05...

https://gitee.com/hpmicro/riscv-gnu-toolchain/releases/download/2022.05....

  • 解压到指定的目录,如opt/riscv32-unknown-elf-newlib-multilib

  • 添加环境变量

在 ~/.bashrc 的最后一行追加RTT_RISCV_TOOLCHAIN
此处假定工具链被安装/解压到/opt/riscv32-unknown-elf-newlib-multilib

export RTT_RISCV_TOOLCHAIN=/opt/riscv32-unknown-elf-newlib-multilib/bin

2、安装zcc工具链

  • 从兆松科技的官网的如下链接下载 zcc 4.0.0 或 zcc 4.1.1及以上版本的工具链

    https://www.terapines.com/download/zcc

  • 安装到指定目录。

    以当前版本 ZCC-Installer 为例,按如下方式来安装。

chmod 777 ZCC-Installer
sudo ./ZCC-Installer

在弹出的窗口中点击Install,在新界面中选择安装的路径,本文使用默认路径/opt/Terapines/ZCC/4.0.0,继续点击 Install ,等待安装完成并关闭安装窗口。

  • 添加到环境变量

在 ~/.bashrc 的最后一行追加ZCC_TOOLCHAIN_PATH

export ZCC_TOOLCHAIN_PATH=/opt/Terapines/ZCC/4.0.0/bin

3、安装Segger Embedded Studio

  • 从Segger官方网点如下链接下载Segger Embedded Studio的Linux版本。

  • 解压并安装。

    以8.24版本为例,解压到segger_embedded_studio_v824_linux_x64,通过命令行进入该文件夹,并通过如下命令安装:

cd segger_embedded_studio_v824_linux_x64 
sudo ./install_segger_embedded_studio

按默认路径安装到/opt/SEGGER/segger_embedded_studio_8.24

  • 设置环境变量

    在 ~/.bashrc 的最后一行追加SEGGER_TOOLCHAIN_PATH

export SEGGER_TOOLCHAIN_PATH=/opt/SEGGER/segger_embedded_studio_8.24/bin

4、安装 OpenOCD

export PATH=$PATH:/opt/hpm-openocd/bin

5、安装 JLink 和 Ozone

3、项目开发流程

基于先楫的RT-Thread BSP包,典型的开发模式如下所示:

准备工作

  • 下载相近开发板的BSP包

  • 导出相近例程

工程的配置

  • 使用RT-Thread Env完成工程相应的配置

  • 按scons的语法管理新添加的代码

  • 指定编译器、ARCH、ABI等信息

工程生成、编译和调试

  • 使用scons编译,或者生成对应的cmake或Segger Embedded Studio工程

  • 使用openocd + gdb调试,或使用ozone + jlink调试

3.1 准备工作

第一步: 下载 先楫BSP 包

用户朋友可通过如下链接分别下载先楫官方开发板的BSP包。

开发板

仓库链接

hpm6750evkmini

http://git-mirror.rt-thread.com:12236/hpmicro/rtt-bsp-hpm6750evkmini/arc...

hpm6750evk2

http://git-mirror.rt-thread.com:12236/hpmicro/rtt-bsp-hpm6750evk2/archiv...

hpm6300evk

http://git-mirror.rt-thread.com:12236/hpmicro/rtt-bsp-hpm6300evk/archive...

hpm6200evk

http://git-mirror.rt-thread.com:12236/hpmicro/rtt-bsp-hpm6200evk/archive...

hpm5300evk

http://git-mirror.rt-thread.com:12236/hpmicro/rtt-bsp-hpm5300evk/archive...

hpm5301evklite

http://git-mirror.rt-thread.com:12236/hpmicro/rtt-bsp-hpm5301evklite/arc...

hpm6800evk

http://git-mirror.rt-thread.com:12236/hpmicro/rtt-bsp-hpm6800evk/archive...

hpm6e00evk

http://git-mirror.rt-thread.com:12236/hpmicro/rtt-bsp-hpm6e00evk/archive...

hpm6p00evk

http://git-mirror.rt-thread.com:12236/hpmicro/rtt-bsp-hpm6p00evk/archive...

hpm5e00evk

http://git-mirror.rt-thread.com:12236/hpmicro/rtt-bsp-hpm5e00evk/archive...


第二步:导出例程

解压下载的BSP包,在包的根目录,先楫提供了bsp_utils.py脚本,该脚本的简要用法如下:

python bsp_utils.py -l 查看BSP包支持的例程列表
python bsp_utils.py -e -p=<project_name> -o=<absolute_output_path> 来导出指定的例程。若project_name 的值为all,则导出所有支持的例程。

我们以blink_led例程为例,假定当前用户的目录为/home/builder/,可通过如下命令导出该例程。

python ./bsp_utils.py -e -p=blink_led -o=/home/builder

执行完该操作后,可在/home/builder/blink_led目录下找到该例程。

3.2 配置工程

第一步: 基于 RT-Thread Env 配置工程

1、通过menuconfig配置工程
基于上述教程,以blink_led 例程为例,通过命令行进入/home/builder/blink_led目录。

通过scons --menuconfig 打开kconfig相关的配置,完成如下操作:

  • 板级配置

  • 内核配置

  • 组件配置

  • 在线包配置

  • 其他用户添加的配置等

操作示例如下图所示:

1.png

该操作和基于RT-Thread Studio中的图形化操作很类似。

关于kconfig相关的背景知识,请自行通过deepseek或者搜索引擎检索。

关于 RT-Thread Env 的详细用法,请参考如下链接:

2、通过scons脚本组织工程

详见

https://www.rt-thread.org/document/site/#/development-tools/build-config...

第二步:按需更改工具链参数

1、配置RV_ARCH和RV_ABI (不适用于Segger Embedded Studio工程)

  • 用户可在工程目录下的命令行执行如下操作完成ABI的配置,若无该操作,默认值为RV_ABI=ilp32。

export RV_ABI=<rv_abi>

用户可在工程目录下的命令行执行如下操作完成ARCH的配置,若无该操作,默认值为RV_ARCH=rv32imac。

export RV_ARCH=<rv_arch>

支持的RV_ARCH和RV_ABI的组合有:

rv32imac + ilp32

rv32imafc + ilp32f

rv32gc + ilp32d

2、配置 RTT_BUILD_TYPE(不适用于Segger Embedded Studio工程)

  • 用户可通过如下操作完成RTT_BUILD_TYPE的配置,若无该操作,默认值为flash_debug。

export RTT_BUILD_TYPE=<build_type>

通常支持的RTT_BUILD_TYPE选项为:

  • ram_debug

  • ram_release

  • flash_debug

  • flash_relase

  • flash_hybrid_debug (仅限HPM5E00系列)

  • flash_hybrid_release (仅限HPM5E00系列)

详细支持的选项可从rtconfig.py中查询。

3、切换工具链
用户可以工程目录下使用如下操作完成工具链的切换,或无该操作,默认工具链为gcc。

export RTT_TOOLCHAIN_PLATFORM=<platform>

其中,platform支持的选项为:

  • gcc

  • zcc

  • segger

3.3 第三步:生成、编译和调试工程

使用scons脚本,用户可以直接在命令行完成编译等高级功能。

1、使用scons 直接编译生成可执行文件

scons -jN

其中:N代表线程数。

对于各位命令行大神,可以使用openocd + riscv32-unknown-elf-gdb 实现基于命令行的调试。
手握JLink的玩家,也可使用JLink + Ozone来调试。

2、生成cmake 工程

当使用gcc或zcc工具链时,可通过如下命令生成cmake工程。

scons --target=cmake

之后,大家可使用自己熟悉的支持cmake的IDE(如vscode, CLion等) 来打开cmake工程完成后续的开发和调试。

注意:
在该模式下,如果需要重新更改RT-Thread相关的配置,可能需要反复执行如下操作:

scons --menuconfigscons --target=cmake

3、生成Segger Embedded Studio工程

当使用segger工具链时,可通过如下命令生成Segger Embedded Studio工程。

export RTT_TOOLCHAIN_PLATFORM=segger # Ensure this system variable is correct    
scons --target=ses

注意:在该模式下,如果需要重新更改RT-Thread相关的配置,可能需要反复执行如下操作:

scons --menuconfigscons --target=cmake

在生成工程后,可使用如下命令打开工程

xdg-open project.emProject

2.png

注:默认生成的project.emProject中的RISC-V ISA和RISC-V ABI的组合为rv32imac及ilp32,如下图所示。用户可根据需要自己调整为相应的配置。

3.png

之后,可通过Segger Embedded Studio实现开发和调试。调试的体验和使用hpm_sdk一致。

4、典型示例

4.1 使用 rv32imac+ilp32 + gcc基于scons完成代码的编译

按如下示例脚本所示:

export RTT_TOOLCHAIN_PLATFORM=gcc
export RV_ARCH=rv32imac
export RV_ABI=ilp32 
scons -j16

4.2 使用 rv32gc+ilp32d + gcc基于scons完成cmake工程的生成

按如下示例脚本所示:

export RTT_TOOLCHAIN_PLATFORM=gcc
export RV_ARCH=rv32gc
export RV_ABI=ilp32d 
scons --target=cmake

4.3 使用 rv32imafc+ilp32f + zcc基于scons完成代码的编译

按如下示例脚本所示:

export RTT_TOOLCHAIN_PLATFORM=zcc
export RV_ARCH=rv32imafc
export RV_ABI=ilp32f 
scons -j16

4.4 使用 rv32gc+ilp32d + zcc基于scons完成cmake工程的生成

按如下示例脚本所示:

export RTT_TOOLCHAIN_PLATFORM=zcc
export RV_ARCH=rv32gc
export RV_ABI=ilp32d 
scons --target=cmake

4、小结

本文提供了在Ubuntu上开发基于先楫MCU的RT-Thread应用的简要流程,实际体验下来,整个过程和体验还是简单和直观的。大家如果在使用过程中有任何疑问和建议,欢迎在公众号下留言,或者在相应的github仓库提issue。

来源:先楫半导体

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。