
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及以上版本的工具链
安装到指定目录。
以当前版本 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
按如下链接申请License(非商用可跳过这一步)
4、安装 OpenOCD
从如下链接下载OpenOCD,并解压到指定目录,如/opt/hpm-openocd
https://github.com/hpmicro/riscv-openocd/releases/download/hpm_xpi_v0.3.... 设置环境变量在 ~/.bashrc 的最后一行追加:
export PATH=$PATH:/opt/hpm-openocd/bin
对于熟悉openocd编译的用户,也可自行基于https://github.com/hpmicro/riscv-openocd仓库的tag hpm_xpi_v0.3.0
完成克隆和编译安装,在此不作展开。
5、安装 JLink 和 Ozone
该步骤为可选操作, 若手上没有JLink硬件,可跳过。
从如下链接下载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包。
第二步:导出例程
解压下载的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相关的配置,完成如下操作:
板级配置
内核配置
组件配置
在线包配置
其他用户添加的配置等
操作示例如下图所示:
该操作和基于RT-Thread Studio中的图形化操作很类似。
关于kconfig相关的背景知识,请自行通过deepseek或者搜索引擎检索。
关于 RT-Thread Env 的详细用法,请参考如下链接:
https://github.com/RT-Thread/rt-thread/blob/master/documentation/env/env...
https://www.rt-thread.org/document/site/#/development-tools/env/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
注:默认生成的project.emProject中的RISC-V ISA和RISC-V ABI的组合为rv32imac及ilp32,如下图所示。用户可根据需要自己调整为相应的配置。
之后,可通过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)。