一個專為資源受限的物聯網 (IoT) 和嵌入式裝置打造的超輕量級即時作業系統。核心佔用空間小於 10 KB,最低 RAM 需求 2 KB,採用可搶占的優先級排程。

建置產物位於 build/ :

TinyOS 在 QEMU mps2-an385 目標上運行 (ARM Cortex-M3, 4 MB flash, 4 MB RAM):

中斷追蹤的預期輸出:重複的成功例外返回行確認排程器正在運行,SysTick 正在計時,以及 PendSV 上下文切換正在乾淨地完成。

當 ~/mbedtls 存在時,TLS 支援會自動啟用。若要使用不同的路徑:

Shell 設定 ( include/tinyos/shell.h ):

TinyOS 提供兩個精簡的相容層,允許標準的可移植程式碼在 TinyOS 上進行編譯和運行,只需進行最少的變更。

將 src/posix/posix_threads.c 加入您的建置。

不支援:pthread_cancel、執行緒局部儲存 (pthread_key_* )、遞迴互斥鎖 (返回 ENOTSUP)。

設定 ( include/tinyos/posix_threads.h ):

將 src/posix/posix_socket.c 加入您的建置。

close() 重導:定義 TINYOS_POSIX_WRAP_CLOSE 後再包含標頭檔,將 close(fd) 映射到 posix_sock_close(fd)。

不支援:select / poll / epoll、非阻塞模式 ( O_NONBLOCK )、IPv6 ( AF_INET6 返回 EAFNOSUPPORT)。

透過 mbedTLS 支援 TCP 上的 TLS 1.2/1.3 和 UDP 上的 DTLS 1.2。透過 `-DTINYOS_TLS_ENABLE` 在建置時啟用,並連結 mbedTLS。

完整的 MQTT 3.1.1,具備每則訊息的 QoS 傳遞保證。

MQTT 可靠性設定 ( include/tinyos/mqtt.h ):

檔案系統使用僅限中繼資料的日誌記錄 (ordered 模式)。在修改任何 inode、位元圖或目錄區塊之前,日誌記錄會寫入分割區開頭的專用 32 區塊 WAL 區域。在崩潰後的下一次掛載時,fs_mount 會重播日誌記錄,並恢復一致的狀態。

每個資料區塊都帶有一個記憶體中的參考計數,該計數在掛載時從 inode 表重建。寫入共享區塊 ( refcount > 1 ) 會先分配一個私有副本 — 原本區塊的計數會遞減,所有變更都會發生在新區塊上。

fs_snapshot() 透過在單一日誌記錄交易中複製來源 inode (相同的區塊指標,增加的參考計數) 來建立一個原子性的時間點快照。要麼完整提交快照,要麼什麼都不變。

TinyOS 提供一個通用的 HAL,將所有特定於架構的暫存器存取隱藏在穩定的 C 介面之後。架構在編譯時透過 ARCH Makefile 變數選取;核心程式碼中不會出現 #ifdef 保護。

在啟動時註冊板載週邊設備;核心和電源管理器透過 hal_platform_get() 查詢表格,而不是使用弱符號。

hal_platform_t 為 uart[4]、flash、gpio、spi[4]、i2c[4] 和 power 提供了插槽。任何 NULL 指標都表示「在此板上不存在」。

include/tinyos/shell.h — 互動式 shell:

include/tinyos/mqtt.h — MQTT 可靠性:

TLS — 需要 mbedTLS;透過以下方式啟用:

系統需求:最低 2 KB RAM · 僅核心 < 10 KB ROM

日誌記錄檔案系統 ( src/filesystem.c ) — 寫入前日誌 (WAL) 保護所有中繼資料寫入 (inode、位元圖、超級區塊、目錄)。磁碟上的格式已更新至 FS_VERSION 0x00020000。日誌記錄佔用從區塊 2 開始的 32 個區塊;fs_mount 在將控制權交給應用程式之前,會重播任何已提交但尚未應用的交易。僅中繼資料 (ordered) 日誌記錄在寫入放大率低的情況下,同時保證在寫入期間任何時間點發生電源故障或重置後檔案系統的一致性。

寫時複製區塊共享 ( src/filesystem.c ) — 每個資料區塊都帶有一個記憶體中的參考計數 (在掛載時從 inode 表重建)。寫入共享區塊會靜默地分配一個私有副本;共享區塊的計數會遞減。fs_snapshot(source, name) 在單一日誌記錄交易中建立一個原子性的時間點快照 — 要麼全部提交,要麼什麼都不變。新的公開 API:fs_snapshot() 和 fs_get_block_refcount() (請參閱 include/tinyos.h)。

通用 HAL ( hal/ ) — 兩層硬體抽象層將核心與 ARM Cortex-M 特定組件分離。