日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

01_SMC_Calling_Convention(SMCCC)

發布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 01_SMC_Calling_Convention(SMCCC) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引流關鍵詞: PSCI ,Power State Coordination Interface, TF-A,TF-M,ATF,TrustedFirmware,trustzone,TEE,optee,trusty,tlk,lk,armv8,armv9,arm,secureboot,BL31,BL32,BL1,BL2,hypervisor,終端安全,secureboot,security,virtulization

快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈


說明:
官方文檔看著也沒啥意思,屬于規范性文檔,用到時去查詢即可。學習的話只看本篇就行了

目錄

        • 1. 簡介
        • 2 SMC and HVC calling的規定
          • 2.1 Secure Monitor Calls
          • 2.2 Hypervisor Calls
          • 2.3 Fast Calls and Yielding Calls
          • 2.4 32-bit and 64-bit的規定
          • 2.5 Function Identifiers
            • 2.5.1 Fast Calls
            • 2.5.2 Yielding Calls
            • 2.5.3 Conduits
          • 2.6 SMC32/HVC32參數傳遞
          • 2.7 SMC64/HVC64參數傳遞
          • 2.8 SVE, SIMD and floating-point registers
          • 2.9 SMC and HVC immediate value
          • 2.10 Client ID (optional)
            • 2.10.1 SMC calls
            • 2.10.2 HVC calls
          • 2.11 Secure OS ID (optional)
          • 2.12 Session ID (optional)
        • 3 AArch64 SMC and HVC calling conventions

1. 簡介

本文檔定義了在 Armv7 和 Armv8 架構中與安全監視器調用 (SMC) 和管理程序調用 (HVC) 指令一起使用的通用調用機制。

SMC 指令用于生成同步異常,該異常由運行在 EL3 中的 Secure Monitor 代碼處理。參數和返回值在寄存器中傳遞。由安全監視器處理后,由指令產生的調用可以傳遞到受信任的操作系統或安全軟件堆棧中的某個其他實體。

HVC 指令用于生成同步異常,該異常由運行在 EL2 中的管理程序處理。參數和返回值在寄存器中傳遞。管理程序還可以捕獲由來賓操作系統(在 EL1 處)發出的 SMC 調用,從而允許根據需要模擬、傳遞或拒絕調用。

該規范旨在簡化軟件層之間的集成并減少碎片,例如操作系統、管理程序、可信操作系統、安全監視器和系統固件。

2 SMC and HVC calling的規定

2.1 Secure Monitor Calls

在 Arm 架構中,同步控制通過 Secure Monitor Call (SMC) 異常 [1.][2.] 在正常的 Non-secure 狀態和 Secure 狀態之間轉移。 SMC 異常由 SMC 指令 [1.][2.] 生成,并由安全監視器處理。 Secure Monitor 的操作由通過寄存器傳入的參數決定。

2.2 Hypervisor Calls

由操作系統在 EL1 進行的管理程序調用 (HVC) 導致控制同步轉移到 EL2 管理程序,并被視為 HVC 異常。 管理程序的操作由通過寄存器傳入的參數決定。

2.3 Fast Calls and Yielding Calls

定義了兩種類型的調用:

  • Fast Calls 執行原子操作。 從調用 PE 的角度來看,調用似乎是原子的,并在請求的操作完成時返回
  • Yielding Calls 啟動可以被非安全中斷搶占的操作。 調用可以在請求的操作完成之前返回。 附錄 A:Yielding Service提供了一個Yielding call的示例。
2.4 32-bit and 64-bit的規定

對于 SMC 和 HVC,定義了兩個調用約定指令:

  • SMC32/HVC32:32 位接口,可由 32 位或 64 位客戶端代碼使用,最多可傳遞七個 32 位參數。 因為只有 SMC32 和 HVC32 調用用于識別功能標識符范圍,所以 32 位調用約定對于所有兼容系統都是強制性的,無論它們是 32 位還是 64 位系統。 有關更多信息,請參閱第 6.2 節。
  • SMC64/HVC64:64 位接口,只能由 64 位客戶端代碼使用,最多可傳遞 17 個 64 位參數。 SMC64/HVC64 調用預期為 64 位等效于 32 位調用(如果適用)。
2.5 Function Identifiers

函數標識符(Function Identifiers)在每次 SMC 和 HVC 調用的 W0 上傳遞。 它的 32 位整數值指示調用者正在請求哪個函數。 它始終作為第一個參數傳遞給 R0 或 W0 中的每個 SMC 或 HVC 調用。 位 W0[31] 確定調用是快速 (W0[31]==1) 還是屈服 (W0[31]==0)。

2.5.1 Fast Calls

在Fast Calls情況下 (W0[31]==1),位 W0[30:0] 確定:

  • 要調用的服務
  • 要調用的函數
  • 正在使用的調用約定(32 位或 64 位)

32 位值中的幾個位定義了對 Fast Calls 有效的含義,如下圖 所示

2.5.2 Yielding Calls

