目錄
一、文件目錄
secure_main.c(armv8)
void guest_load_image (va_t src, pa_t dest, unsigned long size)src : 安全內核的虛擬地址
dest : 安全內核的物理地址
size : 內核的大小int main(void )
Returnssecure_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 IDint sa_close_session (void *session_context)
此方法關閉安全應用程序與非安全應用程序的對話(通信),關閉通信的依據是service IDvoid 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)
返回任務句柄的幫助函數mon_main.c(armv8)
state_context context[2][MAX_CORES] attribute ((aligned(16)))
靜態上下文的二維數組
強制編譯器將靜態上下文的對齊類型爲十六個字節對齊方式
MAX_CORES:#define MAX_CORES 0x1int main (void)
入口函數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 )
Returnscpu_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)
調用調度程序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)
此方法返回在鏈接器幫助下的安全世界代碼的終止地址(虛擬地址)