軟體包在高級語言中非常常見,很多高級語言都有對應的軟體包平臺,比如 Python 的 PyPi,Ruby 的 Gems 等等。軟體包生態對於一門語言的選擇至關重要,因為這些軟體包具有很強的可重用性,模塊化程度很高,極大的方便應用開發者在最短時間內,打造出自己想要的軟體。
從 工具 的角度去看軟體包,我們很容易聯想到高級動物與低級動物的差別:無外乎就是 使用和製造工具 的熟練程度。這個道理對於我們程式設計師世界也同樣適用,比如高級的程式設計師和初級程式設計師的差距可以歸納為:開發工具和軟體包的熟練程度上,甚至在於是否會 創造 適用面廣的軟體包(圓輪子)或開發工具。
所以,想要成為高級程式設計師就快來使用、創造軟體包吧~
2、軟體包的定義RT-Thread 軟體包:運行於 RT-Thread 物聯網作業系統平臺上,面向不同應用領域的 通用軟體組件 。軟體包由描述信息,原始碼或庫文件組成。
RT-Thread 同時提供了 開放的 軟體包平臺,這裡存放了官方提供或開發者提供的軟體包。該平臺為開發者提供了眾多可重用軟體包的選擇,這也是 RT-Thread 生態的重要組成部分。
RT-Thread 為開發者提供的全面的使用教程,詳情如下:
4、軟體包匯總RT-Thread 已經支持的軟體包數量已經達到 40+。所有軟體包已經按照軟體功能的角度,在 menuconfig 中進行了分類。每個分類下的軟體包都可以在 menuconfig->RT-Thread online packages 菜單裡對應的子菜單下找到。
為了降低大家的上手門檻,每個軟體包在其項目首頁都有詳細的使用說明文檔及示例代碼。
4.1 物聯網相關的軟體包物聯網(IoT) 是 RT-Thread 當前非常重視一個環節,與其相關的軟體包也非常龐大。你所開發的任何物聯網應用,幾乎都可以在這裡找到對應的軟體包,目前包括如下:
Paho MQTT:基於 Eclipse 開源的 Paho MQTT,對於做了很多功能及性能優化,比如:增加了斷線自動重連功能,採用 pipe 模型,支持非阻塞 API,支持 TLS 加密傳輸等等;
WebClient:簡單易用的 HTTP 客戶端,支持 HTTP GET/POST 等常見請求功能,支持 HTTPS ,斷點續傳等功能;
mongoose:嵌入式 Web 伺服器網絡庫,類似嵌入式世界裡的 Nginx 。授權許可不夠友好,商業需要收費;
WebTerminal:網友 @armink 開發的,可以在瀏覽器訪問 Finsh/MSH Shell 的軟體包,甚至是手機端;
cJSON:超輕量級的 JSON 解析庫;
ljson:網友 @qiaoqidui 開發的 json 到 struct 的解析,輸出庫;
ezXML: XML 文件解析庫,目前還不支持解析 XML 數據;
nanopb:Protocol Buffers 格式數據解析庫,Protocol Buffers 格式比 JSON、XML 格式資源佔用更少;
GAgent:接入機智雲的軟體包;
Marvell WiFi:Marvell WiFi 驅動;
Wiced WiFi:Wiced 接口的 WiFi 驅動;
CoAP:移植 libcoap 的 CoAP 通信軟體包;
nopoll:移植的開源 WebSocket 通信軟體包;
netutils:實用的網絡調試小工具集合,包括:ping、TFTP、iperf、NetIO、NTP、Telnet 等;
OneNet:與中國移動 OneNet 雲對接的軟體包;
4.2 安全相關的軟體包安全一直是 RT-Thread 非常重視一個領域,尤其是在 RT-Thread 3.0 IoT OS 發布以後。接入網絡的設備對於網絡安全需求更是強烈,主要軟體包:
mbedtls:ARM 公司開源的、可移植的適合嵌入式領域的 SSL 庫,一些物聯網包中的一些加密通信都會依賴它;
libsodium:現代化的、可移植的、易於使用的加密庫,libsodium 的目標是提供構建高層密碼學工具所需的核心算法;
TinyCrypt:輕量級、可配置的加密庫,支持 MD5、base64、AES、SHA1、SHA256 算法;
4.3 腳本語言相關的軟體包高級語言中的一些特性非常人性化,也很大程度上降低的開發門檻,但一直受限於嵌入式的資源。隨著 MCU 技術的逐步發展,資源也是越來越多了。未來,也許 C 將不在是 MCU 編程的主流選擇。目前 RT-Thread 支持的腳本語言如下:
JerryScript:超輕量級的 JavaScript 引擎;
MicroPython:針對嵌入式領域的 Python 語言實現軟體包。這塊也是 RT-Thread 最近一直在熱推的技術,只要是支持的 RT-Thread 並有一定資源(ROM: 190KB, RAM: 8KB)的開發板,都可以跑 MicroPython 在官網文檔中能找到 RTT 最新出爐的《MicroPython 開發手冊》。MicroPython 現在也被廣泛應用於產品原型驗證、教育、創客 DIY、硬體測試等領域;
4.4 多媒體相關的軟體包Openmv:基於 MicroPython 的開源的機器視覺庫;
mupdf:網友 @rtoslab 移植的輕量級 PDF, XPS, E-book解析/渲染庫。用 RTT DIY 一個 Kindle 不是夢;
4.5 工具類軟體包這裡主要是一些輔助開發、調試的實用工具。這些專業化的工具,使用以後能夠很大程度上提高大家的開發效率,節省我們程式設計師的寶貴開發時間。
CmBacktrace:網友 @armink 開源的 ARM Cortex-M 系列 MCU 的 HardFault 錯誤追蹤庫。目前已對 RTT 做了無縫對接,不用在修改任何移植代碼,下載即用;
EasyFlash:網友 @armink 開源的輕量級 Flash 快閃記憶體庫,非常適用於物聯網產品的參數存儲、日誌記錄的場景;
EasyLogger:網友 @armink 開源的超輕量級日誌庫。日誌支持異步輸出模式,各級別日誌格式(包括顏色)可獨立設置,並支持日誌關鍵詞過濾功能。極大的方便的開發者的調試過程。
SystemView:可以實時查看、追蹤、分析 RT-Thread 各線程等資源使用情況,對於性能分析很有幫助。這裡有很多是網友 @ArdaFu 的貢獻;
4.6 系統相關的軟體包系統類的軟體包,更多的是與作業系統精密聯繫在一起的軟體組件:
RTGUI:RT-Thread GUI 繪圖引擎。RT-Thread 的 Persimmon 柿餅 UI 組件,就依賴於該軟體包;
Persimmon UI:適合嵌入式的,支持手勢識別、滑動特效等類 Android 的 UI 庫;
lwext4:來自網友 @parai 移植的,適合嵌入式的 ext2/3/4 文件系統庫;
partition:一個簡單的適合塊設備的分區管理庫;
SQLite:一個高可靠的、適合嵌入式領域的SQL資料庫引擎。SQLite 也是 Android 內部集成的資料庫,有一定的應用領域;
RT-Thread Insight:簡寫是 RTI ,一個用於 RT-Thread 的探測工具,用來幫助分析系統的內部行為;
LittlevGL2RTT:網友 @liu2guang 移植的 LittlevGl GUI 庫,這是一個最近新出的嵌入式 GUI 庫;
4.7 外設庫和驅動類軟體包4.8 其他的軟體包Fastlz:一個可移植的、實時的壓縮庫;
miniLZO:一個類 LZO 壓縮庫的小型實時壓縮庫;
QuickLZ:一個號稱是世界上壓縮速度最快的壓縮庫;
MultiButton:由網友 @liu2guang 移植的簡單易用的,基於事件驅動型的按鍵驅動庫,可無限量擴展按鍵;
CanFestival:Canfestival (一個開源的 CANopen 協議棧)在 RT-Thread 系統上的移植,由網友 @gbcwbz 移植。提供了 CANopen 的一些示例,力圖做到開箱即用;
samples:RT-Thread 的示例代碼。這是一個降低新手入門學習門檻的軟體包,裡面從基礎、內核、文件系統、網絡以及驅動這幾個方面,由淺入深,逐個引導大家去上手使用 RT-Thread 。不僅有詳細代碼及注釋,還有完善的文檔。把這個軟體包都學會,就算已經入 RT-Thread 的門了;
hello:這是一個軟體包的模板,如果想要製作軟體包,需要可以借鑑它。
5、軟體包的未來從去年 9 月 RT-Thread 3.0 發布至今,RT-Thread 官方團隊和我們開發者在半年多的時間裡積累下來 40 多個軟體包足以說明的 RT-Thread 軟體生態的強大。當然我們並沒有滿足於此,未來已經有更多的、更高質量的軟體包在我們開放計劃中了,例如:
軟體包的積累將會是一個量變到質變過程,能夠匯集到更多大家常用的軟體組件。真正做到,底層使用 RT-Thread 作業系統,上層使用搭積木方式開發應用。
當然,距離這個目標還是有一定的距離。RT-Thread 作為國內最為活躍嵌入式開源社區,深刻體會到了開放的心態所能產生的價值。期待更多的人來使用、反饋甚至是創建自己的軟體包。換個角度去想,也許今天你的分享所產生的積累,未來可能會是你解決明天困難的「鑰匙」。
最後,借用一句歌詞:如果人人都貢獻(包括反饋)軟體包,嵌入式將變成美好的明天