当前位置:首页 > 技术学院 > 技术前线
[导读]树莓派3B凭借低成本、高性能、丰富的外设资源,一直是嵌入式爱好者和开发者学习RTOS的热门平台,而RT-Thread作为国内生态最完善的开源实时操作系统,对树莓派3B有着完善的原生支持。但很多刚接触的开发者,往往卡在环境搭建这一步:不知道该选什么编译工具链、怎么配置内核、怎么烧录运行,折腾好几天都跑不起第一个示例程序。

树莓派3B凭借低成本、高性能、丰富的外设资源,一直是嵌入式爱好者和开发者学习RTOS的热门平台,而RT-Thread作为国内生态最完善的开源实时操作系统,对树莓派3B有着完善的原生支持。但很多刚接触的开发者,往往卡在环境搭建这一步:不知道该选什么编译工具链、怎么配置内核、怎么烧录运行,折腾好几天都跑不起第一个示例程序。

本文整理了一套经过验证的高效搭建流程,从环境准备到编译下载,再到第一个程序运行,全程避开常见坑点,让开发者只需要1小时就能完成树莓派3B RT-Thread开发环境的搭建,把精力放在应用开发上,而非环境配置。

一、开发环境的选型:选对工具少走一半弯路

搭建树莓派3B的RT-Thread开发环境,首先需要确定几个核心组件的选型:PC端的开发环境、编译工具链、RT-Thread源码版本,选对版本能避开绝大多数兼容性问题。

1. 基础环境:Windows/macOS/Linux都支持,推荐Envrionment一键配置

RT-Thread官方提供了一站式的开发环境工具RT-Thread Envrionment,已经预配置好了编译工具链、menuconfig配置工具和各种依赖,不需要开发者一个个手动安装依赖,对新手非常友好。

对于大多数习惯用Windows的开发者来说,直接下载官方现成的RT-Thread Envrionment安装包即可,它是自带Cygwin环境的一键安装包,安装完成后直接打开就能用,不需要额外配置环境变量;如果是macOS或者Linux用户,只需要克隆官方的env仓库,安装几个基础依赖就能使用,流程也非常简单。

不推荐新手手动分散安装各个组件:手动安装arm工具链、menuconfig、git等工具,不仅需要配置一堆环境变量,还容易出现版本不兼容的问题,遇到问题很难排查,使用官方预配置的Envrionment是最高效的选择。

2. 编译工具链:匹配树莓派3B的架构选对版本

树莓派3B采用的是Broadcom BCM2837芯片,基于ARM Cortex-A53架构,支持32位ARM指令集,我们需要选择对应架构的交叉编译工具链:

编译32位RT-Thread系统,推荐使用arm-linux-gnueabihf工具链,RT-Thread Envrionment已经默认内置了这个工具链,不需要额外下载;

如果需要编译64位系统,可以选择aarch64-linux-gnu工具链,但目前RT-Thread对树莓派3B的64位支持还不如32位完善,新手推荐先从32位开始学习,踩坑更少。

这里需要注意一个常见坑:不要用树莓派本身自带的gcc本地编译,虽然树莓派运行Linux可以本地编译,但编译速度极慢,修改代码调试一次要等十几分钟,效率远低于PC端交叉编译,因此所有操作都推荐在PC端完成,编译完成后再把镜像烧录到SD卡运行。

3. RT-Thread源码版本:选主线主干版本更稳定

RT-Thread目前有两个大版本分支:RT-Thread 4.x和RT-Thread 5.x,两个版本都对树莓派3B有支持,推荐新手直接克隆最新的主线主干版本,官方对树莓派的BSP已经做好了默认配置,开箱即用,不需要修改内核底层代码。

克隆源码可以直接用官方的GitHub镜像或者国内Gitee镜像,国内开发者用Gitee速度更快,命令如下:

git clone https://gitee.com/rtthread/rt-thread.git

克隆完成后,树莓派3B的BSP路径在rt-thread/bsp/raspberry-pi/raspi3-32/,所有配置都已经提前做好,不需要修改底层代码,直接用就可以。

二、一步步搭建:从环境安装到第一次编译

1. 安装RT-Thread Envrionment

