ATF EL3 Runtime Service
2017-06-06 17:08
316 查看
1. 介绍
什么叫运行时服务了?干了写啥?下面听我慢慢道来.
在正常世界和安全世界中执行的软件低于EL3的级别将使用安全监视器请求运行时服务呼叫(SMC)指令。
运行时服务的接口和操作在很大程度上取决于[SMCCC]中描述的概念和定义,特别是SMC功能ID,所有实体号码(OEN),快速和标准呼叫以及SMC32和SMC64调用约定。常见的运行时服务框架确保将SMC功能调度到其各自的服务的实现。
SMC 功能表示符号包含一个ONE字段, 见下图,具体可以参考SMCC手册中有所描述。快速调用不可中断,而标准调用可以抢占。 大多数所有者实
体仅分配了快速调用的范围,标准调用仅为受信任的操作系统提供程序保留。
EL3 运行时服务框架使用调用类型和 OEN 来标识每个 SMC 调用的特定处理程序。
2. 揭开神秘面纱
ARM 可信固件在源树中有一个 services 目录,每个拥有实体可以在其中放置其运行时服务的实现。 PSCI 实现位于 lib / psci 目录中。运行时服务源将需要包括 runtime_svc.h 头文件。
3. 注册运行时服务
使用
该宏用来在编译的时候将EL3中的service编译进rt_svc_descs段中,该宏定义如下:
在初始化期间,服务框架验证每个声明的服务,以确保满足以下条件:
1. _start OEN 不大于_end OEN
2. _end OEN 不超过最大 OEN 值(63)
3. _type 是 SMC_TYPE_FAST 或 SMC_TYPE_STD 之一
4. 指定了_setup 和_smch 例程
std_svc_setup.c 提供了注册运行时服务的示例:
ps: 先写到这里把,有时间在接着写完成,并且持续更新
什么叫运行时服务了?干了写啥?下面听我慢慢道来.
在正常世界和安全世界中执行的软件低于EL3的级别将使用安全监视器请求运行时服务呼叫(SMC)指令。
运行时服务的接口和操作在很大程度上取决于[SMCCC]中描述的概念和定义,特别是SMC功能ID,所有实体号码(OEN),快速和标准呼叫以及SMC32和SMC64调用约定。常见的运行时服务框架确保将SMC功能调度到其各自的服务的实现。
SMC 功能表示符号包含一个ONE字段, 见下图,具体可以参考SMCC手册中有所描述。快速调用不可中断,而标准调用可以抢占。 大多数所有者实
体仅分配了快速调用的范围,标准调用仅为受信任的操作系统提供程序保留。
Type OEN Service Fast 0 ARM Architecture calls Fast 1 CPU Service calls Fast 2 SiP Service calls Fast 3 OEM Service calls Fast 4 Standard Service calls Fast 5-47 Reserved for future use Fast 48-49 Trusted Application calls Fast 50-63 Trusted OS calls Std 0- 1 Reserved for existing ARMv7 calls Std 2-63 Trusted OS Standard Calls
EL3 运行时服务框架使用调用类型和 OEN 来标识每个 SMC 调用的特定处理程序。
2. 揭开神秘面纱
ARM 可信固件在源树中有一个 services 目录,每个拥有实体可以在其中放置其运行时服务的实现。 PSCI 实现位于 lib / psci 目录中。运行时服务源将需要包括 runtime_svc.h 头文件。
3. 注册运行时服务
使用
DECLARE_RT_SVC()宏指定运行时服务服务的名称,所覆盖的OEN的范围,服务的类型和初始化和调用处理函数。
该宏用来在编译的时候将EL3中的service编译进rt_svc_descs段中,该宏定义如下:
#define DECLARE_RT_SVC(_name, _start, _end, _type, _setup, _smch) static const rt_svc_desc_t __svc_desc_ ## _name \ __section("rt_svc_descs") __used = { \ .start_oen = _start, \ .end_oen = _end, \ .call_type = _type, \ .name = #_name, \ .init = _setup, \ .handle = _smch } 1. `_name` is used to identify the data structure declared by this macro, and is also used for diagnostic purposes 2. `_start` and `_end` values must be based on the `OEN_*` values defined in [`smcc_helpers.h`] 3. `_setup` is the initialization function with the `rt_svc_init` signature: typedef int32_t (*rt_svc_init)(void); 4. _smch` is the SMC handler function with the `rt_svc_handle` signature: typedef uint64_t (*rt_svc_handle)( uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3, uint64_t x4, void *cookie, void *handle, uint64_t flags); start_oen:该service的起始内部number end.oen: 该service的末尾number call_type: 调用的smc的类型 name: 该service的名字 init: 该service在执行之前需要被执行的初始化操作 handle: 当触发了call type的调用时调用的handle该请求的函数
在初始化期间,服务框架验证每个声明的服务,以确保满足以下条件:
1. _start OEN 不大于_end OEN
2. _end OEN 不超过最大 OEN 值(63)
3. _type 是 SMC_TYPE_FAST 或 SMC_TYPE_STD 之一
4. 指定了_setup 和_smch 例程
std_svc_setup.c 提供了注册运行时服务的示例:
/* 将标准服务注册到运行时服务*/ DECLARE_RT_SVC( std_svc, OEN_STD_START, OEN_STD_END, SMC_TYPE_FAST, std_svc_setup, std_svc_smc_handler );
ps: 先写到这里把,有时间在接着写完成,并且持续更新
相关文章推荐
- 无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.VisualStudio.Tools.Applications.Runtime.IHostServiceProvider”
- eclipse启动错误 Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).
- HTTP Error 503.2 - Service Unavailable The serverRuntime@appConcurrentRequestLimit setting is being
- Changing Target Web Service At Runtime
- The Apache Axis2 Web service runtime in Tomcat v6.0 Server does not support the service project
- processEngine.getRuntimeService().createProcessInstanceQuery().processInstanceId(“ 132501”).active().singleResult();
- 升级Azure SDK 2.5后总是调用WindowsAzure.ServiceRuntime.DefaultEntryPoint
- WebService runtime modeler error: Wrapper class XXX is not found. Have you run APT to generate them?
- org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Server returned error code = 40
- java.lang.RuntimeException: Fail to connect to camera service
- Eclipse Error: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started
- bl31 runtime service的注册和查找
- ArcGIS Runtime SDK for iOS中获取ImageServiceLayer的栅格值
- 严重: WSSERVLET11: failed to parse runtime descriptor: The serviceName cannot be retrieved from an int
- java.lang.RuntimeException: Fail to connect to camera service问题
- 使用ServiceRuntime assembly和windows azure交互
- (九)Activitivi5之使用 RuntimeService 设置和获取流程变量
- Error while executing: am startservice ***/com.android.tools.fd.runtime.InstantRunS
- The Apache Axis2 Web service runtime in Tomcat v6.0 Server does not support the service project
- 为了使CallExternalMethod活动工作,我们需要在工作流Runtime中添加一个ExternalDataExchangeService,然后再向ExternalDataExchangeService中添加一个本地服务BugFlowService