一、前言
rt-thread是国内市场占用率最高的本土操作系统,RP2350是树莓派 pico 2开发板的主控mcu。现已有非常多的基于RP2350的开发板,但软件上很少见跑rt-thread操作系统的。其实,rt-thread从V5.2.2版本开始提供RP2350 bsp,下面摘录了该BSP的README。
Raspberry RP2350
产品介绍

- 高性能树莓派RP2350芯片
- 双核双架构设计,可选择Arm Cortex-M33或Hazard3 RISC-V内核
- 150MHz主频
- 520KB RAM,2MB flash
- 高度集成,超小尺寸
- 尺寸仅25*20.5mm
- 集成锂电池充电管理、电池电压监测
- 引出11个IO
- 低功耗,休眠功耗仅25uA
- 支持C/C++、MicroPython编程
- 单面布局,半孔工艺,可用于贴片生产
程序烧写
-
注意:当前bsp需要在linux环境下才能编译
-
测试环境:Ubuntu21
Step 1: 下载sdk
menuconfig
pkgs --update
Step 2: 编译
scons -c
scons
gcc version >= 6.x.x
Step 3: 烧写
编译会生成uf2文件
按住boot键,再短按重启进入u盘烧写模式,此时将rp2350插入电脑会显示一个u盘

- 复制 rtthread-pico.uf2 文件到u盘中
- 自动重启运行
或者进入boot模式后输入以下命令烧写
picotool load rtthread-pico.uf2
picotool reboot
运行结果
输出的信息如下
\ | /
- RT - Thread Operating System
/ | \ 4.0.3 build Jan 28 2021
2006 - 2021 Copyright by rt-thread team
Hello, RT-Thread!
msh >
支持的外设
| Drive | Support | Remark |
|---|---|---|
| UART | Support | UART0/1 |
| GPIO | Support | 0-29 |
看了这个README,来了一堆问题:
linux环境编译开发怎么弄??环境怎么搭?
RP2350在rt-thread上的性能怎么样?
外设只支持uart和gpio吗?这不能够吧?
怎么用上usb接口?
怎么用上spi接口?
。。。。。。
这些问题有答案吗?
rt-thread出了名的坑多,这些问题只能尝试和填坑了。喜欢尝试新东西的朋友们可以和我一起来折腾。
这篇文章先来解决编译开发环境的建立问题。
二、准备系统环境
README中有这样句话——“注意:当前bsp需要在linux环境下才能编译”。
所以不要在windows下瞎折腾(已经折腾过了,没成!!),我选择了Ubuntu22.04.4作为开发平台。
三、从下载rt-thread源码开始
先得有个git工具,以下命令安装
sudo apt install git
从https://gitee.com/rtthread/rt-thread下载源码
git clone https://gitee.com/rtthread/rt-thread.git --branch v5.2.2 --depth=1
执行后得到rt-thread目录,RP2350 bsp目录是rt-thread/bsp/raspberry-pico/RP2350。
四、建立开发环境
1、安装scons
rt-thread使用scons编译工具(而非make/cmake )编译工程, scons编译工具基于Python。Python在系统上是默认安装的,而scons在linux系统上非默认安装。使用以下命令安装scons
sudo apt install scons
2、安装env环境
README提到的menuconfig和pkgs工具需要建立env环境才能使用,操作步骤
Step1:先要有pip再安装个kconfiglib模块
apt-get install python3-pip
pip install kconfiglib
Step2:进入RP2350 bsp目录,执行scons --menuconfig
会自动下载安装env哦(执行这一步的目标就是为了它...)。

然后进入menuconfig界面,这时直接不保存配置退出就行。
Step3:但这时menuconfig和pkgs命令还是用不了,执行下
source ~/.env/env.sh
env环境才真正建立。注意,这一步只对当前终端有效。可以把这个命令加到~/.bashrc文件末尾,让终端自动加载env。
3、安装arm-none-eabi-gcc
README上说:“gcc version >= 6.x.x”
负责任的说:
“gcc6绝对用不了!”
ubuntu自带的arm-none-eabi-gcc 版本是10.3.1也不建议使用!!
该用哪个版本???
RP2350软件底层基于pico-sdk,最新版本是2.2.0。rt-thread rt2350 bsp用的pico-sdk是基于2.1.1版本改造的。
根据vscode中raspberry-pi-pico插件内的工具版本文件,得用gcc14.2.1以上才能完美适配。

gcc14.2.1可以从以下地址下载
我用了新一点的gcc14.3.1,防止pcio-sdk更新时又要换编译器。
然后将gcc解压到自己喜欢的位置,并在/etc/profile设置PATH变量。
4 下载rt-thread的pico-sdk(raspberrypi-pico-rp2350-sdk-latest)
进入RP2350 bsp目录,执行下
pip install tqdm
pkgs工具需要这个模块哦。
然后
menuconfig -s
选择gitee源(国内用户建议更改,否则用默认的github源的话......自己试试)。

最后
pkgs --update
才能快速下载raspberrypi-pico-rp2350-sdk-latest包。
好了~有了pico-sdk可以建立工程。
五、建立工程
rt-thread完整项目过于庞大,里面包含了各种板子的bsp。(来看看有多大。。。)

如果不嫌弃完整项目庞大可以跳过建立工程这一步。但对于单个板子的应用开发,一般建议生成只包含rt-thread操作系统和对应板子bsp的工程。
进入RP2350 bsp目录,然后执行scons --dist,在bsp目录下会新生成一个dist目录,里面有project目录及其压缩包

一般的项目生成至此为止了,但制作rp2350bsp的兄弟可能没想到过要建立工程。得手动把rt-thread/bsp/raspberry-pico目录的Drivers目录拷到RP2350/dist目录后,project才能正确编译。

dist目录现在是这样的。

现在可以把dist目录移动到自己喜欢的工程目录下(project.zip可以不要),改个名字就叫rt-thread-rp2350吧。
看看现在项目是不是瘦身了很多。

六、编译工程
现在可以编译工程了吧?No。。。这里还有个大坑要填。(PS如果使用ubuntu自带的arm-none-eabi-gcc就没这个问题)
直接scons编译,会出现一个arm-none-eabi-gcc找不到的情况,可后面又能正常编译出.o文件。

rp2350固件其实有两个工程,一个是RP2350的bootloader工程,一个是应用工程。bootloader工程出现了找不到gcc的问题。
需要修改rt-thread-rp2350/project/packages/raspberrypi-pico-rp2350-sdk-latest下的SConstruct文件,把EXEC_PATH设上gcc路径。

然后才可以愉快的编译bootloader工程。

编译后得到可以下载到芯片的rtthtread-pico.uf2固件。
七、固件下载与运行
Step1 使RP2350进入BOOTSEL模式:
对于原版pico2,一般是板子以上电的话先下电,然后按着板子上的boot按键并同时将板子的usb口连上电脑上电,可以实现RP2350进入BOOTSEL模式;
对于pico2的兼容板,一般板子会增加复位键,可以像pico2一样操作;也可以在已通过usb线连主机的板子上,同时按复位键和boot键,然后先放开复位键,再放开boot键,也可实现实现RP2350进入BOOTSEL模式。
RP2350进入BOOTSEL模式后会把自己模拟成名为RP2350的U盘。Ubuntu会自动挂载。

Step2 直接把rtthtread-pico.uf2固件文件拷入该U盘,传输完RP2350会自行复位并运行固件。
以下是默认配置的系统输出。

1091

被折叠的 条评论
为什么被折叠?



