本文主要是介绍OP-TEE TA:读写寄存器数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近想为OP-TEE的Trusted OS开发一个触摸屏驱动,在查询代码的时候发现直接调用TA修改TZPC寄存器的值是不可行的,原因是user TA的运行采用了沙盒机制,所以无法直接访问寄存器所映射的物理地址。所以在查看了相关资料后,总结出如下方法用以解决此问题。
一. 编写static TA
在/optee_os/core/arch/arm/sta目录下新建一个sta_reg.c文件,作为一个新的static TA,具体代码如下,此文件结构参照static TA的例程程序stats.c,此文件稍微有点长,我们分段解释一下。
首先是头文件:
#include <compiler.h>
#include <stdio.h>
#include <trace.h>
#include <kernel/static_ta.h>
#include <string.h>
#include <string_ext.h>#include <io.h>
这里比较重要的是statci_ta.h和io.h,前一个头文件定义了static TA的相关函数和宏定义,后一个给出了读写寄存器物理地址中所存储的值的方法。
宏定义:
#define TA_NAME "sta_reg.ta"#define STA_REG_UUID \{ 0xd96a5b40, 0x12c7, 0x21af, \{ 0x87, 0x94, 0x10, 0x02, 0xa5, 0xd5, 0xc6, 0x1b } }#define STA_READ_STATS 0
#define STA_WRITE_STATS 1
#define CONSOLE_UART_BASE 0xF8015000
#define UART_IBRD 0x24 /* integer baud register */
首先需要定义此TA的名字和对应的UUID值(此值用于user TA建立会话的时候使用),其次设置两个状态值,分别对应寄存器的读写操作,最后设置你要读取的寄存器的映射地址。(笔者这里使用的是HIKEY的UART寄存器的映射地址)
操作方法:
static TEE_Result read_regs(uint32_t
这篇关于OP-TEE TA:读写寄存器数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!