轉自:https://icyshuai.blog.csdn.net/article/details/72468109
歷經一年多時間的系統整理合補充,《手機安全和可信應用開發指南:TrustZone與OP-TEE技術詳解 》一書得以出版,書中詳細介紹了TEE以及系統安全中的所有內容,全書按照從硬件到軟件,從用戶空間到內核空間的順序對TEE技術詳細闡述,讀者可從用戶空間到TEE內核一步一步了解系統安全的所有內容,同時書中也提供了相關的示例代碼,讀者可根據自身實際需求開發TA。目前該書已在天貓、京東、當當同步上線,鏈接如下(麻煩書友購書時能給予評論,多謝多謝):
京東購買地址
當當購買地址
天貓購買地址
非常感謝在此期間大家的支持以及各位友人的支持和幫助!!!。
為方便和及時的回復讀者對書中或者TEE相關的問題的疑惑,也為了大家能有一個統一的交流平台。我搭建了一個簡單的論壇,網址如下:
https://www.huangtengxq.com/discuz/forum.php
關於您的疑問可在“相關技術討論“”中發帖,我會逐一回復。也歡迎大家發帖,一起討論TEE相關的一些有意思的feature。共同交流。同時該論壇中也會添加關於移動端虛擬化的相關技術的板塊,歡迎各位共同交流學習
ATF將系統啟動從最底層進行了完整的統一划分,將secure monitor的功能放到了bl31中進行,這樣當系統完全啟動之后,在CA或者TEE OS中觸發了smc或者是其他的中斷之后,首先是遍歷注冊到bl31中的對應的service來判定具體的handle,這樣可以對系統所有的關鍵smc或者是中斷操作做統一的管理和分配。ATF的code boot整個啟動過程框圖如下:
在上述啟動過程中,每個Image跳轉到寫一個image的方式各不相同,下面將列出啟動過程中每個image跳轉到下一個image的過程:
1. bl1跳轉到bl2執行
在bl1完成了bl2 image加載到RAM中的操作,中斷向量表設定以及其他CPU相關設定之后,在bl1_main函數中解析出bl2 image的描述信息,獲取入口地址,並設定下一個階段的cpu上下文,完成之后,調用el3_exit函數實現bl1到bl2的跳轉操作,進入到bl2中執行.
2.bl2跳轉到bl31執行
在bl2中將會加載bl31, bl32, bl33的image到對應權限的RAM中,並將該三個image的描述信息組成一個鏈表保存起來,以備bl31啟動bl32和bl33使用.在AACH64中,bl31位EL3 runtime software,運行時的主要功能是管理smc指令的處理和中斷的主力,運行在secure monitor狀態中
bl32一般為TEE OS image,本章節以OP-TEE為例進行說明
bl33為非安全image,例如uboot, linux kernel等,當前該部分為bootloader部分的image,再由bootloader來啟動linux kernel.
從bl2跳轉到bl31是通過帶入bl31的entry point info調用smc指令觸發在bl1中設定的smc異常來通過cpu將全向交給bl31並跳轉到bl31中執行。
3.bl31跳轉到bl32執行
在bl31中會執行runtime_service_inti操作,該函數會調用注冊到EL3中所有service的init函數,其中有一個service就是為TEE服務,該service的init函數會將TEE OS的初始化函數賦值給bl32_init變量,當所有的service執行完init后,在bl31中會調用bl32_init執行的函數來跳轉到TEE OS的執行
4.bl31跳轉到bl33執行
當TEE_OS image啟動完成之后會觸發一個ID為TEESMC_OPTEED_RETURN_ENTRY_DONE的smc調用來告知EL3 TEE OS image已經完成了初始化,然后將CPU的狀態恢復到bl31_init的位置繼續執行。
bl31通過遍歷在bl2中記錄的image鏈表來找到需要執行的bl33的image。然后通過獲取到bl33 image的鏡像信息,設定下一個階段的CPU上下文,退出el3然后進入到bl33 image的執行
————————————————
版權聲明:本文為CSDN博主「漂流的猴子」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/shuaifengyun/article/details/72468109