1. RT-Thread
RT-Thread 是国内出产的一款非常优秀的 RTOS。它和 FreeRTOS 、uCos 等经典 RTOS 最大的不同是:它不仅仅是一个实时内核,还具备丰富的中间层组件 。
它提供了一个完整的软件栈解决方案,而不需要用户搜集各种 核心组件 手工从头搭建。
包括以下部分:
- 内核层:RT-Thread 内核,是 RT-Thread 的核心部分,包括了内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件 / 板级支持包)与硬件密切相关,由外设驱动和 CPU 移植构成。
- 组件与服务层:组件是基于 RT-Thread 内核之上的上层软件,例如虚拟文件系统、FinSH 命令行界面、网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,组件之间低耦合。
- RT-Thread 软件包:运行于 RT-Thread 物联网操作系统平台上,面向不同应用领域的通用软件组件,由描述信息、源代码或库文件组成。RT-Thread 提供了开放的软件包平台,这里存放了官方提供或开发者提供的软件包,该平台为开发者提供了众多可重用软件包的选择,这也是 RT-Thread 生态的重要组成部分。软件包生态对于一个操作系统的选择至关重要,因为这些软件包具有很强的可重用性,模块化程度很高,极大的方便应用开发者在最短时间内,打造出自己想要的系统。RT-Thread 已经支持的软件包数量已经达到 60+,如下举例:
- 物联网相关的软件包:Paho MQTT、WebClient、mongoose、WebTerminal 等等。
- 脚本语言相关的软件包:目前支持 JerryScript、MicroPython。
- 多媒体相关的软件包:Openmv、mupdf。
- 工具类软件包:CmBacktrace、EasyFlash、EasyLogger、SystemView。
- 系统相关的软件包:RTGUI、Persimmon UI、lwext4、partition、SQLite 等等。
- 外设库与驱动类软件包:RealTek RTL8710BN SDK。
- 其他。
相关资源: 1.详细的 RT-Thread 介绍可以参考:RT-Thread 简介
1.1 IDE 环境使用
RT-Thread Studio 也是以 Eclipse + CDT/MCU 为基础的修改版本,基本使用方法和 Eclipse 一致。最大的不同还是 RT-Thread Studio 支持软件包的管理,可以在线的下载软件包。
相关资源: 1.IDE:RT-Thread Studio 2.指南:RT-Thread Studio 教程
1.2 Make 环境使用
具体使用过程如下:
git clone https://github.com/RT-Thread/rt-thread
cd rt-thread/bsp/nuclei/gd32vf103_rvstar/
scons --menuconfig
source ~/.env/env.sh
// 根据 ~/.env/packages/packages/peripherals/nuclei_sdk/package.json 配置地址
// 下载 nuclei-sdk 到 packages/nuclei_sdk-latest
pkgs --update
ls packages/nuclei_sdk-latest
下载完成后,给 nuclei_sdk-latest 打上一个补丁,不然会编译不过:
rt-thread/bsp/nuclei/gd32vf103_rvstar/packages/nuclei_sdk-latest$ git diff
diff --git a/SConscript b/SConscript
index ebe5a39..ca8211e 100644
--- a/SConscript
+++ b/SConscript
@@ -144,7 +144,7 @@ extra_lflags = "{} -T {}".format(build_core_options, build_ldscript)
# print(rtconfig.LFLAGS)
group = DefineGroup('nuclei_sdk', src, depend = [''], \
- CCFLAGS=extra_flags, ASFLAGS=extra_flags, LINKFLAGS=extra_lflags, \
+ CFLAGS=extra_flags, ASFLAGS=extra_flags, LINKFLAGS=extra_lflags, \
CPPPATH = CPPPATH, CPPDEFINES=CPPDEFINES, LIBPATH=LIBPATH)
Return('group')
修改工具链路径:
rt-thread/bsp/nuclei/gd32vf103_rvstar/rtconfig.py
EXEC_PATH = /home/ubuntu/rtos/rtt/gcc/bin
cd rt-thread/bsp/nuclei/gd32vf103_rvstar/
scons -c
scons
set PATH=D:\project\rtos\RV-STAR\NucleiStudio\toolchain\openocd\bin;%PATH%
scons --run upload
串口运行界面如下:
相关资源: 1.rtt 源码:rt-thread 2.nuclei rv-star bsp 源码:nuclei-sdk 3.工具链:nuclei_riscv_newlibc_prebuilt_linux64_2022.01 4.专用 QEMU:Nuclei QEMU 5.调试器:Nuclei OpenOCD 6.指南:在 Ubuntu 平台开发 RT-Thread 7.指南:RT-Thread 运行 RV-STAR 8.帮助:Env 用户手册 9.帮助:SCons 构建工具 10.帮助:Kconfig 语法
1.3 编译框架
RT-Thread 也是采用 scons 作为编译框架的。所有的 scons 脚本都和源码存放在一起,而不是像 YoC 一样把 scons 脚本集中存放在 yoctools 中,这样方便用户自定义修改。
scons 作为 makefile 的替代者,直接采用 python 脚本来编写的。主要好处有两个:
- 1、不用记那些晦涩的 makefile 语法,以及掺插着的 shell 语法。python 语法在方方面面都比较友好。
- 2、直接使用了 python 以后,
scons 就不仅仅只能用来编译,其他的任何事项都可以使用 scons 来完成。比如 生成 IDE 工程、调试、烧录等等。
rtt 的 scons 命令支持以下的自定义功能:
> scons --help
// 通用功能
...
Local Options:
--run=RUN Upload or debug application using openocd
// 下载或者调试
--dist make distribution
// 生成发行包
--dist-strip make distribution and strip useless files
--dist-ide make distribution for RT-Thread Studio IDE
// 生成 RT-Thread Studio 发行包
--project-path=PROJECT-PATH
set dist-ide project output path
--project-name=PROJECT-NAME
set project name
--reset-project-config reset the project configurations to default
--cscope Build Cscope cross reference database. Requires
cscope installed.
// 静态检查
--clang-analyzer Perform static analyze with Clang-analyzer.
Requires Clang installed. It is recommended to
use with scan-build like this: `scan-build
scons --clang-analyzer` If things goes well,
scan-build will instruct you to invoke
scan-view.
--buildlib=BUILDLIB building library of a component
// 编译组件库
--cleanlib clean up the library by --buildlib
--target=TARGET set target project: mdk/mdk4/mdk5/iar/vs/vsc/ua/
cdk/ses/makefile/eclipse/codelite/cmake
// 生成各种 IDE 工程
--stackanalysis thread stack static analysis
// 堆栈静态分析
--genconfig Generate .config from rtconfig.h
--useconfig=USECONFIG make rtconfig.h from config file.
--verbose print verbose information during build
--pyconfig Python GUI menuconfig for RT-Thread BSP
--pyconfig-silent Don`t show pyconfig window
相关资源: 1.帮助:SCons 构建工具
1.4 代码框架
相关资源:
1.指南:RISC-V 移植
1.5 核心组件
item | component | description |
---|
RTOS Core | rt-thread | - | BSP API | bsp driver | - | Device Driver | rtt driver | - | POSIX | rtt posix | dfs_posix/pthread/delay/io/ipc/libdl/signal | VFS | dfs | dfs_register 支持对devfs设备文件系统和其他文件系统的注册 | Filesystem | FatFS/RomFS/DevFS | - | Network | AT/Lwip/Netdev/Sal | - | Display | lvgl | - | Audio | - | - | MultiMedia | - | - | OTA | - | - |
相关资源: 1.RTT 组件文档 2.RTT 软件包文档 3.RTT Demo 实例 4.RT-Thread 软件包搜索 5.RT-Thread 软件包仓库 6.RT-Thread 参考设计中心
2. Nuclei Rv-Star
RV-STAR 开发板,是一款基于芯来 GD32VF103 MCU 的 RISC-V 评估开发板。
和 T-HEAD CSI 类似,Nuclei SDK 也是一个最小功能的 SDK,仅包含了 RTOS 调度 Core 的支持,以及一系列驱动的底层 API。
芯来软件平台 NSP(Nuclei Software Platform)的相关概念:
- NMSIS:Nuclei微控制器软件接口标准(NMSIS:Nuclei Microcontroller Software Interface Standard)
- Nuclei SDK:Nuclei处理器内核的软件开发包(Nuclei SDK:Nuclei Software Development Kit)
- Nuclei Board Labs:此外,芯来科技还发布了配合Nuclei SDK及RV-STAR开发板的配套实验教程(Nuclei Board Labs),以方便开发者快速上手及应用;
- Nuclei ISA:同时,Nuclei ISA标准规范(Nuclei ISA Spec)也一并整理发布,旨在帮助开发者快速学习和了解Nuclei RISC-V处理器特性。
相关资源: 1.芯来软件平台
2.1 IDE 环境使用
Nuclei Studio IDE 也是以 Eclipse + CDT/MCU 为基础的修改版本,基本使用方法和 Eclipse 一致。 Nuclei Studio IDE 也逐步的支持软件包的管理,可以在线的下载软件包。
Nuclei 还积极的把自己融入到现有的 IDE 环境中去,原生的支持 Segger Embedded Studio 、IAR Embedded Workbench 、Lauterbach Trace32 、Compiler-Dev 、PlatformIO 等一系列 IDE 环境的开发。
相关资源: 1.IDE:Nuclei Studio IDE 2.IDE:Other IDE 3.指南:NucleiStudio的快速上手 4.指南:NucleiStudio的进阶学习 5.指南:Nuclei Studio NPK Introduction 6.指南:SES的快速上手 7.指南:SES的进阶学习
2.2 Make 环境使用
具体使用过程如下:
git clone https://github.com/Nuclei-Software/nuclei-sdk
设置工具链路径:
export PATH=~/rtos/rv-star/gcc/bin/:$PATH
$ cd nuclei-sdk/application/freertos/demo/
$ make SOC=gd32vf103 BOARD=gd32vf103v_rvstar all
Current Configuration: RISCV_ARCH=rv32imac RISCV_ABI=ilp32 SOC=gd32vf103 BOARD=gd32vf103v_rvstar CORE=n205 DOWNLOAD=flashxip
Assembling : ../../../OS/FreeRTOS/Source/portable/GCC/portasm.S
Compiling : ../../../OS/FreeRTOS/Source/croutine.c
Compiling : ../../../OS/FreeRTOS/Source/event_groups.c
Compiling : ../../../OS/FreeRTOS/Source/list.c
Compiling : ../../../OS/FreeRTOS/Source/portable/GCC/port.c
Compiling : ../../../OS/FreeRTOS/Source/portable/MemMang/heap_4.c
In file included from ../../../OS/FreeRTOS/Source/include/portable.h:52,
from ../../../OS/FreeRTOS/Source/include/FreeRTOS.h:62,
from ../../../OS/FreeRTOS/Source/portable/MemMang/heap_4.c:43:
../../../OS/FreeRTOS/Source/portable/MemMang/heap_4.c: In function 'vPortGetHeapStats':
../../../OS/FreeRTOS/Source/portable/GCC/portmacro.h:68:33: warning: conversion from 'long long unsigned int' to 'size_t' {aka 'unsigned int'} changes value from '18446744073709551615' to '4294967295' [-Woverflow]
68 | #define portMAX_DELAY ( TickType_t )0xFFFFFFFFFFFFFFFFULL
| ^
../../../OS/FreeRTOS/Source/portable/MemMang/heap_4.c:445:46: note: in expansion of macro 'portMAX_DELAY'
445 | size_t xBlocks = 0, xMaxSize = 0, xMinSize = portMAX_DELAY; /* portMAX_DELAY used as a portable way of getting the maximum value. */
| ^~~~~~~~~~~~~
Compiling : ../../../OS/FreeRTOS/Source/queue.c
Compiling : ../../../OS/FreeRTOS/Source/stream_buffer.c
Compiling : ../../../OS/FreeRTOS/Source/tasks.c
Compiling : ../../../OS/FreeRTOS/Source/timers.c
Compiling : main.c
Linking : demo.elf
text data bss dec hex filename
27078 116 12994 40188 9cfc demo.elf
启动 openocd server:
set PATH=D:\project\rtos\RV-STAR\NucleiStudio\toolchain\gcc\bin;D:\project\rtos\RV-STAR\NucleiStudio\toolchain\openocd\bin;%PATH%
openocd -c "gdb_port 3333" -f Z:\rtos\rv-star\nuclei-sdk-master\SoC\gd32vf103\Board\gd32vf103v_rvstar\openocd_gd32vf103.cfg
使用 gdb 下载:
set PATH=D:\project\rtos\RV-STAR\NucleiStudio\toolchain\gcc\bin;D:\project\rtos\RV-STAR\NucleiStudio\toolchain\openocd\bin;%PATH%
riscv-nuclei-elf-gdb Z:\rtos\rv-star\nuclei-sdk-master\application\freertos\demo\demo.elf -ex "set remotetimeout 240" -ex "target extended-remote localhost:3333" --batch -ex "monitor halt" -ex "monitor flash protect 0 0 last off" -ex "load" -ex "monitor resume" -ex "quit"
运行结果:
相关资源: 1.源码:Nuclei SDK 2.源码:nuclei-board-labs 3.工具链:nuclei_riscv_newlibc_prebuilt_linux64_2022.01 4.调试器:Nuclei OpenOCD 5.专用 QEMU:Nuclei QEMU 6.指南:Nuclei SDK README 7.指南:Get started with Nuclei SDK
2.3 编译框架
Nuclei SDK 本身的工程的编译框架为 Makefile,核心框架在以下文件中定义:
$ ls Build/
gmsl Makefile.base Makefile.components Makefile.conf Makefile.core Makefile.files Makefile.misc Makefile.rtos Makefile.rules Makefile.soc
为了兼容 rt-thread SDK 的 scons 编译框架,Nuclei SDK 也包含了对应的 SConscript 文件。
2.4 代码框架
2.5 核心组件
item | component | description |
---|
RTOS Core | rtthread/freertos/ucos | - | BSP API | nuclei driver | - |
3. NXP Vega
Vega 织女星开发板是 OPEN-ISA 社区为中国大陆地区定制的一款体积小、功耗超低和功能丰富的基于 RV32M1 的 RISC-V 评估开发板。使用该开发板用户可以快速搭建一个基于 RV32M1 芯片的 RISC-V 应用原型或者演示系统。
RV32M1 是一颗异构四核 MCU 芯片:一个 RISC-V RI5CY 核、一个 RISC-V ZERO_RISCY 核、一个 ARM Cortex-M4F 核和一个 Cortex-M0+ 核。只能启动其中一种核,默认情况下是从 RISC-V RI5CY 核启动。
RV32M1 SDK 是一个中型的 SDK,它不仅包括了 RTOS 调度 Core 和 基本 BSP API 驱动,还包括了一些基本的核心组件。
资源:
3.1 IDE 环境使用
Vega SDK 直接使用原生的 Eclipse + CDT/MCU IDE。
相关资源: 1.IDE:Eclipse IDE for Embedded C/C++ Developers
3.2 Make 环境使用
具体使用过程如下:
git clone https://github.com/open-isa-rv32m1/rv32m1_sdk_riscv
设置工具链路径:
export RISCV32GCC_DIR=~/rtos/vega/riscv32-unknown-elf-gcc/
$ cd rv32m1_sdk_riscv/boards/rv32m1_vega/rtos_examples/freertos_generic/ri5cy/riscvgcc
$ ./clean.sh
$ ./build_debug.sh
启动 openocd server:
cd D:\project\rtos\VEGA\openocd_20190530\windows
openocd.exe -f rv32m1_ri5cy.cfg
使用 telnet 下载:
telnet localhost 4444
cd Z:/rtos/vega/rv32m1_sdk_riscv/boards/rv32m1_vega/rtos_examples/freertos_generic/ri5cy/riscvgcc/debug
program freertos_generic.elf
reset
运行结果:
相关资源: 1.源码:RV32M1 SDK 2.工具链&调试器:GNU GCC和OpenOCD 3.指南:open-isa-cn/vega-lite 4.指南:怎样才能用板载调试器来调试织女星开发板的RISC-V核 5.指南:织女星开发板调试器升级为Jlink固件 6.指南:手把手教你搭建织女星开发板RISC-V开发环境 7.指南:搭建开发环境 8.指南:Windows 下配置开发环境 9.指南:Linux 下搭建开发环境
3.3 编译框架
Vega SDK 的编译框架为 cmake,通过配置文件 CMakeLists.txt 把工程组织起来。
3.4 代码框架
3.5 核心组件
item | component | description |
---|
RTOS Core | freertos | - | BSP API | rv32m1 driver | - | Middleware | fatfs/mbedtls/multicore/sdmmc/usb/wifi/wireless/wolfssl | - |
4. Melis
Melis3.0系统是全志科技面向数字媒体和IoT领域的轻量级物联网嵌入式实时操作系统,主打视频多媒体编,解,录周边产品应用。 Melis SDK 是全栈 SDK,它支持众多的核心组件,可以直接开发产品。 关于内核选型,为什么基于RT-Thread内核? 最初进行开发的时候,候选内核其实有包括RT-Thread,FreeRTOS, Arm mBed, Zephyr以及 Nuttx在内的多个内核,并且Zephy已经开发适配到能够做视频播放的程度,但是最终选择了RT-Thread作为Melis3.0方案新架构的内核。有些内核,比如zephyr,mbed os, freeRTOS,这类系统用户很多,支持的开发板也很多,但是局限在一些小资源的开发板上,总体上给人的感觉是广度有余,高度不足,难以承担多媒体这种比较垂直类的应用, 而RT-Thread则具备更多的可能性,经过多方考量,最终选择了它并进行了深度适配。
相关资源:
1.Melis3.0系统Quick Start 2.linux-sunxi 3.Melis4.0系统架构以及V833/V831-IPC开发QuickStart 4.Melis系统崩溃问题分析以及解决思路 5.Tina&Melis时钟树分析 6.Melis4.0系统多媒体解码方案开发+调试环境搭建 7.全志D1 Melis4.0 系统整体架构 8.关于Linux&Melis Kernel Neon使用的一些总结 9.Melis.net网络架构 10.基于Melis4.0的爱键智能视频门铃体验 11.关于Linux ION和Melis3.0系统中物理地址分配的异同分析 12.lindenis-org/lindenis-v833-RTOS-melis-4.0
4.1 编译框架
Melis 的编译框架基于 Kbuild 构建扩展,以 Makefile 作为核心。
4.2 代码框架
- 【ekernel】内核文件夹;
- 【elibrary】公共库文件夹,一些本平台自定义库代码,例如eLIBs_stdio、eLIBs_string 等C 接口,syscall.c 中封装了应用层调用内核函数的接口;
- 【emodules】主要存放一些模块;
- 【include】头文件目录,用于集中管理各层头文件;
- 【out】打包临时文件夹,打包时会把各个方案的插件、配置、驱动文件都拷贝到本文件夹进行打包,生成的img 固件也放在以各方案命名的文件夹下;
- 【projects】projects 文件夹不再用作应用代码的存放文件夹,现主要用于存放各方案的配置、启动可执行文件,如sys_config.fex、boot0.bin;
- 【scripts】主要用于存放编译相关的文件,如解压交叉编译器的脚本
toolchain.mk ,编译必经文件 Makefile.build,make menuconfig 时显示的字符型UI 界面源码等环境脚本; - 【tools】本文件夹用于存放打包脚本pack_img.sh,打包工具集,打包工具的源码,phoenix 系列烧录软件调用的插件usbtools、cardtools 等;
4.3 核心组件
item | component | description |
---|
RTOS Core | rtthread/zephyr | - | BSP API | melis driver | - | Device Driver | rtt driver | - | POSIX | rtt posix | dfs_posix/pthread | VFS | dfs | dfs_register 支持对devfs设备文件系统和其他文件系统的注册 | Filesystem | cdfs/dev/fs/exfatfs/fatfs/minfs/ntfs/udffs | - | Network | lwip/uip/net_tools | - | Display | mod_display | - | Audio | eyesee-mpp | - | MultiMedia | eyesee-mpp/v4l2 | - | OTA | aw ota | - |
5. Nuttx
NuttX是一个成熟的实时操作系统,2019年在小米的推动下正式进入Apache基金会。Nuttx SDK 是全栈 SDK,它支持众多的核心组件。
小米为什么选择NuttX? 市场上开源或商业的RTOS非常多,为什么我们最终选择NuttX作为Xiaomi Vela的基础?主要有以下几个原因: NuttX对POSIX标准有原生兼容:NuttX是可商用化RTOS中唯一一个对POSIX API有原生支持的实时操作系统,所以很多Linux社区的开源软件可以很方便的移植到NuttX上,这样可以极大的简化开源软件移植,方便代码复用,降低学习曲线,其它RTOS需要适配层把POSIX API转成内部API,而且通常只兼容一小部分的POSIX接口。
- 完成度高:NuttX集成了文件系统、网络协议栈、图形库和驱动框架,减少开发成本。
- 模块化设计:所有组件甚至组件内部特性,都可以通过配置Kconfig来调整或关闭,可按需对系统进行裁剪,适用于不同产品形态。
- 代码精简:所有组件都是从头编码,专门对代码和数据做了优化设计。
- 轻量级:虽然NuttX实现了传统操作系统的所有功能,但是最终生成的代码尺寸还是可以很小(最小配置不到32KB,最大配置不超过256KB)。
- 和Linux系统的兼容性:因为NuttX整体设计、代码组织,编译过程和Linux非常接近,将会极大地降低Android/Linux开发者的迁移成本。
- 活跃开放的社区:很多厂商(比如小米、Sony,乐鑫、NXP等)和开源爱好者都在积极回馈社区。
相关资源:
1.关于NuttX操作系统 2.为何小米去了NuttX这一瓢?
5.1 Make 环境使用
- Download and install toolchain
$ curl https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz
- Build and install qemu
$ git clone https://github.com/qemu/qemu
$ cd qemu
$ ./configure --target-list=riscv32-softmmu,riscv64-softmmu
$ make
$ sudo make install
- Configure and build NuttX
$ mkdir ./nuttx; cd ./nuttx
$ git clone https://github.com/apache/incubator-nuttx.git
$ git clone https://github.com/apache/incubator-nuttx-apps.git
$ cd nuttx
$ make distclean
$ ./tools/configure.sh rv-virt:nsh
$ make
- Run the nuttx with qemu
cd C:\C-Sky\CDK\CSKY\qemu
$ qemu-system-riscv32 -M virt -cpu rv32 -smp 8 -bios none -kernel nuttx -nographic
or
$ qemu-system-riscv64 -M virt -cpu rv64 -smp 8-bios none -kernel nuttx -nographic
运行结果: 相关资源:
1.源码:apache/incubator-nuttx 2.源码:apache/incubator-nuttx-apps 3.源码:nuttx_rv32-vega-lite.git 4.指南:qemu-rv/rv-virt/ readme 5.指南:incubator-nuttx readme 6.指南:NuttX Doc 7.指南:NuttX Wiki 8.指南:NuttX、ROS 系列
5.2 编译框架
Nuttx 的编译框架基于 Kbuild 构建扩展,以 Makefile 作为核心。
5.3 代码框架
5.4 核心组件
item | component | description |
---|
RTOS Core | nuttx | - | BSP API | nuttx driver | - | Device Driver | fs driver | - | POSIX | nuttx posix | file/socket/semaphore/pthread | VFS | vfs | - | Filesystem | fs | fat/binfs/cromfs/ hostfs/littlefs/ nfs/nxffs/procfs/romfs/ smartfs/spiffs/tmpfs/unionfs/userfs | Network | socket/tcp/udp/netdev | - | Display | mod_display | - | Audio | - | - | MultiMedia | videomode | - | OTA | - | - |
6. FreeRTOS
FreeRTOS 属于中型 SDK,他包含调度 Core,以及部分的核心组件。
一个FreeRTOS 系统主要由BSP驱动+内核+组件组成:
- 内核包含多任务调度、内存管理、任务间通信的功能,
- 组件包含网络协议、外设支持等。
相关资源:
1.源码:FreeRTOS/FreeRTOS 2.源码:FreeRTOS-Labs 3.源码:aws/amazon-freertos 4.指南:FreeRTOS
6.1 核心组件
item | component | description |
---|
RTOS Core | FreeRTOS-Kernel | - | Middle Component | FreeRTOS-Plus-TCP / FreeRTOS-FAT / FreeRTOS-SESIP / FreeRTOS-LoRaWAN / FreeRTOS-POSIX / FreeRTOS-Cellular-Interface / coreMQTT / corePKCS11 / coreHTTP / coreJSON / coreSNTP | - |
相关资源:
1.FreeRTOS repositories
7. uCos
uCos 属于中型 SDK,他包含调度 Core,以及部分的核心组件。 2016年,Micrium被Silicon Labs收购,Silicon Labs宣布将 Micrium μC/OS 系列产品开源,。开源后 uCos 转为在 weston-embedded 上维护,而 Silicon Labs 只维护商业的 Micrium OS 。Weston embedded 是一家由前Micrium工程师们创立的企业,目前做两件事情—μC/OS Support和Consulting Services。
相关资源:
1.ucos overview 2.silabs micrium 3.weston-embedded micrium 4.Micrium的uCOS全家桶将推出免费商业授权 5.谈谈开源之后的μC/OS~
7.1 核心组件
item | component | description |
---|
RTOS Core | uC-OS2/uC-OS3 | - | Middle Component | uC-FS/uC-USBH/uC-USBD/uC-TCP-IP | - |
相关资源:
1.uCos repositories 2.uCos Documentation
8. NXP
NXP MCUXpresso SDK 是全栈 SDK,它支持众多的核心组件。
MCUXpresso SDK软件支持包的内容拆分成多个子项目并发布到单独的代码仓库。子项目分类如下:
- 提供处理器头文件,启动代码,板级配置模板和外设驱动代码的基础代码库。
- 基于基础代码库,提供嵌入式实时操作系统源代码的项目。
- 基于基础代码库的上层组件,又称为中间件项目。
- 基于上述项目的板级应用代码库。
相关资源:
1.mcux-sdk README 2.mcux-sdk 3.NXPmicro repositories 4.MIMXRT1060-EVK:i.MX RT1060评估套件
9. ST
ST STM32CubeH7 SDK 是全栈 SDK,它支持众多的核心组件。
相关资源:
1.STM32CubeH7 SDK 2.STMicroelectronics repositories
10. Zephyr
Zephyr 是 Linux 基金会发布的物联网操作系统,主要面向资源受限的物联网设备。
Zephyr SDK 是全栈 SDK,它支持众多的核心组件。
相关资源:
1.Zephyr 官方网站 2.Zephyr-Overview-2022Q1-Public 3.Zephyr Project Documentation 4.zephyrproject-rtos/zephyr 5.zephyr repositories 6.Zephyr 项目中文文档 7.RTOS zephyr的入门学习:基于ST Nucleo-H743ZI2开发板的开发环境的搭建 8.关于 Zephyr 的一些认识
11. AWorks
AWorksOS 是周立功推出的工业智能物联开发平台。
AWorks SDK 是全栈 SDK,它支持众多的核心组件。
相关资源:
1.AWorksOS平台架构 2.AWorksOS系列开发套件 3.AWTK开源GUI引擎
12. T-Head Yoc SDK
YoC (Yun on Chip) 是平头哥基于 RTOS 的全栈软件平台,能够支撑产品级的软件开发。YoC 不支持离线下载,只能通过 CDK 或者 yoctools 在线下载。
YoC 平台划分四个层次:
- 硬件规范层: CSI 层定义了 SoC 外部设备的统一接口,芯片对接好 CSI 接口,就可以支持 YoC 的软件系统。
- 核心服务层: 包含了 Rhino 操作系统内核、设备管理框架、低功耗框架、高级安全可信计算(TEE)、网络协议、蓝牙协议栈、虚拟文件系统、网络管理器等。核心服务层采用独立模块化设计,用户可以根据应用需求,自由组装。
- 应用组件层: YoC 平台提供了大量的应用组件,面向不同的应用领域,满足不同技术需求的选择,提供更加丰富的软件生态。每个组件包都是支持用户定制化配置、独立编译、统一安装。
- 业务框架层: YoC 提供多种应用领域中软件框架,进一步简化应用方案的开发难度。目前,YoC 平台中提供了 IoT 上云框架、智能语音框架、视觉AI框架。
相关资源: 1.详细的 YoC 介绍可以参考:YoC 平台概述
12.1 IDE 环境使用
YoC 的开发最好在 CDK 环境下进行,因为只有在 CDK 中才能方便的在线下载各种软件包。
相关资源: 1.IDE:CDK 2.指南:使用 CDK 开发快速上手
12.2 Make 环境使用
具体过程如下:
sudo pip install https://yoctools.oss-cn-beijing.aliyuncs.com/yoctools-1.0.60.tar.gz -i https://mirrors.163.com/pypi/simple/
mkdir ch2601_freertos_demo
cd ch2601_freertos_demo
yoc init
yoc list -r
yoc install ch2601_freertos_demo
cd ch2601_freertos_demo/solution/ch2601_freertos_demo
make
make 过程中会自动下载对应 toolchain 安装到 ~/.thead/ 目录 :
$ ls ~/.thead/
csky-abiv2-elf riscv64-unknown-elf
相关资源: 1.指南:使用yoc命令快速上手 2.指南:搭建开发环境 3.帮助:YocTools
12.3 编译框架
YoC 的编译框架是使用 scons 实现的,make 命令最后调用的是 scons 。相关的 scons 脚本保存在 /usr/local/lib/python2.7/dist-packages/yoctools/ 目录。
12.4 代码框架
YoC ch2601_freertos_demo 总体的文件结构如下图: 部分核心代码的框架如下图:
components/chip_ch2601 某款芯片,csi_driver api 的具体实现board/ch2601_evb 某块单板,配置对应的管脚components/freertos 某款rtos,csi_kernel api 的具体实现components/csi/csi1 or csi/csi2 ,csi_driver api 和 csi_kernel api 的头文件声明components/hal_csi/csi1 or hal_csi/csi2 ,hal api 的具体实现,把 csi_driver api 和 csi_kernel api 包装成 hal apicomponents/aos_hal hal api 的头文件声明components/aos/src/adapter 把原生 rtos api,又封装成了一套 aos api,作用和 csi_kernel api 类似components/aos/src/device/device.c 封装了一套 device-driver 架构components/drivers/csi1 or drivers/csi2 在上述的 device-driver 架构之上,实现相应的 driver。该driver是更抽象一层的包装,具体会调用 csi_driver 层的函数components/aos/src/device/*.c 实现了对上面 driver 创建的 device 的调用
相关资源:
1.指南:最小系统 2.指南:编写CSI驱动 3.指南:开发YoC组件
12.5 核心组件
item | component | description |
---|
RTOS Core | rhino/freertos/ucos | - | BSP API | csi_driver | - | Device Driver | aos driver | - | POSIX | aos posix | pthread/sem/timer/fs/socket/IO/MQ | VFS | aos vfs | vfs_register_fs() vfs_register_driver() 支持对设备和文件系统的封装,比较简陋 | Filesystem | FATFS/SPIFFS/littlefs | - | Network | LWIP/SAL/netmgr | - | Display | lvgl | - | Audio | MiniAlsa | - | MultiMedia | libav | - | OTA | FOTA | - |
相关资源: 1.YoC 核心模块列表 2.YoC 第三方组件 3.YoC 软件包搜索 4.YoC 软件包仓库 5.T-HEAD 应用商城 6.T-HEAD 芯片空间
13. T-Head CSI SDK
CSI (Chip Software Interface) 是平头哥给 E907 默认提供的 SDK,是一个最小功能的 SDK,包含了 RTOS 调度 Core 的支持,以及一系列驱动的底层 API。
具体分为三个层次:
- CSI-CORE:定义了CSKY CPU和相关紧耦合外设的标准接口
- CSI-DRIVER:定义了常用的驱动的标准接口 (注意这里的驱动只是实现了一系列的底层 API,没有统一驱动模型的包装)
- CSI-KERNEL: 定义实时操作系统的标准接口
相关资源: 1.详细的 CSI 介绍可以参考:CSI 设备驱动接口
13.1 IDE 环境使用
平头哥默认支持 CDK、CDS 两种 IDE,可以看到 CSI SDK 每个 Project 目录下都有 CDK/CDS 的工程实例:
- CDS: C-SKY Development Suit,是以 Eclipse + CDT/MCU 为基础的修改版本。主要用于平头哥 Linux SDK 的开发,用于 RTOS 开发也是没有问题的。
- CDK: C-SKY Development Kit,是平头哥专为 MCU、RTOS 应用开发的极简整合开发环境。
CDK 和 CDS 的区别有两点:
- 支持一些自定义的性能测试工具前端。
- 支持连接平头哥的在线软件包仓库。
IDE 和 Make 环境的使用本质上是一样的,这里就不展开了。最大的不同还是 CDK 可以方便的在线下载软件包。
相关资源: 1.IDE:CDK、CDS 2.指南:平头哥剑池CDK快速上手指南
13.2 Make 环境使用
具体过程如下:
export PATH=/home/ubuntu/e907/Xuantie-900-gcc-elf-newlib-x86_64-V2.2.4/bin:$PATH
cd SmartL_E907FD-R1S2-V1.7.9/projects/examples/hello_world
make
2、使用 qemu 运行:
cd C:\C-Sky\CDK\CSKY\qemu
qemu-system-riscv32 -cpu e907fd -machine smartl -kernel "Z:\rtos\T-HEAD\SmartL_E907FD-R1S2-V1.7.9\projects\examples\hello_world\out\smartl_e907fd-hello_world.elf" -nographic
qemu 的更多用法:
qemu-system-riscv32 --help
qemu-system-riscv32 -cpu help
qemu-system-riscv32 -machine help
相关资源: 1.源码:SmartL_E907 2.工具链:Xuantie-900-gcc-V2.2.4 3.QEMU:玄铁QEMU
13.3 编译框架
CSI SDK 是以工程目录下的 Makefile 和 sub.mk 来组织编译的。任何配置的改动都需要手工修改 Makefile 文件。
13.4 代码框架
SDK 内具体的文件夹组织如下所示:
CSI 有个很有特点的功能是把不同的 RTOS 调度核心封装成了统一的 csi_kernel 接口。核心代码的框架如下图:
13.5 核心组件
item | component | description |
---|
RTOS Core | rhino/freertos/ucos csi_kernel | 封装成统一的 csi_kernel 接口 | BSP API | csi_driver | - |
|