实时操作系统-RT-Thread
2010-12-02 10:19:40 阿炯

实时线程操作系统(RT-Thread)是一款主要由中国开源社区主导开发的开源实时操作系统(许可证GPLv2)。实时线程操作系统不仅仅是一个单一的实时操作系统内核,它也是一个完整的应用系统,包含了实时、嵌入式系统相关的各个组件:TCP/IP协议栈,文件系统,libc接口,图形用户界面等。大多数源代码都基于 GNU GPL 许可协议下发布。

RT-Thread Studio 是一站式的 RT-Thread 开发工具,通过简单易用的图形化配置系统以及丰富的软件包和组件资源,让物联网开发变得简单和高效。主要包括工程创建和管理、代码编辑、SDK管理、RT-Thread配置、构建配置、调试配置、程序下载和调试等功能,结合图形化配置系统以及软件包和组件资源,减少重复工作,提高开发效率。


主要特征

简洁的内核对象模型

* 基于优先级的全抢占式调度:
o 支持相同优先级线程
o 相同优先级线程采用时间片轮转调度
* 丰富的同步、任务间通信机制
o 信号量、互斥锁
o 邮箱
o 消息队列
o 事件
* 灵活的内存管理方式
o 满足实时性要求的静态内存分配
o 小内存系统管理及大内存系统的slab内存分配算法
* 可嵌套的中断支持
* 一些其他功能特征...

社区版本永久免费
支持主流C/C++语言开发
强大的代码编辑和重构功能
SDK管理器支持在线下载更新 RT-Thread 最新源码包
简单易用的工程创建向导,快速验证原型
全新图形化配置系统,同时支持架构图和树形图配置
软件包市场提供丰富的可用软件包资源
丰富的调试功能,快速查看和跟踪定位代码问题

RT-Thread Studio v2.0 已于2020年12月中旬发布,这是一个大版本更新,带来了许多重磅的新功能以及新特性。

1.集成PlatformIO生态系统
PlatformIO是一个集成了极其丰富资源的嵌入式开发生态系统,现在通过Studio新建工程向导,新的“通用工程”类型入口,选择基于PlatformIO创建工程,就可以无缝进行相关代码编辑,工程构建,程序下载,调试等开发工作。PlatformIO目前支持的41个平台,23个框架,924个开发板,222个例程,10595个库资源在RT-Thread Studio里均可选择和使用(PlatformIO资源包安装时间需要几分钟,需要耐心等待)。

2.ART-Pi SDK更新
新的SDK更新包V1.1.0实现了许多新功能。在Studio的SDK Manager里安装ART-Pi V1.1.0新版资源包后,在新建工程时注意选择V1.1.0版本即可采用新版本。关于ART-Pi更多资料和教程可以访问ART-Pi官方站点获取。

ART-Pi V1.1.0 SDK更新的主要特性如下:
增加 网络音乐播放器 的工程(使用柿饼GUI)
增加 柿饼GUI lib,FTP lib,TOUCHGFX lib
增加 TOUCHGFX适配不同分辨率的屏幕
增加 摄像头OV2640驱动,配置引脚即可使用
增加 RTC支持,FDCAN驱动,USB HOST驱动(目前支持读写U盘)
增加 SPI FLASH下载算法
增加 多媒体和工控扩展板的图纸,常见问题解答文档
完善 USB Device驱动
完善 代码贡献手册
更新 PIN框架
更新 ETH驱动,使用工业扩展板,通过Studio一键开启以太网
修正 SDRAM初始化时间过长的问题
修正 BT_STACK中放开宏ENABLE_LOG_INFO时编译错误的问题
修正 未开启SPI FLASH FS时编译报错的问题
修正 MPU设置的片外FLASH容量错误的问题
修正 SD卡热插拔的问题

3.支持J-Link远程下载调试
本次更新根据需要提供了完善的远程下载和调试支持,只需要将J-Link连在远端机并启动远端的JLinkRemoteServer,然后在本机修改调试配置指定IP连接方式和IP地址即可远程操控”千里之外“的远端J-Link进行下载调试。

4.支持查看开发板详情
在Studio先前版本里,只有在创建工程的时候才可以浏览到开发板详情和开发板自带文档,创建完工程如果想再次去查找浏览一下开发板详情信息或者文档是很不方便的。现在基于开发板创建的工程,在工程内预留了一个开发板详情查看入口,随时想查看,双击它即可。

