CMSIS-DAP - 4 - 介紹 SVC


收錄於 : 關於Ameba的一百篇

前篇 :  CMSIS-DAP -3 -timer



在前篇介紹了 CMSIS-DAP 所用的 gcc SVC 寫法, 大家有沒有覺得好像天書一般.

筆者一開始看的時候也是. 不過努力看懂後, 覺得 SVC 的確是 ARM cortex-M 的一大創舉.

( 以前在 cortex-A 是 IRQ 和 SWI interrupt handler)



SVC 的縮寫是 supervisor call , 顧名思義, 他是想設計像 Linux 這般, 作為 kernel mode 和

user mode 的橋樑 (ioctl). 首先先回顧 privileged mode / un-privileged mode , 和

thread-mode / handler mode 的 狀態圖.



有沒有發現, 當進入 user thread mode 狀態時, 並沒有一條路直接到 privileged thread ,

而是要透過 exception 進到 privileged handler.  且 user thread 並沒有權限直接去改

program CONTROL register. ( user thread mode 是 unprivileged 的 )


那怎麼去進到 所謂的 privileged kernel mode 去管理資源呢.

這時候靠的就是 SVC exception.


SVC 是 exception 的一種, 在之前 vector table 介紹中, 他是 HW exception. '

exception no. 11 , vector table address 0x2C.



怎麼觸發這個 SVC exception 呢? 其實很簡單. 我們看 gcc SVC 中的 SVCCall

__asm volatile                                                               \
  (                                                                            \
    "ldr r12,="#f"\n\t"                                                        \
    "svc 0"                                                                    \
    :               "=r" (__r0), "=r" (__r1), "=r" (__r2), "=r" (__r3)         \
    :                "r" (__r0),  "r" (__r1),  "r" (__r2),  "r" (__r3)         \
    : "r12", "lr", "cc"                                                        \
  );


CPU 只要執行 svc 指令, 就會 觸發 svc exception. 

這邊 R12 在 macro 中, 會對應到要執行 SVC function 的位置. 


而 SVC handler , 在原本 RTOS 那包, 是用 組合語言寫在 HAL_CM0.s




並且在看 code 時不要忘記, cortex-m 從 thread mode 進到 handler mode, 

硬體會自動 push 底下這些進到 stack 


所以 LDMIA 在 load stack 時, load 到 R4 的值, 就是之前 放到 stack 的 R12. 


有了 SVC, 切割 user mode 和 kernel mode, 大家是否有些啟發, 想來做一個 Secure OS?


當然 RTX 是 ARM 所寫的一個簡單基本的 RTOS, 如果想真正做一個 Secure OS. 

可能還得多加一些判斷在 SVC Handler 的入口. 像 Linux ioctl 所做的. 

在 RTX 會發現, 其實 這邊 memory 管理 很基本. 沒有過多的保護. 

SVC function 有可能被污染. 


在 ARM mbed OS 有做一個 用 MPU 來實現的 uvisor  , 但 MPU 保護也有限. 


也因此, 在 cortex-v8M 時, 推出 Trustzone 的機制, 

開始有 secure / non-secure mode 的概念. 能更進一步地來保護系統. 

之後 ARM 解密時, 有機會再和大家介紹. 




留言

熱門文章