RT-Thread移植入門學習

澆築菜鳥發表於2022-01-19

一、簡介

RT-Thread 是一款主要由中國開源社群主導開發的開源實時作業系統(許可證GPLv2)。實時執行緒作業系統不僅僅是一個單一的實時作業系統核心,它也是一個完整的應用系統,包含了實時、嵌入式系統相關的各個元件:TCP/IP協議棧,檔案系統,libc介面,圖形使用者介面等。
官網地址:https://www.rt-thread.org/document/site/#/

二、版本介紹

RT-Thread,全稱是 Real Time-Thread,顧名思義,它是一個嵌入式實時多執行緒作業系統,基本屬性之一是支援多工,允許多個任務同時執行並不意味著處理器在同一時刻真地執行了多個任務。事實上,一個處理器核心在某一時刻只能執行一個任務,由於每次對一個任務的執行時間很短、任務與任務之間通過任務排程器進行非常快速地切換(排程器根據優先順序決定此刻該執行的任務),給人造成多個任務在一個時刻同時執行的錯覺。在 RT-Thread 系統中,任務通過執行緒實現的,RT-Thread 中的執行緒排程器也就是以上提到的任務排程器。

RT-Thread 主要採用 C 語言編寫,淺顯易懂,方便移植。它把物件導向的設計方法應用到實時系統設計中,使得程式碼風格優雅、架構清晰、系統模組化並且可裁剪性非常好。針對資源受限的微控制器(MCU)系統,可通過方便易用的工具,裁剪出僅需要 3KB Flash、1.2KB RAM 記憶體資源的 NANO 版本(NANO 是 RT-Thread 官方於 2017 年 7 月份釋出的一個極簡版核心);而對於資源豐富的物聯網裝置,RT-Thread 又能使用線上的軟體包管理工具,配合系統配置工具實現直觀快速的模組化裁剪,無縫地匯入豐富的軟體功能包,實現類似 Android 的圖形介面及觸控滑動效果、智慧語音互動效果等複雜功能。

相較於 Linux 作業系統,RT-Thread 體積小,成本低,功耗低、啟動快速,除此以外 RT-Thread 還具有實時性高、佔用資源小等特點,非常適用於各種資源受限(如成本、功耗限制等)的場合。雖然 32 位 MCU 是它的主要執行平臺,實際上很多帶有 MMU、基於 ARM9、ARM11 甚至 Cortex-A 系列級別 CPU 的應用處理器在特定應用場合也適合使用 RT-Thread。

從官網就可以看出RT-Thread有三個版本,分別是標準版、Nano版、Smart版

  1. 標準版
    物聯網作業系統是指以作業系統核心(可以是 RTOS、Linux 等)為基礎,包括如檔案系統、圖形庫等較為完整的中介軟體元件,具備低功耗、安全、通訊協議支援和雲端連線能力的軟體平臺,RT-Thread 就是一個 IoT OS。

    它具體包括以下部分:
  • 核心層: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. Nano版
    RT-Thread Nano 是一個極簡版的硬實時核心,它是由 C 語言開發,採用物件導向的程式設計思維,具有良好的程式碼風格,是一款可裁剪的、搶佔式實時多工的 RTOS。其記憶體資源佔用極小,功能包括任務處理、軟體定時器、訊號量、郵箱和實時排程等相對完整的實時作業系統特性。適用於家電、消費電子、醫療裝置、工控等領域大量使用的 32 位 ARM 入門級 MCU 的場合。
    下圖是 RT-Thread Nano 的軟體框圖,包含支援的 CPU 架構與核心原始碼,還有可拆卸的 FinSH 元件:

    支援架構:ARM:Cortex M0/ M3/ M4/ M7 等、RISC-V 及其他。
    功能:執行緒管理、執行緒間同步與通訊、時鐘管理、中斷管理、記憶體管理。

  2. Smart版
    RT-Thread Smart 是基於 RT-Thread 作業系統上的混合作業系統,簡稱為 rt-smart,它把應用從核心中獨立出來,形成獨立的使用者態應用程式,並具備獨立的地址空間(32 位系統上是 4G 的獨立地址空間)。
    以下是 rt-smart 的整體結構框圖,在硬體平臺的基礎上通過 MMU、系統呼叫的方式把整個系統分成了核心態及使用者態。

三、學習方式

進入文件幫助中心,可以看到官網的資料已經很詳細了,只需要看一下,基本都找到相應的學習資料。如下圖所示:

瞭解各個版本之間的差異後便可以選擇相應的版本進行學習,這裡我選擇的是標準版,有想了解其他版本的小夥伴,看看官網的資料然後在找找相應的部落格基本就明白了,Nano版和Smart版相對比較簡單一些。

四、標準版下載

  1. 版本選擇
    進入標準版文件中心,找到版本選擇,如下圖所示:

    釋出版本 3.1.x:
  • 做產品 / 專案:適合公司做產品或者專案
    • 若產品已經使用的是較早的釋出版本,那麼在維護產品時,建議仍然在舊的版本上進行維護
    • 如果是新的產品,那麼建議使用 3.1.x 最新發布版本
  • 學習 / 研究:適合新手入門學習
    釋出版本 4.0.x:
  • 做產品 / 專案:適合公司做產品或者專案
    • 4.0.x 支援 SMP,適合有多核需求的產品或專案
  • 學習 / 研究:適合新手入門學習、適合有入門經驗的 RT-Thread 開發者
    我選擇的版本是GitHub lts-v3.1.x 分支,小夥伴本可以根據自己的需求進行選擇,如下圖所示:
  1. 下載原始碼
    下載有三種方式,這裡我以壓縮包的形式進行下載,如下圖所示:

五、檔案目錄分析

Name 描述
BSP 基於各種開發板移植的板支援包
components 元件,如FinshShell、檔案系統、協議棧等。
documentation 相關文件,如編碼樣式、doxygen等。
examples 相關示例程式碼
include RT執行緒核心的標頭檔案
libcpu CPU移植程式碼,如ARM/MIPS/RISC-V等。
src RT執行緒核心的原始檔。
tools The script files for the RT-Thread command build tool.

到這裡基本的介紹就算完成了,接下來便可以進行RT-Thread的移植了,有需求瞭解的小夥伴可以看我下一篇筆記。

參看文獻

RT-Thread文件中心:https://www.rt-thread.org/document/site/#/

相關文章