5.QEMU支持网络仿真
老版本Studio的QEMU仿真支持多种类型的开发板,并且支持VEXPRESS-A9的网络仿真,这次更新STM32F4的开发板也加入了QEMU网络仿真支持,使用者可以在没有STM32F4开发板的情况下进行网络功能仿真。

6.支持Rebuild构建
当需要先清理工程后再重新全量构建工程时,以前需要先后进行两步,现在只需要点击工具栏上Rebuild按钮即可一气呵成地完成整个清理和重新构建的过程。

以上是主要的更新亮点,更多功能细节的优化和完善请上手体验和发现!

升级指南
对于已经安装过Studio的用户,打开Studio即可自动检测并升级到V2.0.0版本,没有安装的可以到如下地址下载安装V2.0.0完整安装包(建议不要覆盖安装)。


最新版本:1.2
实现roadmap中提到的大部分内容
1,文档方面已完成《RT-Thread编程手册》,同时还有论坛上jiezhi童鞋的《一起来学RT-Thread系列连载教程》
2,BSP分支方面新增cortext-A8(beaglebone),cortext-R4(rm48x50),UNITY-2(SEP6200),lpc408x的移植
3,组件方面:
- 加入msh(类似linux shell的风格),能够直接执行应用程序
- 新增freemodbus 1.6.0的移植、Ymodem协议、使用lwIP 1.4.1
- 新增开源的嵌入式关系数据库SQLite 3.8.1的移植

最新版本:3.0
RT-Thread 3.0 针对物联网终端的高度碎片化和低资源占用要求,引入了专门的配置工具和包管理器,实现系统的高度可裁剪可定制;基于物联网的多样化通讯和连接方式,优化并支持丰富的 IoT 协议以及 WiFi、NB-IoT 等无线连接。此外,还支持主流的云服务,兼容 POSIX 标准。

最新版本:5.0
RT-Thread 5.0 现已2023年4月发布,该版本将 RT-Thread smart 分支合并到主分支上,后续将与主线版本一同维护;增加了 RT-Thread Smart 特性,支持用户模式;除此之外,还为增加了原子特性,对调度器文件进行功能拆分;在组件层面还新增 tmpfs 文件系统,增加 musl libc 支持并完善了 POSIX 的支持;在 bsp 层面,新增了约 40 + 个 bsp 等。官方公告从内核、组件、libcpu、bsp、tools 等几个方面对 5.0.0 的更新进行详细说明,并针对 Smart 特性展开讲解。

内核部分
增加 RT-Thread Smart 特性,支持用户模式应用(Smart 将展开说明)。
添加原子特性。
增加嵌套互斥功能。
增加 rt_ssize_t 数据结构。
为 rt_object 添加静态名称。
采用新版本宏定义版本控制规范。
将 scheduler.c 拆分。
修复了 AC6 编译器在 memheap 中的 Oz 优化问题
修复 rt_memset 与字大小无关的问题。
修改 RT_ALIGN_SIZE 默认为 8。

组件部分
添加 FDT (扁平设备树),TMPFS, CRomFS
Libc:增加 musl libc 支持与完善 Posix 支持。
LWP:
增加更多系统调用支持。
增加 mm (虚拟内存管理层) 特性,提高时钟精度。
网络:增加 AF_UNIX 特性。
驱动设备:
改进:传感器,spi, i2c,UART,can, usb, cpu_time, sdio, pwm 等。

libcpu
arm:cortex-a 恢复安全 MMU 初始化,cortex-m7 改变函数 rt_hw_cpu_dcache_ops 的返回类型为 rt_uint32_t 等。
risc-v:支持非缓存的普通内存,增加 rt_backtrace 函数等。
aarch64:增加 rt_backtrace 函数,当没有空闲页面时停止。

tools
提升的 ci 功能,添加 scons 命令:scons—exec-path=xxx, scons—exec-prefix=,scons—dist—target=xxx, scons—strict, scons—dist—project-path=xxxx,等。

