armv7 的引导加载程序是不是适用于 armv8?

Posted

技术标签:

【中文标题】armv7 的引导加载程序是不是适用于 armv8?【英文标题】:Will bootloader for armv7 work for armv8?armv7 的引导加载程序是否适用于 armv8? 【发布时间】:2017-06-04 10:21:58 【问题描述】:

我正在尝试使用 armv7 汇编指令集根据 armv7 架构编写引导加载程序? 例如:

在重置时将 cpu 设置为 svc 模式:

mrs r0, cpsr
bic r0, r0,#0x1f
orr r0, r0,#0xd3
msr cpsr, r0
mov pc, lr

相同的引导加载程序是否可以在 armv8 上运行。由于 armv8 也支持 aarch32 。 但另一方面它也有很多不同。

【问题讨论】:

它已经启动到 svc 模式了吧?如果已经存在,为什么要设置为 svc 模式。 ARMv7:“处理器在复位时进入超级用户模式。” 在最高实现异常级别使用 AArch32 的实现中,如果该异常级别是 EL3 或 EL1,则 PE 在重置时进入超级用户模式。 让您自己阅读其余部分,或者尽早在启动时读出 cpsr 并保存或查看... 谢谢..重置后它应该已经在 svc 中了。我已经从 uboot 中获取了这些行。不知道为什么需要它。 它在 hyp 和 aarch64 中是真的,我被卡住了。如果它不在 hyp 中并且执行状态是 aarch32 怎么办?我正在尝试用我的 beaglebone black 替换 uboot,它是 v8。跨度> 【参考方案1】:

不一定有几个原因,首先,如果你处于炒作模式,你就不能那么容易地从那个状态中恢复过来。其次,如果您处于 aarch64 模式,那么这是一个不同的指令集。因此,这在一定程度上取决于这段代码在引导加载程序中的位置,这才是真正的引导加载程序,或者你是否有其他代码在此之前出现(这会让你处于这样的代码无法工作的状态)。

简短的回答,不,此代码不仅不适用于 armv8,也不适用于 armv7。

【讨论】:

以上是关于armv7 的引导加载程序是不是适用于 armv8?的主要内容,如果未能解决你的问题,请参考以下文章

[译] ARMv8-A的基础知识

如何在armv7中得到armv8中的64位Vn.8h,就像arm寄存器中的D寄存器一样?

ARMv8-A vs ARMv7 Registers

Worklight 6.0.0.1 iOS 本机库仅适用于 ARMv7 而不适用于 ARMv7s 和 ARM64?

为啥 beaglebone black uboot 配置为 CONFIG_SYS_CPU="armv7"。 bbb啥时候是armv8?

如何制作可引导的iso(不是cd或flash驱动器)来测试自己的引导加载程序?