RT-thread国产实时操作系统概述

RT-Thread 实时操作系统是一个分层的操作系统,它包括了:

• 组件层 components,这些是基于 RT-Thread 核心基础上的外围组件,把一些功能模块划分成独立的一个个组件模块,做到组件与组件之间的低耦合,组件内部的高内聚。

 例如文件系统,命令行 shell 接口,lwIP 轻型 TCP/IP 协议栈,GUI 图形用户界面等。

• 硬实时内核 kernel,这层是 RT-Thread 的核心,包括了内核系统中对象的实现,例如多线程及其调度,信号量,邮箱,消息队列,内存管理,定时器等实现。

•分支接口 porting,主要由 libcpu 以及不同硬件平台的 bsp 构成,即 RT-Thread 支持的一个个芯片移植,外设驱动等


在官网http://www.rt-thread.org/下载 RT-Thread v2.0.0 正式版,解压后:

bsp: 针对各个具体开发板、平台的目录,其中包含相应的 Keil 工程文件(如果包含了 Keil MDK 的移植)

components:各个组件,如 dfs/drivers/finsh/gdb/libc/libdl/net/vbus/vmm 等

documentation/examples:辅助文档以及一些内核、组件的测试实例

include:包含了 RT-Thread 内核头文件

libcpu: 面向各个芯片 cpu 移植的代码

src:包含了 RT-Thread 内核源文件

tools:支持各种集成开发环境的 python 文件,如常见的 iar.py/keil.py/sconsui.py/vs2012.py


v2.0.0 版本相对 v1.2.x 版本,又加入众多新功能,有些很有趣,有些很实用:
1. 设备驱动框架在 v2.0.0 版本中进一步完善。DeviceDriver 在 RT-Thread 中类似抽象的驱动框架层,初衷是,向应用层(或组件)提供标准统一的接口,向下(底层硬件)提供简化的编程模型,在 v2.0.0 版本中,新添加了:SPI NorFlash(ATMEL/SST/ 华邦等厂家),SPI ETH(ENC28J60),SPI WiFi(RW009)等的驱动,这些驱动依赖于 RT-Thread 的 SPI 抽象模型,提供了抽象、无需修改的外设驱动代码;类似的,建立在 I2C 驱动框架上,v2.0.0 版本也引入了 sensor 的驱动框架,并提供了 MPU6050、BMI055 等传感器的驱动;作为杂类设备的尝试,GPIO(IO pin) 的抽象框架也终于在这个版本提出来了,以后点灯简单啦
2. 在 1.x 系列版本中,USB device/host 框架支持得一般,不能说非常棒,而在 v2.0.0 版本中,USB 框架通过逐步的重构,也开始走向成熟,在服务公司里也应用到多个项目,多个处理器上
3. 为了方便的切换不同的编译器平台,在 v2.0.0 版本中也把原来的 minilibc/newlib/armlibc 用统一的宏替换:RT_USING_LIBC。老版本的代码迁移过来,请注意下使用新的、统一的宏:RT_USING_LIBC。同时也加入了 IAR 的 dlib,这样当配置中打开 LIBC 时,scons 将会自动根据你当前使用的编译器来自动选择不同 libc 库的移植;
4. GDB stub,这部分是 CSDN 编程夏令营活动的成果之一,一直觉得类似夏令营的活动很好,可以拉近学生和开发者的距离。通过这个组件,终于可以让 RT-Thread 可以进行软件方式的调试了,虽然是命令行方式的 GDB,但它也有很多图形化前端配合来进行源码级的调试仿真;
5. lwIP 相关的更新。这个貌似有很多,引爆点应该说是一个很热门的词:物联网。围绕着这个,v2.0.0 版本中加入了 RW009 这样的简单易用的 Wi-Fi 网卡驱动,IPv4/v6 双协议栈的支持,DHCP server,甚至是 NAT 这样的地址转换实现,哦,用 RT-Thread 来做小路由,网关变成了可能。哦,RT-Thread 的目标并不是物联网,更重要的是它是一套基础性的软件平台。
6. 随着 Linux/RT-Thread 同时执行的方式,相应的 VMM 组件,VBUS 组件也在这个版本上发布出来。VMM 组件更多的侧重于单核,Linux/RT-Thread 双系统并行执行以获得更好的实时性,而 VBUS 组件则解决了 Linux/RT-Thread 双系统之间的数据通信问题。两者是相辅相成的。这两个组件要求的技术性也更高,一般用于一些可靠性要求非常高的场合。在 RT-Thread 2.0.0 版本中也终于支持了 LPC4357 这样的小异构系统(LPC4357 中包含了 ARM Cortex M4/M0 两个异构核心),实现了 M4/M0 上分别运行 RT-Thread 系统,两者之间则通过 VBUS 进行通信。所以,对多系统 /VBUS 感兴趣的同学可以从 LPC4357 上入手。

