OpenVirtualization otzon 學習筆記

目錄

一、文件目錄

  1. secure_main.c(armv8)
    void guest_load_image (va_t src, pa_t dest, unsigned long size)

    src : 安全內核的虛擬地址
    dest : 安全內核的物理地址
    size : 內核的大小

    int main(void )
    Returns

  2. secure_api.h

    int open_session_from_ns (void *param)
    調度命令方法處理來自於非安全世界的建立對話(通信)的請求

    int close_session_from_ns (void *param)
    調度命令方法處理來自於非安全世界的關閉對話(通信)的請求

    int open_session_from_secure (int svc_id, int *session_id)
    調度命令方法處理來自於安全世界的建立對話(通信)的請求

    int close_session_from_secure (int svc_id, int session_id)
    調度命令方法處理來自於安全世界的關閉對話(通信)的請求

    int sa_create_entry_point (int svc_id, sa_config_t *psa_config)
    調用服務作業(任務)的初始化方法

    int sa_destroy_entry_point (int svc_id, void *data, int elf_flag)
    調用服務作業(任務)的退出方法

    int sa_open_session (sa_config_t *psa_config, void *session_context)
    此方法建立安全應用程序與非安全應用程序的對話(通信),建立通信的依據是service ID

    int sa_close_session (void *session_context)
    此方法關閉安全應用程序與非安全應用程序的對話(通信),關閉通信的依據是service ID

    void get_api_context (int *svc_id, int *task_id, int *cmd_id, int *cmd_type)
    返回來自於安全監聽器調用命令參數的service ID 、session_id(通信)、common_id的幫助函數

    int decode_data (void *data, struct otzc_encode_meta *meta_data, int *type, int *offset, int *pos, int *mapped, void **out_data, int *out_len)
    解碼來自於非安全世界的通過的數據的幫助函數

    int decode_ipi_out_data (void *data, struct otzc_encode_meta *meta_data, int *type, int *offset, int *pos, void **out_data, int *out_len)
    解碼來自於智能外圍接口的響應數據的幫助函數

    int update_response_len (struct otzc_encode_meta *meta_data, int pos, int len)
    更新響應長度的幫助函數

    int otz_encode_data (struct otz_secure_encode_cmd *enc, struct otzc_encode_meta **pmeta_data, struct otz_secure_encode_ctx **penc_context, int encode_type)
    將安全應用程序發送的數據進行編碼(加密)的幫助函數

    void otz_release_data (struct otz_secure_encode_ctx *enc_context, struct otzc_encode_meta *meta_data)
    發送加密數據

    int ipc_connect (int svc_id, int *session_id)
    兩個任務之間建立通信( IPC中使用)

    int ipc_disconnect (int svc_id, int session_id)
    斷開兩個任務之間的通信(IPC)

    int ipc_send (int src_svc_id, int src_context, int svc_id, int session_id, int cmd_id, struct otz_secure_encode_ctx *enc_ctx, struct otzc_encode_meta *meta_data)
    兩個任務之間發送數據

    int ipc_api (int src_svc_id, int src_session_id, int target_svc_id, int target_cmd_id, void *req_buf, int req_buf_len, void *res_buf, int res_buf_len, int *ret_res_buf_len)
    對兩個任務進行一對一請求與響應的數據進行緩存的幫助函數

    void ipc_test_crypto (int src_svc_id, int src_session_id)
    測試進程間通信命令的加密操作

    void ipc_test_echo (int src_svc_id, int src_session_id)
    測試進程間通信命令的顯示操作

    void handle_task_return (int task_id, sw_tls *tls)
    返回任務句柄的幫助函數

  3. mon_main.c(armv8)
    state_context context[2][MAX_CORES] attribute ((aligned(16)))
    靜態上下文的二維數組
    強制編譯器將靜態上下文的對齊類型爲十六個字節對齊方式
    MAX_CORES:#define MAX_CORES 0x1

    int main (void)
    入口函數

  4. hyp_main.c(armv8)
    state_context context[MAX_GUESTS][MAX_CORES] attribute ((aligned(16)))
    MAX_GUESTS:#define MAX_GUESTS 0x1
    MAX_CORES:#define MAX_CORES 0x1
    attribute機制如上

    void guest_load_image (va_t, pa_t, unsigned long)
    src : 安全內核的虛擬地址
    dest : 安全內核的物理地址
    size : 內核的大小

    int main(void )
    Returns

  5. cpu_api.c(ARMV8)
    void timer_init (void)
    初始化安全內核的CPU時鐘

    void enable_timer (void)
    給予安全內核的CPU時鐘授權

    void disable_timer (void)
    掛起安全內核時鐘

    void trigger_tick (u64 usecs)
    此方法在下一個標記到達標記計時器以及授予標記計時器權限之前寫入時鐘循環到達期限的次數

    void clockcycles_to_timeval (pa_t clockcycles, timeval_t *ret_timeval)
    此方法轉換時鐘循環時間(秒與納秒之間),此方法的定義依賴於時鐘的使用

    void timeval_to_clockcycles (timeval_t *time, pa_t *ret_clockcycles)
    此方法轉換時鐘循環的次數(秒與納秒之間)

    void schedule (void)
    調用調度程序

  6. cpu_data.c(ARMV8)
    u64 elx_stack[STACK_SIZE *MAX_CORES] attribute ((aligned(16)))
    STACK_SIZE :#define STACK_SIZE 0x1000
    MAX_CORES:#define MAX_CORES 0x1
    強制編譯器對棧elx_stack使用16字節對齊的對齊機制

    pa_t params_stack[PARAM_STACK_SIZE] attribute ((section(“.bss”)))
    PARAM_STACK_SIZE:#define PARAM_STACK_SIZE 8
    此棧類型爲SMC(Secure monitor call)所使用

    unsigned long get_sw_text_start (void)
    此方法返回鏈接器腳本中設置的文本段的起始地址

    unsigned long get_sw_text_size (void)
    此方法返回鏈接器腳本中設置的文本段的大小

    unsigned long get_sw_data_start (void)
    此方法返回鏈接器腳本設置的數據段的起始地址

    unsigned long get_sw_data_bss_size (void)
    此方法返回鏈接器腳本設置的數據段以及bss段的大小

    unsigned long get_sw_image_start (void)
    此方法返回鏈接器腳本設置的鏡像區域的起始地址

    unsigned long get_sw_image_size (void)
    此方法返回鏈接器腳本設置的鏡像區域的大小

    unsigned long get_sw_code_end (void)
    此方法返回在鏈接器幫助下的安全世界代碼的終止地址(虛擬地址)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章