在 Yielding Call 情況下 (W0[31]==0),可信操作系統 Yielding Calls 被放置在 0x02000000-0x1FFFFFFF 范圍內。

2.5.3 Conduits

除了標準管理程序調用和供應商特定管理程序調用外,預計服務調用將通過 SMC 指令調用。 但是,在某些平臺上,SMC 指令不可用,可以通過 HVC 指令訪問服務。 用于調用服務的方法稱為管道。 表 2-2 描述了哪些管道可用,以及它們如何依賴于
實施的。

但是,SMC 調用約定并未指定使用哪個指令(SMC 或 HVC)來調用特定服務。

2.6 SMC32/HVC32參數傳遞

當使用 SMC32/HVC32 約定時,SMC 或 HVC 指令采用函數標識符和最多七個 32 位寄存器值作為參數,并返回狀態和最多七個 32 位寄存器值。

當從 AArch32 發出 SMC32/HVC32 調用時:

  • A Function Identifier is passed in register R0.
  • Arguments are passed in registers R1-R7.
  • Results are returned in R0-R7.
  • The registers R4-R7 must be preserved unless they contain results, as specified in the function definition.
  • Registers R8-R14 are saved by the function that is called, and must be preserved over the SMC or HVC call.

當從 AArch64 發出 SMC32/HVC32 調用時:

  • A Function Identifier is passed in register W0.
  • Arguments are passed in registers W1-W7.
  • Results are returned in W0-W7.
  • Registers W4-W7 must be preserved unless they contain results, as specified in the function definition.
  • Registers X8-X30 and stack pointers SP_EL0 and SP_ELx are saved by the function that is called, and must be preserved over the SMC or HVC call.

在 SMC 或 HVC 調用后,未使用的結果寄存器和暫存寄存器可能會泄漏信息。 實現可以通過在調用期間保留寄存器狀態或在每個寄存器中返回常量值(例如零)來降低這種風險。
來自 AArch32 和 AArch64 的 SMC32/HVC32 調用對參數和結果使用相同的物理寄存器,因為 AArch64 中的寄存器名稱 W0-W7 映射到 AArch32 中的寄存器名稱 R0-R7。

2.7 SMC64/HVC64參數傳遞

當使用 SMC64/HVC64 約定時,SMC 或 HVC 指令采用函數標識符,最多可達寄存器中的 17 個 64 位參數,并在寄存器中返回狀態和最多 17 個 64 位值。當從 AArch64 發出 SMC64/HVC64 調用時:

  • 函數標識符在寄存器 W0 中傳遞。
  • 參數在寄存器 X1-X17 中傳遞。
  • 結果在 X0-X17 中返回。
  • 寄存器 X4-X17 必須保留,除非它們包含函數定義中指定的結果。
  • 寄存器 X18-X30 和堆棧指針 SP_EL0 和 SP_ELx 由被調用的函數保存,并且必須通過 SMC 或 HVC 調用保留。

在 AArch32 狀態下執行的代碼不能使用此調用約定。 任何來自 AArch32 狀態的 SMC64/HVC64 調用都會收到“Unknown Function Identifier”結果。
未使用做為結果寄存器的寄存器,在 SMC 或 HVC 返回后有泄露信息的風險,未使用做為返回結果的這些寄存器,可以在SMC 或 HVC返回之前,給它們清0來規避這種風險。

2.8 SVE, SIMD and floating-point registers

SVE、SIMD 和浮點寄存器不得用于向任何 SMC/HVC 傳遞參數或接受參數。

SMCCC 實現必須確保所有 SVE、Advanced SIMD、floating-point registers的實時狀態,在所有 SMC 和 HVC 調用中保留。要保留的實時狀態存在于以下寄存器中:

  • Z0-Z31、P0-P15、FFR、FPSR 和 FPCR,如果實現了 SVE 且 FID[16] 為 0
  • V0-V31、FPSR 和 FPCR,如果未實現SVE 或 FID[16] 為 1
2.9 SMC and HVC immediate value

