開源免費的FreeRTOS由Richard Barry在WHIS工作時創(chuàng)建,WHIS基于FreeRTOS的功能模型,通過完整的HAZOP分析,確定了功能模型和API中的所有的弱點,減輕所有薄弱環(huán)節(jié),并采用IEC 61508 SIL 3的開發(fā)生命周期,重新設(shè)計實現(xiàn)了SAFERTOS。
SAFERTOS及其配套的設(shè)計保證包(DAP)為安全應(yīng)用提供卓越的性能和安全關(guān)鍵的可靠性,同時消耗最少的資源。
由于FreeRTOS內(nèi)核和SAFERTOS共享相同的功能模型,升級很容易。許多開發(fā)者基于FreeRTOS內(nèi)核實現(xiàn)產(chǎn)品原型,并在正式開發(fā)階段升級為SAFERTOS。
SAFERTOS和FreeRTOS共享一個功能模型,使用起來非常相似。然而與FreeRTOS相比,SAFERTOS:
? 函數(shù)中執(zhí)行更多的錯誤檢查
? 大多數(shù)API調(diào)用返回狀態(tài)碼
? 要求應(yīng)用提供所有堆棧、任務(wù)控制塊和隊列緩沖區(qū)存儲空間
? 使用靜態(tài)分配,不提供heap函數(shù)
? 默認使用處理器的MPU(Memory Protection Unit)功能
? 重新設(shè)計,滿足安全關(guān)鍵軟件的需求
因此,當將一個FreeRTOS項目遷移到SAFERTOS時,需要做一些工作來啟動和運行內(nèi)核。
FreeRTOS內(nèi)部隱藏了內(nèi)存管理實現(xiàn),如任務(wù)創(chuàng)建時動態(tài)分配堆棧,在內(nèi)核啟動時為內(nèi)核數(shù)據(jù)分配緩沖區(qū)等。在FreeRTOS中也可以配置使用靜態(tài)分配機制,由應(yīng)用程序提供相應(yīng)的內(nèi)存,但大多數(shù)用戶更傾向于由FreeRTOS實現(xiàn)分配功能。
FreeRTOS還提供了許多編譯時選項,允許應(yīng)用程序設(shè)計人員通過Hook函數(shù)機制在內(nèi)核中插入額外的功能代碼,在任務(wù)切換時運行,如任務(wù)創(chuàng)建或刪除時,調(diào)用Hook函數(shù)。
API區(qū)別
FreeRTOS和SAFERTOS中API函數(shù)名稱基本一致,參數(shù)不同,如任務(wù)創(chuàng)建函數(shù),
FreeRTOS中實現(xiàn):
SAFERTOS中實現(xiàn):
WHIS提供了如何從FreeRTOS升級到SAFERTOS的說明文檔,詳細介紹了FreeRTOS和SAFERTOS API差異。
升級文檔及簡單的SAFERTOS用戶手冊,可以訪問https://www.highintegritysystems.com/down-loads/manuals-datasheets/safertos-datasheet-downloads/注冊下載。
RTOS定義的抽象類型名稱及# include文件也不相同。在FreeRTOS中,一個應(yīng)用程序文件需要包含所使用的API(任務(wù)、隊列、信號量等)相應(yīng)的頭文件,而使用的SAFERTOS應(yīng)用只需要包含SafeRTOS_API.h頭文件。
靜態(tài)分配和MPU
SAFERTOS要求應(yīng)用程序提供管理任務(wù)和內(nèi)核對象所需的內(nèi)存空間。
例如,F(xiàn)reeRTOS和SAFERTOS都創(chuàng)建了運行在最低優(yōu)先級的空閑任務(wù),來確保系統(tǒng)中永遠有可調(diào)度的就緒任務(wù)??臻e任務(wù)不能阻塞,可以將空閑任務(wù)用于“后臺”應(yīng)用程序功能,實現(xiàn)節(jié)能或其他特定的應(yīng)用需求。顯然,空閑任務(wù)需要一個任務(wù)堆棧及任務(wù)控制塊。FreeRTOS從堆中分配這些空間(除非配置使用靜態(tài)分配機制),而SAFERTOS要求應(yīng)用提供這些緩沖區(qū)空間。部分原因是在安全關(guān)鍵系統(tǒng)中,靜態(tài)分配通常是首選,因為它更容易保證所有運行時環(huán)境都有足夠的內(nèi)存,但另一個需要考慮的事實是,絕大多數(shù)情況下,SAFERTOS接口層假定使用MPU。
使用MPU意味著應(yīng)用設(shè)計人員需要監(jiān)督所有內(nèi)存結(jié)構(gòu)在地址中的確切位置,內(nèi)核任務(wù)和隊列緩沖區(qū)顯然是其中重要的一部分。此外,MPU機制通常對保護區(qū)域的對齊和大小有限制,分配的空間需滿足MPU要求,避免資源浪費。
在FreeRTOS中,在調(diào)用xTaskCreate之前需確保heap中有足夠的空閑空間,使用SAFERTOS時,需要靜態(tài)地為堆棧和任務(wù)TCB預(yù)分配并顯式定位一個相應(yīng)大小和對齊的緩沖區(qū),然后將指向這些結(jié)構(gòu)的指針傳遞給xTaskCreate任務(wù)參數(shù)。
任務(wù)特權(quán)和內(nèi)核函數(shù)封裝層
每個SAFERTOS任務(wù)被分配一個操作權(quán)限:特權(quán)或非特權(quán)模式。特權(quán)任務(wù)與內(nèi)核代碼具有相同的權(quán)限。許多CPU支持特權(quán)和非特權(quán)模式,限制非特權(quán)模式下使用的CPU指令,用戶可以通過軟件陷阱、異常或中斷在不同特權(quán)模式直接切換。
通常,將盡可能多的應(yīng)用程序運行在非特權(quán)模式,每個任務(wù)都提供一組MPU參數(shù),這些參數(shù)通常任務(wù)切換時配置相應(yīng)的MPU域。
SAFERTOS任務(wù)創(chuàng)建時,為每個任務(wù)添加了一個額外的MPU區(qū)域,用于訪問用戶任務(wù)堆棧,應(yīng)用程序須確保任務(wù)的堆棧符合MPU關(guān)于對齊和尺寸的限制。
非特權(quán)任務(wù)還需要具有對內(nèi)核API函數(shù)的執(zhí)行訪問權(quán)。內(nèi)核API工作在特權(quán)模式, SAFERTOS的每個API函數(shù)都有一個特權(quán)升級封裝,通常使用系統(tǒng)調(diào)用異常機制實現(xiàn)。API封裝層將在需要時臨時提升任務(wù)權(quán)限,允許非特權(quán)任務(wù)執(zhí)行內(nèi)核API,執(zhí)行完成后返回任務(wù)原先的權(quán)限。因為實際的API函數(shù)與調(diào)用時的名稱不同,調(diào)試不方便。
盡管FreeRTOS可以使用類似的權(quán)限升級機制來支持MPU,但僅提供了有限的MPU移植層支持。在SAFERTOS中,我們假定應(yīng)用程序任務(wù)運行在非特權(quán)模式。在FreeRTOS的MPU移植中,任務(wù)默認以特權(quán)模式運行,但是任務(wù)可以選擇創(chuàng)建為restricted,即非特權(quán)模式。
嵌入式系統(tǒng)不斷擴大的互聯(lián)性導(dǎo)致了復(fù)雜的操作環(huán)境和越來越多的攻擊媒介,增加了安全需求。SAFERTOS基于FreeRTOS功能模型,用戶可以快速從FreeRTOS升級到功能安全的SAFERTOS。更多視頻、文檔及示例工程,可以訪問WHIS官網(wǎng)下載。
-
內(nèi)核
+關(guān)注
關(guān)注
4文章
1427瀏覽量
42210 -
開源
+關(guān)注
關(guān)注
3文章
3874瀏覽量
45183 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4400瀏覽量
66345 -
FreeRTOS
+關(guān)注
關(guān)注
14文章
495瀏覽量
65700
原文標題:FreeRTOS與SAFERTOS的差異
文章出處:【微信號:麥克泰技術(shù),微信公眾號:麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
轉(zhuǎn):學(xué)習(xí)FreeRTOS前的準備工作
轉(zhuǎn):第4章 FreeRTOS操作系統(tǒng)介紹
9b96的safertos在線仿真運行故障中斷
求《FreeRTOS源碼詳解與應(yīng)用開發(fā)——基于STM32》書本配套的ppt分享?
如何實現(xiàn)FreeRTOS應(yīng)用到安全SAFERTOS的遷移
請問STM32CubeMX是否支持SafeRTOS?
亞馬遜發(fā)布新版本FreeRTOS 1.3.2,修復(fù)了FreeRTOS中的漏洞
SAFERTOS在醫(yī)療設(shè)備中的應(yīng)用
針對TI汽車處理器新的SAFERTOS庫評估包

基于TC499的SAFERTOS免費評估包

基于dsPIC33的SAFERTOS示例評估包

評論