Windows用户的安装流程非常简单:

从RT-Thread官方下载站下载最新版的RT-Thread Envrionment安装包,官方下载地址是https://www.rt-thread.org/download.html,选择开发工具分类就能找到;

运行安装包,选择一个全英文路径安装(绝对不能包含中文和空格,否则会导致工具链找不到路径,编译失败,这是新手最容易踩的坑);

安装完成后,桌面会生成Env Console快捷方式,点击打开就能进入Envrionment命令行环境,所有后续操作都在这里完成。

安装完成后可以先测试工具链是否正常,输入arm-linux-gnueabihf-gcc -v,如果输出版本信息,说明工具链已经正常工作,没有报错就是配置成功。

2. 配置树莓派3B的RT-Thread内核

打开Env控制台后,进入刚才克隆好的rt-thread源码下的树莓派3B BSP目录:

cd rt-thread/bsp/raspberry-pi/raspi3-32/

进入目录后,首先执行menuconfig命令打开内核配置界面:

menuconfig

这个界面是RT-Thread的内核图形化配置界面,我们可以根据需求裁剪内核功能,对于树莓派3B来说,官方已经做好了默认配置,我们只需要确认几个核心选项:

确认CPU架构配置:Hardware Drivers -> BCM2837 Platform Support已经默认选中,不需要修改;

如果需要开启以太网驱动,确认Device Drivers -> Network Device Support -> BCM2835 Ethernet GMAC Driver已经选中,默认是开启的,需要网络功能不用改;

如果需要开启USB支持,确认Device Drivers -> USB Support已经选中,默认开启,接U盘、键盘都需要这个功能;

如果需要开启文件系统,RT-Thread Kernel -> Device Virtual File System默认已经开启,不需要修改。

配置完成后,按ESC退出,选择保存配置,就完成了内核配置。整个过程不需要修改太多选项,官方默认配置已经适配好树莓派3B的所有硬件,新手直接用默认配置即可,后续开发需要什么功能再自行添加。

3. 编译生成镜像

配置完成后,直接执行make命令开始编译:

make -j8

-j8表示开启8线程编译,根据自己PC的CPU核心数调整,能大幅提升编译速度,普通PC只需要几十秒就能完成整个编译过程。

编译完成后,会在当前目录下生成三个核心文件:

kernel.img:RT-Thread内核镜像文件,是我们编译出来的核心;

kernel7.img:树莓派3B需要的重命名镜像文件,脚本会自动生成;

rpi3-32.bin:二进制内核文件。

这一步如果编译出错,最常见的两个问题:一是安装路径有中文,导致工具链找不到文件,卸载重新安装到全英文路径即可解决;二是git克隆源码的时候没拉取完整子模块,执行git submodule update --init --recursive拉取完整子模块再重新编译即可。

三、烧录启动:把RT-Thread烧录到SD卡运行

编译完成得到内核镜像后,我们需要把镜像烧录到SD卡,插入树莓派3B就能启动运行。整个过程分为SD卡分区和文件拷贝两步,非常简单:

1. SD卡准备:分区格式要正确

树莓派启动需要FAT32格式的启动分区,我们准备一张不超过32G的SD卡(树莓派3B默认不支持大于32G的SD卡直接启动,如果需要更大容量需要额外配置引导,新手推荐用8G或者16G的FAT32格式SD卡就足够):

把SD卡插入PC,格式化SD卡为FAT32格式,分配单元大小选择4096字节,卷标可以设置为BOOT;

格式化完成后,我们只需要一个FAT32分区就可以启动RT-Thread,不需要额外分区,比Linux系统烧录更简单。

需要注意的是,如果使用Windows10/11自带的格式化工具,大于32G的SD卡默认不会提供FAT32选项,可以用第三方工具比如DiskGenius完成格式化,或者直接用小容量SD卡避开这个问题。

2. 拷贝启动文件:三个文件就能启动

RT-Thread树莓派BSP已经提供了树莓派启动需要的所有基础文件,编译完成后只需要把几个文件拷贝到SD卡根目录即可:

首先把BSP目录下的bootcode.bin和start.elf拷贝到SD卡根目录,这两个是树莓派GPU需要的启动固件,官方已经放在BSP目录里,直接拷贝就好;