在开发的过程中也出现了一个附加品,QEMU/realview 上模拟执行 RT-Thread(或者 Linux/RT-Thread)的 BSP,它可以让未经修改的标准 QEMU,去软件仿真模拟执行 RT-Thread,或更进一步,执行 Linux/RT-Thread。

RT-Thread v2.1.0 roadmap
下一个版本应该是一个小版本,不可能总是类似原来,每次都出大版本很多人来询问过下一个版本的计划是什么。其实我想说,RT-Thread 是一个开源社区,RT-Thread 的后续发展在社区,属于每一个社区参与者,你想在里面加入什么样的功能,做好哪部分的工作,关键在于每个社区的参与者。只要符合 RT-Thread 的东西(例如许可证上没有冲突),我也没理由不把它放到 RT-Thread 开发主干上来。所以我下面提及的更多代表的是我个人的一些想法,社区还是需要更多的多样性,社区是属于你的,只要你参与进去做!
1. CloudIDE,这个是托管在 http://lab.rt-thread.org/cloudide 上(可能因为备案的问题暂时不通)的在线方式的集成开发环境,嗯,有些类似 mbed 但是希望有自己的特色,以及希望它是属于国内的 Online IDE,速度能够快些。这部分也在密集的进行改版,演变成多标签页编辑方式;配合 Wi-Fi 入门套件,进行在线方式更新固件;加入开发者间的代码片段,组件分享功能;集成文档帮助等信息等等;创建这个的初衷是希望新手入门能够方便些,而不是受搭建开发环境的困扰,需要的只是一个浏览器。Wi-Fi 入门套件,暂时称为 ART-wifi 吧,简单的名字就是一个称呼,名字而已。
2. 去年 12 月份上海嵌入式沙龙活动中,weety 提到了 POSIX 兼容性的问题,导致 Linux 的一些程序并不那么容易移植过来(或者说后续的代码一致性),这里主要问题在于 BSD socket 接口是完全属于 lwIP 协议栈,而和 RT-Thread 的文件接口没关系,所以在 RT-Thread 上没有 socket/file descriptor/device 间的 select/poll/read/write 等调用;另外一个隐含问题是,POSIX 实现也不是那么标准,可能里面还有一些坑等。这个问题是一个大问题,因为关键点在于,大家既然选择了开源的系统,那么他肯定也考虑到开源生态很好,有很多的资源可以使用,可以左右逢源。。。所以,RT-Thread 也需要以更开放的姿态来解决这个问题,使得它能够更开放,增强 POSIX 标准本身的亲和力。相类似的,它也应该更好地支持一些 C++ 标准,基础设施 RT-Thread 已经提供了,后面如何去应用,那么就看用户的想法、创新性有多大了。
3. 一些重型平台的支持,例如市场上新出的一些堆叠封装了 SDRAM/DDR 的 ARM9,Cortex-A8/9,MIPS32/64,甚至是 x86,这个肯定也会逐步地演变成 RT-Thread 的目标硬件平台,但是这个投入也会比较重。如果上面的第二项解决了,也不是不可能,首要解决的是底层驱动的问题,这样后续就比较容易和上面的组件、应用粘合起来。
好了,以下是想到的无责任 feature list,感兴趣的同学可以来认领:
* CloudIDE 相关
- 完善 NAT 功能,把 ART-wifi 变成一个 Wi-Fi 中继(路由)。
- 期待在 CloudIDE 上分享 MQTT 组件,CoAP 组件;
- 期待把 ART-wifi 变成一个 Wi-Fi/6LoWPAN 网关。
- 期待把 ART-wifi 变成一个 Wi-Fi/nRF51822 6LoWPAN 网关,Wi-Fi/nRF51822 BLE 网关;
- 期待把 ART-wifi 变成一个多轴飞控,并跑一些 PX4 的算法代码;
- 期待在 CloudIDE 上分享乐联网物联网接入组件;
- 期待在 CloudIDE 上分享 yeelink 物联网接入组件;
- 期待在 CloudIDE 上分享 SSL 组件;
- 期待在 CloudIDE 上分享阿里云,机智云,百度云,腾讯云等等接入组件;
- 更多的传感器驱动,例如气压计,温度计,光照,9 轴传感器等;
- 期待在 CloudIDE 上加载 RealBoard 4088 APP 开发功能;
- 期待在 CloudIDE 上加入图形用户界面设计功能;
- 期待把 CloudIDE 变成本地化的桌面应用程序;
* POSIX 相关
- 针对 lwIP 实现 DFS 上相应的 lwIP fs 接口,让 DFS 的 fd 和 lwIP socket 关联起来;实现 select/poll 接口;
- 更好的把 device 接口和 DFS devfs 融合起来;协同实现好 select 功能;
- 加入更多 POSIX 相关接口,包括但不限制于 aio,signal 等功能;
- 整理 DeviceDriver 框架,让 device 接口,和各自设备驱动接口分离开来。应用程序更多的倾向于使用 device 接口,固件开发可以使用设备驱动接口;
* 其它
- openbsd 的 TCP/IP 协议栈移植;openbsd POSIX 外围接口移植;
- canopen 组件;
- ARM Cortex-A8/A9 + M4/M3 的多系统(硬件)平台;
- 其他一些硬件移植;

