1. 程式人生 > >《RT-Thread 核心入門教程》第一章

《RT-Thread 核心入門教程》第一章

RT-Thread介紹

RT-Thread是一個來自中國的開源物聯網作業系統,它提供了非常強的可伸縮能力:從一個可以執行在ARM Cortex-M0晶片上的極小核心,到中等的ARM Cortex-M3/4/7系統,甚至是運行於MIPS32、ARM Cortex-A系列處理器上功能豐富系統。

1 簡介

RT-Thread包含了一個自有的、傳統的硬實時核心:可搶佔的多工實時排程器,訊號量,互斥量,郵箱,訊息佇列,訊號等。當然,它和傳統的實時作業系統還存在著三種不同:

  • 裝置驅動框架;
  • 軟體元件;
  • 應用模組

裝置驅動框架更類似一套驅動框架,涉及到UART,IIC,SPI,SDIO,USB從裝置/主裝置,EMAC,NAND快閃記憶體裝置等。它會把這些裝置驅動中的共性抽象/抽取出來,而驅動工程師只需要按照固定的模式實現少量的底層硬體操作及板級配置。通過這樣的方式,讓一個硬體外設更容易地對接到RT-Thread系統中,並獲得RT-Thread平臺上的完整軟體棧功能。

軟體元件是位於RT-Thread核心上的軟體單元,例如命令列(finsh/msh shell),虛擬檔案系統(FAT,YAFFS,UFFS,ROM/RAM檔案系統等),TCP/IP網路協議棧(lwIP),Libc/POSIX標準層等。一般的,一個軟體元件放置於一個目錄下,例如RT-Thread/components目錄下的資料夾,並且每個軟體元件通過一個 SConscript檔案來描述並被新增到RT-Thread的構建系統中。當系統配置中開啟了這一軟體元件時,這個元件將被編譯並連結到最終的RT-Thread韌體中。

注:隨著RT-Thread 3.0中的包管理器開啟,越來越多的軟體元件將以package方式出現在RT-Thread平臺中。而RT-Thread平臺更多的是指:

  • RT-Thread核心;
  • shell命令列;
  • 虛擬檔案系統;
  • TCP/IP網路協議棧;
  • 裝置驅動框架;
  • Libc/POSIX標準層。

更多的IoT軟體包則以package方式被新增到RT-Thread系統中。

應用模組,或者說使用者應用(User Application,UA)是一個可動態載入的模組:它可以獨立於RT-Thread韌體而單獨編譯。一般的,每個UA都包含一個main函式入口;一個它自己的物件容器,用於管理這個應用的任務/訊號量/訊息佇列等核心物件,建立、初始化、銷燬等。更多關於UA的資訊,請訪問另外一個 git 倉庫 瞭解。

2 支援的晶片架構

RT-Thread支援數種晶片體系架構,已經覆蓋當前應用中的主流體系架構:

  • ARM Cortex-M0
  • ARM Cortex-M3/M4/7
  • ARM Cortex-R4
  • ARM Cortex-A8/A9
  • ARM920T/ARM926 etc
  • MIPS32
  • x86
  • Andes
  • C-Sky
  • RISC-V
  • PowerPC

3 許可證

RT-Thread is free software; you can redistribute it and/or modify it under terms of the GNU General Public License version 2 as published by the Free Software Foundation. RT-Thread RTOS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with RT-Thread; see file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.

As a special exception, including RT-Thread RTOS header files in a file, instantiating RT-Thread RTOS generics or templates, or linking other files with RT-Thread RTOS objects to produce an executable application, does not by itself cause the resulting executable application to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the executable file might be covered by the GNU Public License.

RT-Thread始終以開源的方式發展,所有釋出的程式碼都遵循GPLv2+許可證。注意,GPLv2+的意思是,它是GPLv2的一個修改版本,添加了一定的例外。簡單的來說,當使用RT-Thread時,除了RT-Thread釋出的原始碼以外的程式碼,可以不用遵循GPLv2的方式開原始碼。

4 編譯

RT-Thread使用了scons做為自身的編譯構建系統,並進行一定的定製以滿足自身的需求(可以通過scons --help檢視RT-Thread中額外新增的命令)。在編譯RT-Thread前,請先安裝Python 2.7.x及scons。

截至目前,RT-Thread scons構建系統可以使用命令列方式編譯程式碼,或者使用scons來生成不同IDE的工程檔案。在使用scons時,需要對構建配置檔案(rtconfig.py)中如下的變數進行配置:

  • CROSS_TOOL 指定希望使用的工具鏈,例如gcc/keil/iar.
  • EXEC_PATH 工具鏈的路徑.

注:在SConstruct檔案中:

RTT_ROOT 這個變數指向了RT-Thread的釋出原始碼根目錄。如果你僅計劃編譯bsp目錄下的target,這個RTT_ROOT可以使用預設配置。另外,你也可以設定同名的環境變數來指向不同的RT-Thread原始碼根目錄。

當你把相關的配置都配置正確後,你可以在具有目標目錄下(這個目錄應包括rtconfig.py、SContruct檔案)執行以下命令:

scons

從而簡單地就編譯好RT-Thread。

如果你希望使用IDE來編譯RT-Thread,你也可以使用命令列:

scons --target=mdk/mdk4/mdk5/iar/cb -s

來生成mdk/iar等的工程檔案。而後在IDE中開啟project字首的工程檔案來編譯RT-Thread。

注意:RT-Thread的scons構建系統會根據配置標頭檔案rtconfig.h來裁剪系統。例如,如果你關閉了rtconfig.h中的lwIP定義(通過註釋掉#define RT_USING_LWIP的方式),則scons生成的IDE工程檔案中將自動不包括lwIP相關的檔案。而在RT-Thread 3.0版本中,可以通過menuconfig的方式來配置整個系統,而不需要再手工更改rtconfig.h配置標頭檔案。