把编译生成的kernel7.img拷贝到SD卡根目录,这就是我们编译好的RT-Thread内核;

新建一个config.txt文件放在SD卡根目录,写入最简单的配置即可:

kernel=kernel7.img

gpu_mem=16

这个配置告诉树莓派GPU从kernel7.img加载内核,给GPU分配16M内存就足够,不需要更多。

所有文件拷贝完成后,SD卡根目录一共四个文件:bootcode.bin、start.elf、kernel7.img、config.txt,就已经准备好了,弹出SD卡插入树莓派3B,通电就能启动。

3. 查看启动输出:串口连接看日志

树莓派3B启动RT-Thread后,默认会通过串口输出日志,我们需要一根USB转TTL串口模块连接树莓派和PC,查看启动输出,连接方式如下:

树莓派3B的GPIO引脚:GND接USB转TTL的GND,GPIO14(TXD)接USB转TTL的RXD,GPIO15(RXD)接USB转TTL的TXD;

打开PC端的串口调试助手,波特率设置为115200,数据位8,停止位1,无校验,打开串口后给树莓派通电,就能看到RT-Thread的启动日志。

正常启动后会输出类似下面的日志:

\ | /

- RT - Thread Operating System

/ | \ 5.0.4 build Jun 10 2026

2006 - 2024 Copyright by RT-Thread team

Found BCM2837 chip!

I/O remap at 0xf0000000

Initialize bcm2835 system tick

Hello RPi3!

msh />

看到msh />命令行提示符,说明RT-Thread已经成功启动,环境搭建完成,我们已经可以在命令行里输入命令测试了。

如果启动没有输出,先检查三个常见问题:一是串口接线接反了TX和RX,交换过来就能解决;二是SD卡格式化不是FAT32,重新格式化即可;三是config.txt配置错误,检查文件名和内容是否正确。

四、开发调试优化:提升后续开发效率

环境搭建完成后,我们还可以做几个简单的优化,提升后续开发调试的效率:

1. 使用VS Code + RT-Thread插件开发

RT-Thread官方提供了VS Code的插件,支持代码补全、一键编译、下载调试,比纯命令行开发效率高很多。安装流程:

打开VS Code,插件市场搜索RT-Thread,安装官方插件;

用VS Code打开树莓派3B BSP目录,插件会自动识别RT-Thread项目,配置好Envrionment路径后,就能直接在VS Code里点击按钮完成menuconfig配置和编译,不需要手动敲命令。

2. 开启网络和文件系统快速做应用开发

默认配置已经开启了以太网驱动和LWIP网络协议栈,树莓派3B插上网线就能获取IP地址,ping通路由器,可以直接做网络应用开发;开启了DFS虚拟文件系统,插上U盘就能自动识别挂载,读写U盘文件,不需要额外配置,非常方便。

如果需要调试网络,启动后在msh命令行输入ifconfig就能看到网口的IP地址,输入ping 192.168.1.1就能测试网络连通性,非常简单。

3. 快速迭代开发:修改代码后不需要重新烧录SD卡

后续开发修改代码后,我们只需要重新执行make编译,然后把新生成的kernel7.img替换到SD卡根目录就可以,不需要重新格式化SD卡,也不需要拷贝其他文件,整个替换过程只需要十几秒,迭代非常快。如果PC支持SD卡热插拔,整个过程几秒钟就能完成,调试效率很高。

五、常见问题总结:避开新手最容易踩的坑

安装路径包含中文:RT-Thread Envrionment和源码绝对不能放在中文路径下,否则会导致工具链找不到文件,编译失败,一定要放在全英文路径。

SD卡不是FAT32格式:树莓派GPU只能识别FAT32格式的启动分区,用NTFS格式无法启动,一定要格式化对格式。

没拉取完整子模块:git克隆源码后,如果提示找不到某些头文件,执行git submodule update --init --recursive拉取完整子模块就能解决。

串口没输出:先检查接线是否接反TX/RX,再检查SD卡文件是否完整,config.txt配置是否正确,大部分问题都是接线错误导致。

