作者簡介
baron (網名:代碼改變世界ctw),九年手機安全/SOC底層安全開發經驗。擅長trustzone/tee安全產品的設計和開發
思考:1、我們知道arm有2個執行狀態:aarch32/aarch64,他們之間是如何跳轉,如何切換的/2、我們知道arm有4個安全狀態:secure security/non-secure security/ Root/ Realm,他們之間是如何跳轉,如何切換的?3、我們知道arm有4個特權級別:secure security/non-secure security,他們之間是如何跳轉,如何切換的?4、在開機啟動是,有著不同的階段,如bootrom、bootloader、kernel,他們都是64位的?他們之間都是怎樣跳轉和切換的?5、uboot怎樣切換到Linux Kernel的?
說明:1、以下知識點,看似簡單和清晰,實則零散在整個10000多頁的 ARM TRM之中,另外也有許多理論知識在實踐中不常見。所以也許會有描述不準確的地方(但但致都是準確的),精確的學習還是請以 ARM TRM官方文檔為準。2、本文講解的主要是armv8/armv9架構。
1、前言
注意本文標題所說的“程序之間的跳轉模型”,主要講解如下這么樣子的大系統大程序之中:
啟動時鏡像之間是如何跳轉的
runtime是鏡像之間是如何跳轉的
閱讀本文需要一點點基礎,請自行補習:
4個特權等級、4個安全狀態、2個執行狀態
啟動模型中的BL1 BL2 BL31 BL32 BL33的概念
2、4個特權等級/4個安全狀態之間的跳轉模型
先弄懂最最最基礎的本質原理,10000多頁的 ARM TRM文檔散裝了很多場景, 我們總結之后再總結,最后濃縮成了下面這一張框圖,通常我們也只要理解下面這張圖就可以了:
其中:
EL0的所有異常(同步異常和異步異常)都可以將core切到EL1中
EL1的所有異步異常、hvc/smc指令 都可以將core切到EL2中
EL2的所有異步異常、smc指令 都可以將core切到EL3中
所有的返回指令,都是ERET
其實呢,下面這種情況也是可以出現的,(只不過呢查略大多數代碼,我都沒有找到這樣使用的例子)
另外呢svc也是可以被trapped到EL2的,EL3調用ERET返回EL1時,也是可以被EL2 trapped的,即下面這種情況也是可以出現的, (只不過呢查略大多數代碼,我也沒有找到這樣使用的例子)
3、啟動時鏡像之間的跳轉模型
由于這些底層的東西,都會和具體的SOC廠家的設計強相關,所以我們也就只好介紹common的場景。
很多人都學習過Secure Boot或是即將學習Secure boot,他們的重點也許都放在了如何簽名驗簽的地方。那么你知道BL1到BL2是怎樣跳轉?uboot到kernel是怎樣跳轉的嗎?
以下是參在TF-A代碼做出的總結,當然了也是比較理想的場景:
可是在你的實際使用中:
BL32可能不是S-EL1,也是有可能是S-EL2的
BL33可能不是EL1,也是有可能是EL2的
BL1 BL2 BL33 BL32 BL33 每一級鏡像,也許不是aarch64的,也許是aarch32的
如上的場景中,看似也就那么回事吧,無非就是不同特權等級之間,調用同步異常指令或返回指令,切來切去而已。那么如果是相同的特權等級,那么如何切換呢?
如uboot(EL1)到kernel(EL1), 至少有以下三種方式(其實我還能列出第4種第5種,這里留給大家思考):
如下再展示了一個稍微復雜的場景,aarch64和aarch32摻雜地使用,也許你的SOC就是這樣設計的哦:
4、runtime程序之間的跳轉模型
在runtime模型中,你的cpu可能會同時在aarch32和aarch64之間運行,aarch32和aarch64之間的切換,其實也很好理解,模型如下所示,就是進入高特權等級,切換一下cpu context而已。
燃鵝,以上依然是最理想的場景吧。在實際使用中,也許你會有各種各樣的需求,例如:我不想跳轉特權等級,但還想切換執行狀態。比如你的SOC實現定義了EL3,你的EL3既aarch32的程序,也有aarch64的程序,那么兩個程序是如何切換的呢?
這個時候,利用同步異常/異步異常的知識點已經無法滿足需求了,可能就得利用架構中的warm reset技術了。例如,你可以在aarch32的程序中去寫RMREL3的相關比特,觸發warm reset, cpu復位進入提前設置好的RVBAREL3的地址出,進入aarch64程序。其實還真有很多廠家,使用這種方式完成的鏡像之間的跳轉。
原文標題:armv8/armv9不同特權程序之間的跳轉模型
文章出處:【微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
-
ARM
+關注
關注
134文章
9309瀏覽量
375056 -
Linux
+關注
關注
87文章
11462瀏覽量
212803 -
runtime
+關注
關注
0文章
17瀏覽量
2270
原文標題:armv8/armv9不同特權程序之間的跳轉模型
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
Arm下一代指令架構“Armv9”已經問世
ARMv8架構資料分享
ARMv8架構的兩種執行狀態分別是什么
ARM Cortex-A系列ARMv8-A程序員指南
重磅!Arm正式推出Armv9架構

淺談ARM發布Armv9的三大改進
Arm微架構之Armv9時代
Armv8架構和Armv9架構的區別分析
Armv9與Armv8服務器有何不同
Armv8架構及虛擬化介紹
ARMv8工作模式有哪些

評論