首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >您能告诉我如何在ARM体系结构v7中替换安全cpus的重置向量吗?

您能告诉我如何在ARM体系结构v7中替换安全cpus的重置向量吗?
EN

Stack Overflow用户
提问于 2015-10-23 01:28:50
回答 1查看 311关注 0票数 0

我知道手臂复位矢量可以是低的(0x00000000)或高的(0xff0000)。但是一些SoC在linux内核中的代码说重置向量可以改变。

例如,在mach-imx中

代码语言:javascript
运行
复制
static int __cpuinit imx_boot_secondary(unsigned int cpu, struct task_struct *idle)
{
        imx_set_cpu_jump(cpu, v7_secondary_startup);
        imx_enable_cpu(cpu, true);
        return 0;
}

void imx_set_cpu_jump(int cpu, void *jump_addr)
{
        cpu = cpu_logical_map(cpu);
        writel_relaxed(virt_to_phys(jump_addr),
                       src_base + SRC_GPR1 + cpu * 8);
}

他们说,通过jump_addr,辅助cpu可以跳到您想要的地方。

你能告诉我它是怎么工作的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-23 08:28:15

在ARMv7核心上,实现TrustZone的安全扩展--据我所知,所有这些扩展--“低向量”地址(当SCTLR.V == 0时)不是硬编码为0,而是用VBAR系统寄存器设置的。VBAR存储在安全状态和非安全状态之间,因此它们的向量表都可以放置在任意32字节对齐的虚拟地址上,而不会相互干扰,即使在这两种状态下都不存在MMU。

请注意,虽然这是您提出的问题,但这里的代码实际上并不是这样。这只是将一个入口点地址存储在复位控制器中的一个非易失性寄存器中(一个常见的替代方法是在某个共享内存中使用一个变量,引导加载器将自己加载到其中);辅助CPU仍然会从重置到默认ROM向量中出来,并执行一整串自初始化代码--巧合的是,如果CPU要切换到非安全状态,该代码将涉及设置非安全VBAR。该启动代码最终将以读取这个入口地址而结束,不管它藏在哪里,然后简单地跳到它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33293454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档