為應(yīng)用程序配置 SSU 的第一步是確定所需的系統(tǒng)分區(qū)。SSU 為應(yīng)用程序子系統(tǒng)的分區(qū)提供了三個(gè)層次:
- ZONE:每個(gè) ZONE 決定芯片上所有 C29 CPU 的調(diào)試訪(fǎng)問(wèn)權(quán)限。ZONE 的設(shè)計(jì)目的是使多個(gè)代碼所有者或?qū)嶓w能夠開(kāi)發(fā)和維護(hù)駐留在同一芯片上的應(yīng)用程序的不同分區(qū)。例如,如果嵌入式應(yīng)用的某個(gè)方面由第三方供應(yīng)商擁有和維護(hù),那么系統(tǒng)就可以分為兩個(gè) ZONE:
- ZONE1:主用戶(hù) ZONE,由主系統(tǒng)開(kāi)發(fā)商擁有;
- ZONE2:輔助用戶(hù) ZONE,由第三方開(kāi)發(fā)商擁有。
這種分區(qū)使第三方開(kāi)發(fā)商能夠在同一芯片上開(kāi)發(fā)、調(diào)試和維護(hù)應(yīng)用程序功能,而無(wú)需訪(fǎng)問(wèn)主用戶(hù)的代碼和數(shù)據(jù)資產(chǎn)。此外,每個(gè)用戶(hù) ZONE 還提供兩級(jí)調(diào)試授權(quán):
- 部分調(diào)試 - 允許使用 CPU 調(diào)試命令,如停止、步進(jìn)和斷點(diǎn),但不能訪(fǎng)問(wèn)內(nèi)存
- 完全調(diào)試 - 允許訪(fǎng)問(wèn) ZONE 內(nèi)所有 LINK 的內(nèi)存位置。
例如,第三方開(kāi)發(fā)人員等輔助用戶(hù)可在 ZONE2 中調(diào)試應(yīng)用模塊,同時(shí)也可獲得 ZONE1 的部分調(diào)試訪(fǎng)問(wèn)權(quán)限,這樣輔助用戶(hù)就能在上下文中有效調(diào)試應(yīng)用,而無(wú)需訪(fǎng)問(wèn)主用戶(hù)的資產(chǎn)。
每個(gè)器件都有 3 個(gè)可用的用戶(hù) ZONE:ZONE1、ZONE2 和 ZONE3。ZONE1 是主用戶(hù) ZONE;ZONE2 和 ZONE3 是輔助用戶(hù) ZONE。
- 沙盒 (STACK):沙盒用于在 CPU 內(nèi)提供安全隔離。每個(gè)沙盒都與 SSU 中的一個(gè) STACK 相關(guān)聯(lián)。每個(gè)沙盒在 CPU 中都有一個(gè)專(zhuān)用的物理?xiàng)V羔?,其他沙盒無(wú)法訪(fǎng)問(wèn)該指針,同時(shí)還有一個(gè)專(zhuān)用的棧內(nèi)存 AP 區(qū)域,只有屬于該沙盒的代碼對(duì)該區(qū)域具有讀取/寫(xiě)入權(quán)限。從一個(gè) STACK 跨到另一個(gè) STACK 時(shí),需要使用特殊的 C29 CPU 門(mén)指令。編譯器必須在每個(gè)函數(shù)的入口和出口以及函數(shù)調(diào)用或分支處插入這些指令。這些機(jī)制可提供安全保護(hù),防止試圖重定向代碼執(zhí)行或操縱棧的惡意軟件攻擊。
- 沙盒由 SSU STACK 以及與 STACK 相關(guān)的所有內(nèi)容(包括棧內(nèi)存 AP 區(qū)域)組成。每個(gè) STACK 屬于一個(gè) ZONE,但一個(gè) ZONE 可以包含多個(gè) STACK。每個(gè) CPU 有三個(gè)預(yù)定義的 STACK:
- STACK0:此 STACK 保留供 TI 內(nèi)部使用,無(wú)法由用戶(hù)配置。
- STACK1:此 STACK 主要用于引導(dǎo)加載程序,但也可以與其他用戶(hù)應(yīng)用程序代碼相關(guān)聯(lián)。STACK1 始終與 ZONE1 關(guān)聯(lián),僅包含一個(gè) LINK (LINK1)。
- STACK2:這是主用戶(hù) STACK。STACK2 始終與 ZONE1 關(guān)聯(lián)。STACK2 始終包含 LINK2,但也可以包含其他 LINK。
- 應(yīng)用模塊 (LINK):應(yīng)用模塊是系統(tǒng)應(yīng)用程序的基本分區(qū)。每個(gè)模塊均由單個(gè) SSU LINK、一個(gè)或多個(gè)包含 LINK 代碼的代碼內(nèi)存 AP 區(qū)域、與 LINK 相關(guān)的所有數(shù)據(jù)內(nèi)存 AP 區(qū)域以及與模塊相關(guān)的所有外設(shè)和中斷組成。通常,代碼 AP 區(qū)域包含 .text 和其他包含代碼的鏈接器輸出段,數(shù)據(jù) AP 區(qū)域包含
.bss
、.const
和其他包含數(shù)據(jù)和變量的鏈接器輸出段。
- 每個(gè) LINK 都能啟用 SSU 內(nèi)存保護(hù),提供 CPU 中其他 LINK 的安全保護(hù)。每個(gè) AP 區(qū)域都為每個(gè) LINK 定義了訪(fǎng)問(wèn)權(quán)限。這些權(quán)限會(huì)根據(jù) LINK ID 指令,在每條執(zhí)行內(nèi)存訪(fǎng)問(wèn)的指令中實(shí)時(shí)執(zhí)行。需要相互功能安全隔離的功能可以放在單獨(dú)的模塊中。如果需要信息安全隔離,則將這些模塊置于單獨(dú)的沙盒中;如果不需要,則可將這些模塊置于同一沙盒中。
- 每個(gè) CPU 有三個(gè)預(yù)定義的 LINK
- LINK0:此 LINK 保留供 TI 內(nèi)部使用,無(wú)法由用戶(hù)配置。
- LINK1:此 LINK 主要用于引導(dǎo)加載程序,但也可以與其他用戶(hù)應(yīng)用程序代碼相關(guān)聯(lián)。
CPU1.LINK1
具有一些特殊的固定權(quán)限,除了 AP 定義的保護(hù)外,還能訪(fǎng)問(wèn)某些系統(tǒng)配置寄存器。
- LINK2:這是主用戶(hù) LINK。
CPU1.LINK2
是系統(tǒng)安全根 LINK (SROOT),具有特殊的固定權(quán)限,可訪(fǎng)問(wèn)系統(tǒng)配置寄存器和覆蓋控制。該 LINK 通常在 RTOS 級(jí)別執(zhí)行特權(quán)主機(jī)功能。
圖 6-1 展示了單 CPU 單 ZONE 系統(tǒng)上的 SSU 系統(tǒng)分區(qū)示例。在該系統(tǒng)中,RTOS 在 STACK2.LINK2
中運(yùn)行,負(fù)責(zé)初始化系統(tǒng)配置、設(shè)置外設(shè)和中斷,并啟動(dòng)主執(zhí)行循環(huán)。有兩個(gè)控制功能:Control Loop1 和 Control Loop 2。這些控制功能中的每一個(gè)都放在單獨(dú)的應(yīng)用模塊 (LINK) 中,并且兩個(gè)應(yīng)用模塊放在同一沙盒中。在此系統(tǒng)中,兩個(gè)控制功能之間需要物理安全隔離,但不需要信息安全隔離。第四個(gè)模塊承載通信代碼,例如 UART 或 CAN-FD 代碼。由于來(lái)自外部接口的數(shù)據(jù)可能會(huì)對(duì)系統(tǒng)中的其他功能構(gòu)成安全威脅,因此該模塊被置于單獨(dú)的沙盒中。最后,第五個(gè)模塊包含系統(tǒng)中所有其他模塊共享的公共代碼函數(shù)。與該模塊相關(guān)的 LINK 被定義為其他 LINK 的訪(fǎng)問(wèn)保護(hù)繼承 LINK (APILINK)。通用代碼模塊也被置于單獨(dú)的沙盒中,以保持與系統(tǒng)其他部分的信息安全隔離(同時(shí)保持繼承的權(quán)限)。
SysConfig 完全支持多核應(yīng)用。內(nèi)置內(nèi)存分配器工具可自動(dòng)管理多個(gè) CPU 上與應(yīng)用模塊相關(guān)的內(nèi)存區(qū)域,還可管理整個(gè)器件的外設(shè)分配。SysConfig 工具還包括共享內(nèi)存功能,用于定義可在同一 CPU 或多個(gè) CPU 上的模塊之間共享的內(nèi)存區(qū)域。