bsp
增加了支持 smart 的 bsp:D1/D1s, raspberry, qemu-vexpress-a9, qemu-virt64-aarch64, qemu-virt64-riscv 等。
Renesas:ra6m3
Infineon PSoC6:062s2, 062s3-4343w, 062s4, 062-wifi-bt, 062-ble
nuvoton:numaker-iot-m467, numaker-m467hj, numaker-hmi-ma35d1
nxp:LPC55S16, LPC55S36, LPC55S06, LPC5528, LPC55S28
nrf5xxx:nrf5340
gd32:gd32470z-lckfb, GD32303C-START
apm32:
apm32f030r8-miniboard, apm32f051r8-evalboard, apm32f091vc-miniboard 等
n32:n32g43xcl-stb, n32g457qel-stb, n32g45xcl-stb 等
mm32:mm32f3270-100ask-pitaya
at32:at32f421-start, at32f425-start
stm32:stm32f723-st-disco
phytium:aarch32, aarch64
其他:core-v-cv32e40p, air32f103, YS-F1Pro 等等

RT-Thread Smart 说明
如果 RT-Thread 开启了 Smart 特性, 就变成了一个混合微内核操作系统,可以简称为 RT-Smart 或 Smart,它把应用从内核中独立出来,形成独立的用户态应用程序,并具备独立的地址空间(32 位系统上是 4G 的独立地址空间)。以下是 5.0.0 版本上 Smart 部分的详细说明/使用说明:
Smart 平台
支持 Smart 开发的 BSP 列表:
qemu-vexpress-a9
qemu-virt64-aarch64
qemu-virt64-riscv
raspberry-pi
imx6ull-100ask-smart
imx6ull-artpi-smart

Smart 特性使能
打开 RT-Thread 源码,在支持 Smart 的 BSP 路径下打开 Env,配置 Smart 特性,使能 “RT-Thread Kernel → Enable RT-Thread Smart(microkernel on kernel/userland)”:

Smart 用户态应用功能
用户态应用与内核相互独立,并不存在于 rt-thread 源码中,用户态应用功能如下:
支持基本应用加载
支持 POSIX PSE51 标准接口
支持外设、网络功能
支持 RT-Thread 原生接口
支持 GNU 应用

Smart 用户态应用工程示例

用户态应用位于此处,如下是应用示例:
编译应用:在 userapps 目录下使用 scons 编译,编译顺利的话,将在 root 文件夹中得到一系列可执行 elf 文件,如下图所示,这是 userapps 下的多个用户态应用示例编译生成的可执行文件。

制作 sd 卡:在 userapps\tools\fatdisk 目录下有一个打包 FAT 格式文件的工具 fatdisk.exe,我们可以利用这个工具将我们要存储到 QEMU SD 卡里的文件打包成 sd.bin 文件。将 userapps 下的 root 目录复制到 env\tools\fatdisk 目录下,双击执行 fatdisk.exe 生成新的 sd.bin 文件。

VSCode 插件:RT-Thread Smart 插件的诞生方便了 Smart 应用的开发。打开 VSCode,在扩展中搜索 “rt-thread smart”,点击安装即可获得 Smart 插件。

更多详情可查看主页更新说明。


官方主页:http://www.rt-thread.org/

RT-Thread Smart 致力于物联网和边缘计算领域的开源

2022年5月上旬消息,www.rt-thread.io 项目的研发团队花了两年时间,研发出了该项目的最新成果:RT-Thread Smart。这是一款微内核的操作系统,主要针对中高端的处理器,如具有内存管理单元(MMU)的 RISC-V 或 Arm Cortex-A,为嵌入式领域的所有行业提供了一个具有竞争力的、基于 POSIX 的软件平台。

谁需要 RT-Thread Smart
RT-Thread Smart 是一款专业的、高性能的微内核操作系统,用于实时应用。它为所有市场的嵌入式设备提供了开源基础,如安全(IP 摄像头)、工业控制、车载设备、消费电子及其他嵌入式科技应用,可谓一切场景。它的意义在于:不像传统的物联网操作系统,一个微内核的操作系统可以填补传统实时操作系统 RTOS 和相对大型的操作系统如 Linux 之间的空白,实现实时性能、成本、安全、启动速度等等各方面之间的最佳平衡。