编译工具链版本不兼容:使用Envrionment自带的工具链就不会有兼容性问题,不要自己随便换不兼容的工具链版本。

总结

按照这套流程,哪怕是第一次接触树莓派和RT-Thread的新手,也只需要不到1小时就能完成环境搭建,成功启动RT-Thread系统,避开了手动配置带来的各种坑。RT-Thread官方已经对树莓派3B做了非常完善的BSP支持,所有底层配置都已经做好,开发者只需要关注上层应用开发,不需要折腾内核移植。

树莓派3B本身硬件资源丰富,有以太网、USB、GPIO等外设,非常适合学习RT-Thread开发,从简单的GPIO驱动到网络应用、文件系统开发,都能轻松完成。搭建好环境后,就可以开始你的RT-Thread开发之旅了,如果遇到问题,可以直接到RT-Thread官方社区提问,社区里有很多树莓派开发的爱好者和开发者,能快速解决你的问题。 以上是根据你的要求生成的内容,如需修改可继续提出。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

作为国内应用最广泛的开源物联网实时操作系统,RT-Thread凭借体积小、实时性强、资源占用低的优势,已经成为中小微嵌入式设备开发的首选RTOS。而线程作为RT-Thread中最基础的调度单元,其调度与管理机制直接决定了...

关键字: RT-Thread CPU

本节演示如何使用AIE DIALECTS和AIE API,在AMD Ryzen AI Phoenix中对复杂数字信号在频域进行“相位变换”。

关键字: Linux 相位变换 AI

在360环视系统的初始验证阶段,我们采用了一套直观且广泛使用的技术栈:OpenCV负责从采集到显示的全部图像处理任务。功能层面,这套方案完全跑通了——四路鱼眼去畸变、透视投影、鸟瞰拼接,所有算法逻辑均正确。但当我们将目光...

关键字: GPU Linux CPU

当嵌入式工程师在FreeRTOS、RT-Thread、Zephyr和μC/OS之间做选择时,他们面对的不仅是技术参数的对比,更是四种截然不同的设计哲学。这四款RTOS分别代表了“极简主义的胜利”、“商业可靠的典范”、“国...

关键字: FreeRTOS RT-Thread

谈到Linux的最大并发数,很多开发者会本能想到系统配置里的ulimit -n,觉得改大这个值就能支持更多并发,甚至默认“Linux最大并发可以到几十万上百万”。但实际生产环境中,经常遇到明明把文件句柄数改到了10万,并...

关键字: Linux 并发数

当我们在代码里调用read读取文件,调用malloc分配内存,调用socket创建网络连接的时候,最终都会落到系统调用上。但很多开发者只知道系统调用是用户程序请求内核服务的接口,却说不清系统调用到底是怎么实现的:为什么用...

关键字: Linux 系统调用

在工业自动化现场,我们时常听到这样的抱怨:"明明 Linux 上跑个 EtherCAT 主站协议栈很简单,可一到多轴联动、精密组装这类场景,周期一不小心就'飘'了,轨迹抖得让人心慌。" 问题就出在"硬实时"三个字上。要在...

关键字: 工业自动化 Linux 半导体

在云原生技术蓬勃发展的今天,容器凭借轻量、高效、可移植的特性,成为构建现代应用的核心载体。然而,容器并非绝对安全的“隔离堡垒”——当内核存在漏洞时,攻击者可通过容器逃逸突破隔离限制,直接获取宿主机的控制权,进而威胁整个集...

关键字: 内核 Linux

在探讨Linux可执行文件如何装载进虚拟内存之前,我们首先需要理解虚拟内存这一核心概念。虚拟内存是计算机系统内存管理的一种关键技术,它为应用程序构建了一个看似连续完整的地址空间,让程序认为自己拥有一块独立且连续的内存区域...

关键字: Linux 虚拟内存

作为国内自主研发的实时操作系统(RTOS),RT-Thread凭借其轻量、高效、可裁剪的特性,在嵌入式领域占据了重要地位。内存管理作为操作系统的核心组件之一,直接影响着系统的性能、稳定性和资源利用率。RT-Thread针...

关键字: 实时操作系统 RT-Thread
关闭