當前位置:
首頁 >
optee中的panic函数实现
發布時間:2025/3/21
33
豆豆
生活随笔
收集整理的這篇文章主要介紹了
optee中的panic函数实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
optee3.14中的panic、TEE_Panic、panic、panic實現
★★★ 個人博客導讀首頁—點擊此處 ★★★
.
說明:
在默認情況下,本文講述的都是ARMV8-aarch64架構,optee3.14版本
文章目錄
- 1、optee os中的panic函數
- 2、TA中的panic函數
- 3、ldelf中的panic
1、optee os中的panic函數
在optee os有兩種方式調用panic,帶參數的和不帶參數的,示例如下:
- panic();
- panic(“Written PRIBLOB and read PRIBLOB do not match!”);
對應的這兩種中調用,到底層實現
- 無參數的調用: __panic((void *)0)
- 有參數的調用: __panic(s)
__panic又調用了__do_panic,然后我們再看__do_panic在底層的實現
- 打印log,無參數的打印"panic",有參數的打印您的參數
- print_kernel_stack()
- while(1)死循環. 所以這也就是為什么,一旦optee os特權默認發生了panic就再也恢復不了了。死循環了還怎么恢復。
2、TA中的panic函數
對于TA,panic的用法也是有兩種:
- TEE_Panic(0)
- TEE_Panic(非0)
TEE_Panic()是GP定義的一個接口,當然GP也對panic發生的條件做出了要求,這里我們就不細展開討論
3、ldelf中的panic
底層的實現,其實就是回收這個elf(或叫TA,或叫userspace),注意注釋/*NOTREACHED*/,說明這里不會走到while(true)
(optee_os/ldelf/sys.c)void __panic(const char *file __maybe_unused, const int line __maybe_unused,const char *func __maybe_unused) {if (!file && !func)EMSG_RAW("Panic");elseEMSG_RAW("Panic at %s:%d %s%s%s",file ? file : "?", file ? line : 0,func ? "<" : "", func ? func : "", func ? ">" : "");_ldelf_panic(1);/*NOTREACHED*/while (true); }總結
以上是生活随笔為你收集整理的optee中的panic函数实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: optee中添加一个中断以及底层代码的相
- 下一篇: optee中关于异常向量表、中断等的深入