RT-Thread Smart 的架构
它通过 MMU 和系统调用将系统分割为内核模式和用户模式,并为每种模式区分了地址空间(一个 32 位系统可以提供 4G 地址空间)。


其内核包括平台的基础功能,并支持定制化。RT-Thread Smart 的用户应用环境使用 musl.libc.org 来提供 opensource.com 接口调用和 C 语言的运行时支持。它也继承了原始的 RT-Thread 生态系统,使用 scons.org 或者其他编译工具如 opensource.com、Makefile、 opensource.com 等等来支持开发,以及 RT-Thread 开箱即用的在线软件包(撰写本文时超过 342 个)。甚至可以将 Linux 应用程序(如 wget/cURL、BusyBox、OpenSSL 和 Simple DirectMedia Layer)移植到平台。

压缩的 RT-Thread Smart 内核仅 217 KB,搭配一个 127 KB 的根文件系统。大约 2 MB的存储占用。包括了对文件系统、网络协议栈、多媒体的完整支持。RT-Thread 只需要 3 到 5 秒完成启动,而在不运行其他功能组件时,RT-Thread Smart 需要的启动及准备时间不到 500ms。

通过其集成的 Persimmon 用户界面(UI)组件,RT-Thread Smart 从上电到运行 UI 需要大约 1 秒。换句话说,这是一个非常轻巧快速的系统。当然,“实时”不是指启动,而是指系统随着时间推进而表现出的一致性。对于 RT-Thread ,实时性能需要优先考虑,中断时延小于 1μs,满足大部分实时性要求严格的场景需求。

RT-Thread Smart 和 RT-Thread
你可能想知道 RT-Thread Smart 和 RT-Thread 之间的不同。简单来说, RT-Thread Smart 是一个基于 RT-Thread RTOS 的操作系统,但它整合了用户态的处理过程。RT-Smart 的内核部分本质上是 RT-Thread RTOS,它在虚拟地址上运行,增加了进程管理,使用进程间通信机制(IPC)、虚拟内存/地址空间管理、ELF 加载器等等,以上特性全部在 RT-Thread RTOS 内实现,当这些组件被禁用时,RT-Smart 会回归 RT-Thread RTOS。

以下是对比:
 RT-ThreadRT-Thread Smart
支持芯片Cortex-M/R、RISC-V RV32IMAC(以及类似)、Cortex-A MPUCortex-A 等具有 MMU 的 MPU
编译内核和应用都编译到一个镜像内核和应用可以被分开编译和运行
存储使用线性地址空间(即使有 MMU),使用物理地址的虚拟寻址运行在内核占用超过 1GB 的 32 位操作系统,拥有完整 4G 地址空间的用户态进程彼此隔离,外设驱动程序必须通过虚拟地址访问外设
运行错误当一个应用程序失败时,整个系统就会崩溃当应用程序失败时,它不会影响内核和其他进程的执行
运行模式多线程模型多进程模型(进程内支持多线程,内核线程由内核支持)
用户模型单用户模型单用户模型
APIRT-Thread API、POSIX PSE52RT-Thread API(内核态和用户态),以及完整的 POSIX API
实时性抢占式硬实时系统抢占式硬实时系统
资源使用非常小相对小
调试通常需要模拟器调试支持 GDB 调试,不需要模拟器


RT-Thread RTOS 非常紧凑,它的所有应用和子系统都编译到镜像中,多线程应用运行并分享相同的地址空间。RT-Thread Smart 是独立的。系统和应用是分别编译和运行的。应用拥有完整且互相隔离的地址空间。它也继承了 RT-Thread 优秀的实时性,同时也具有 POSIX 环境的特性。类似地,它们都与 RT-Thread API 兼容。RT-Thread RTOS 的应用可以被平滑移植到 RT-Thread Smart。

嵌入式开源
RT-Thread Smart 是一个开源项目,可以下载代码和文档并尝试,并提交评论和反馈,将该项目传播给更多开源倡导者。嵌入式系统属于它们的用户,有太多的嵌入式开发人员没有找到太多可用的嵌入式系统。如果是开发人员,请帮助改进 RT-Thread Smart。随着 RT-Thread 项目的不断推进,希望创建物联网和边缘计算的令人激动的开源世界。



该文章最后由 阿炯 于 2023-04-14 14:18:23 更新,目前是第 2 版。