admin管理员组

文章数量:1531705

1. RT-Thread

RT-Thread 是国内出产的一款非常优秀的 RTOS。它和 FreeRTOSuCos 等经典 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 环境使用

具体使用过程如下:

  • 1、下载源码:
git clone https://github/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
  • 2、编译:
cd rt-thread/bsp/nuclei/gd32vf103_rvstar/
scons -c
scons
  • 3、连上 rv-star 开发板,运行程序:
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 核心组件

itemcomponentdescription
RTOS Corert-thread-
BSP APIbsp driver-
Device Driverrtt driver-
POSIXrtt posixdfs_posix/pthread/delay/io/ipc/libdl/signal
VFSdfsdfs_register
支持对devfs设备文件系统和其他文件系统的注册
FilesystemFatFS/RomFS/DevFS-
NetworkAT/Lwip/Netdev/Sal-
Displaylvgl-
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 StudioIAR Embedded WorkbenchLauterbach Trace32Compiler-DevPlatformIO 等一系列 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 环境使用

具体使用过程如下:

  • 1、下载源码:
git clone https://github/Nuclei-Software/nuclei-sdk

设置工具链路径:

export PATH=~/rtos/rv-star/gcc/bin/:$PATH
  • 2、编译:
$ 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
  • 3、下载运行:

启动 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  Makefileponents  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 核心组件

itemcomponentdescription
RTOS Corertthread/freertos/ucos-
BSP APInuclei 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 驱动,还包括了一些基本的核心组件。

资源:

  • 更多 Vega 信息请参考:VEGA 官网

3.1 IDE 环境使用

Vega SDK 直接使用原生的 Eclipse + CDT/MCU IDE。

相关资源:
1.IDE:Eclipse IDE for Embedded C/C++ Developers

3.2 Make 环境使用

具体使用过程如下:

  • 1、下载源码:
git clone https://github/open-isa-rv32m1/rv32m1_sdk_riscv

设置工具链路径:

export RISCV32GCC_DIR=~/rtos/vega/riscv32-unknown-elf-gcc/
  • 2、编译:
$ cd rv32m1_sdk_riscv/boards/rv32m1_vega/rtos_examples/freertos_generic/ri5cy/riscvgcc
$ ./clean.sh
$ ./build_debug.sh
  • 3、下载运行:

启动 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 核心组件

itemcomponentdescription
RTOS Corefreertos-
BSP APIrv32m1 driver-
Middlewarefatfs/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网络架构
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 核心组件

itemcomponentdescription
RTOS Corertthread/zephyr-
BSP APImelis driver-
Device Driverrtt driver-
POSIXrtt posixdfs_posix/pthread
VFSdfsdfs_register
支持对devfs设备文件系统和其他文件系统的注册
Filesystemcdfs/dev/fs/exfatfs/fatfs/minfs/ntfs/udffs-
Networklwip/uip/net_tools-
Displaymod_display-
Audioeyesee-mpp-
MultiMediaeyesee-mpp/v4l2-
OTAaw 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 环境使用

  1. Download and install toolchain
  $ curl https://static.dev.sifive/dev-tools/riscv64-unknown-elf-gcc-8.3.0-2019.08.0-x86_64-linux-ubuntu14.tar.gz
  1. Build and install qemu
  $ git clone https://github/qemu/qemu
  $ cd qemu
  $ ./configure --target-list=riscv32-softmmu,riscv64-softmmu
  $ make
  $ sudo make install
  1. Configure and build NuttX
  $ mkdir ./nuttx; cd ./nuttx
  $ git clone https://github/apache/incubator-nuttx.git
  $ git clone https://github/apache/incubator-nuttx-apps.git
  $ cd nuttx
  $ make distclean
  $ ./tools/configure.sh rv-virt:nsh
  $ make
  1. 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 核心组件

itemcomponentdescription
RTOS Corenuttx-
BSP APInuttx driver-
Device Driverfs driver-
POSIXnuttx posixfile/socket/semaphore/pthread
VFSvfs-
Filesystemfsfat/binfs/cromfs/ hostfs/littlefs/ nfs/nxffs/procfs/romfs/ smartfs/spiffs/tmpfs/unionfs/userfs
Networksocket/tcp/udp/netdev-
Displaymod_display-
Audio--
MultiMediavideomode-
OTA--

6. FreeRTOS

FreeRTOS 属于中型 SDK,他包含调度 Core,以及部分的核心组件。

一个FreeRTOS 系统主要由BSP驱动+内核+组件组成:

  • 内核包含多任务调度、内存管理、任务间通信的功能,
  • 组件包含网络协议、外设支持等。

相关资源:

1.源码:FreeRTOS/FreeRTOS
2.源码:FreeRTOS-Labs
3.源码:aws/amazon-freertos
4.指南:FreeRTOS

6.1 核心组件

itemcomponentdescription
RTOS CoreFreeRTOS-Kernel-
Middle ComponentFreeRTOS-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 核心组件

itemcomponentdescription
RTOS CoreuC-OS2/uC-OS3-
Middle ComponentuC-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 环境使用

具体过程如下:

  • 1、首先安装 yoctools
sudo pip install https://yoctools.oss-cn-beijing.aliyuncs/yoctools-1.0.60.tar.gz -i https://mirrors.163/pypi/simple/
  • 2、使用 yoctools 查询并下载软件包:
mkdir ch2601_freertos_demo
cd ch2601_freertos_demo
yoc init
yoc list -r
yoc install ch2601_freertos_demo
  • 3、编译:
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 api
  • components/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 核心组件

itemcomponentdescription
RTOS Corerhino/freertos/ucos-
BSP APIcsi_driver-
Device Driveraos driver-
POSIXaos posixpthread/sem/timer/fs/socket/IO/MQ
VFSaos vfsvfs_register_fs()
vfs_register_driver()
支持对设备和文件系统的封装,比较简陋
FilesystemFATFS/SPIFFS/littlefs-
NetworkLWIP/SAL/netmgr-
Displaylvgl-
AudioMiniAlsa-
MultiMedialibav-
OTAFOTA-

相关资源:
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 环境使用

具体过程如下:

  • 1、进入工程目录,编译:
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 是以工程目录下的 Makefilesub.mk 来组织编译的。任何配置的改动都需要手工修改 Makefile 文件。

13.4 代码框架

SDK 内具体的文件夹组织如下所示:

CSI 有个很有特点的功能是把不同的 RTOS 调度核心封装成了统一的 csi_kernel 接口。核心代码的框架如下图:

13.5 核心组件

itemcomponentdescription
RTOS Corerhino/freertos/ucos
csi_kernel
封装成统一的 csi_kernel 接口
BSP APIcsi_driver-

本文标签: 主流RTOS