以上摘自http://www.rt-thread.org/phpBB3/topic3965.html


与 v2.0.0RC 版本相比,主要有以下改进:

内核 
console 以 RT_DEVICE_FLAG_STREAM 参数打开字符设备;
在 rt_memheap_free 中加入更多的断言检查;

组件
更新 RW009 驱动以支持 Wi-Fi SoftAP 模式(aozima);
修正 sensor 框架的一些问题,并加入 C API 接口(睿赛德服务公司提供);
加入 MPU6050 sensor 的代码(bernard, Coing);
加入 BMI055 sensor 的代码(Coing);
当未使能 heap 时,修正 finsh/msh 中 list_memheap 的问题;
修正 LIBC 编译的警告;
加入 IAR dlib 相关的移植,使得应用能够使用标准的 API 接口;
修正 YMode 握手时可能引起的竞争问题(grissiom);
更新 FreeType 版本到 2.5.4
单独把 C++ 的全局对象初始化放到 cplusplus_system_init 函数中,并在初始化线程中调用;
finsh 中以 RT_DEVICE_FLAG_STREAM 参数打开字符设备;
添加 VBUS 组件用于 Linux 与 RT-Thread 系统之间,RT-Thread 与 RT-Thread 系统之间通信(睿赛德服务公司捐赠);
增加 lwIP/NAT 组件,可以做多个网口间的地址转换(Hicard);
增加 lwIP/DHCP 服务端,用于向客户端分配 IP 地址(睿赛德服务公司提供);

BSP
修正 LPC4357 串口驱动初始化时过早打开中断的问题(nongxiaoming);
重写 LPC4357 串口驱动,并让芯片上 M4/M0 核心分别都执行 RT-Thread 系统,两核心之间以 VBUS 组件进行系统间通信(睿赛德服务公司捐赠);
新增 RX 移植(limxuzheng);
新增 NuMicro M051 Series 移植,支持 GCC、Keil MDK 编译器(bright-pan);
新增 LPC54102 移植(Coing);
移除 STM32F4 BSP 中不需要的 RT_TIMER_TICK_PER_SECOND 配置(pangweishen);
在 Linux Clang 编译分析中,强制以 32 位模式进行编译(grissiom);
修正 STM32F103 中串口驱动中断过早打开的问题(armink);

工具
增加 scons 中的 MD5 支持(bright-pan);

以上摘自http://www.rt-thread.org/node/98