SMC 和 HVC 指令編碼一個立即值(如 smc #0), 它必需是0。 非0的smc調用是reserved的,非0的hyc調用是給hypervisor vendor用的。以下為arm官方的描述:

  • For all compliant calls, an SMC or HVC immediate value of zero must be used.
  • Nonzero immediate values in SMC instructions are reserved.
  • Nonzero immediate values in HVC instructions are designated for use by hypervisor vendors
2.10 Client ID (optional)

這是為 Secure 軟件提供了跟蹤和索引客戶端 ID 的規定

2.10.1 SMC calls

如果一個實現包括在 EL2 執行的管理程序或類似的監控軟件,它可能是需要識別發起 SMC 調用的客戶端操作系統。

  • 一個 16 位客戶端 ID 參數可選地為 SMC定義。
  • 在AArch32 中,客戶端ID 在R7 寄存器中傳遞。
  • 在AArch64 中,客戶端ID 在W7 寄存器中傳遞。
  • 客戶端 ID 0x0000 指定用于來自管理程序本身的 SMC 調用。

客戶端 ID 應在虛擬機管理程序中創建并用于注冊、引用和取消注冊客戶端操作系統到可信操作系統。它不應與 MMU 使用的 VMID 對應。如果實現了客戶端 ID,則在 EL1 處執行的軟件生成的所有 SMC 調用必須由管理程序。在轉發任何 SMC 之前,必須將標識信息插入到 R7 或 W7 寄存器中調用安全監視器。
如果未實施虛擬機管理程序,則不需要來賓操作系統設置客戶端 ID 值

2.10.2 HVC calls

HVC 調用約定會忽略客戶端 ID

2.11 Secure OS ID (optional)

在 S-EL1 存在多個安全操作系統的情況下,調用者必須指定其安全操作系統,其目的在于;

  • 可以為SMC 調用定義一個可選的16 位安全操作系統ID 參數。
  • 在AArch32 中,安全操作系統ID 在R7 寄存器中傳遞。
  • 在AArch64 狀態下,安全操作系統ID 在W7 寄存器中傳遞。
2.12 Session ID (optional)

要在受信任的操作系統或管理程序中支持多個會話,可能需要識別多個相同 SMC 或 HVC 調用的實例:

  • 可以為SMC 和HVC 呼叫定義一個可選的32 位會話ID。
  • 在AArch32 中,會話ID 在R6 寄存器中傳遞
  • 在AArch64 中,會話ID 在W6 寄存器中傳遞

會話 ID 預計由受信任的操作系統或管理程序提供,并由其客戶端使用后續調用

3 AArch64 SMC and HVC calling conventions

本規范定義了用于 SMC 和 HVC 指令的通用調用機制。這些調用機制被稱為 SMC32/HVC32 和 SMC64/HVC64。對于 Arm AArch64:

  • 所有可信任的操作系統和安全監視器的實現都必須符合此規范。
  • 所有hypervisor程序必須符合安全和管理程序服務的調用規范。

總結

以上是生活随笔為你收集整理的01_SMC_Calling_Convention(SMCCC)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美a级黄色片 | 亚洲精品免费在线观看视频 | 国产精品成人一区二区三区电影毛片 | 免费看成人av | 日日摸日日操 | 天天看视频 | 澳门超碰| 一级片小视频 | 欧美日韩国产伦理 | 一区二区成人精品 | 成人av资源在线 | 国产高清日韩 | 日本3级网站 | av国产网站 | 看免费黄色大片 | 深夜福利在线播放 | 国产精品亚洲lv粉色 | 99久久一区| 献给魔王伊伏洛基亚吧动漫在线观看 | 91夫妻在线 | 影音先锋在线中文字幕 | 日本特级淫片 | 国产日韩精品久久 | 日本久久综合网 | 尤物视频在线观看国产 | 国产美女精品在线 | 91久久精品视频 | 91片看| 三级三级久久三级久久 | 四川丰满妇女毛片四川话 | 久久久不卡国产精品一区二区 | 在线一二区 | 小色哥网站| 成人h片在线观看 | 久久影院一区 | 182在线视频 | 天天插日日干 | 四虎影视最新网址 | 久久国内免费视频 | 国产一区免费 | 毛片的网站| 日韩在线视频免费观看 | 男人把女人捅爽 | 亚洲天堂99 | 日韩免费福利视频 | 天天干,夜夜爽 | 日韩在线综合 | 日本少妇中文字幕 | 亚洲欧美国产一区二区三区 | 插吧插吧网 | 色播久久 | 国产综合在线观看 | 精品1区2区| a级黄色片免费看 | 成年人免费在线观看网站 | 久久久久久亚洲精品中文字幕 | 天天操天天射天天 | xxx在线播放 | 亚洲精品一区二 | 天天操天天舔天天干 | 99精品人妻国产毛片 | 色性网站| 久久影院一区二区 | 善良的公与媳hd中文字 | 亚洲情区 | 欧美性极品少妇xxxx | 高清欧美性猛交xxxx | 欧美丝袜一区二区 | 在线视频一区二区三区四区 | 四虎在线影院 | 超级变态重口av番号 | 亚洲av人人夜夜澡人人 | 色综合影视 | 中文字幕亚洲一区二区三区五十路 | 成人福利在线视频 | 四虎影院在线 | 人人精品视频 | 老女人丨91丨九色 | 精品国产乱子伦 | 欧美一级片在线 | 污污网址在线观看 | 人妖天堂狠狠ts人妖天堂狠狠 | 国产精品久久久久桃色tv | 亚洲天堂美女视频 | 国产主播精品在线 | 深夜福利亚洲 | 激情影院内射美女 | 一级特黄色片 | 在线激情小视频 | 国产中文字幕在线免费观看 | 国产第一精品视频 | 成人黄色在线视频 | 秋霞免费av | 久草视频在线免费 | 久久久久免费观看 | 国产88av| 姐姐的朋友2在线 | 国产久在线| 特黄一级毛片 |