我使用的是32位模式的ARM Cortex A53 (4核)处理器(ARMv8架构)。我需要使用以下指令进入系统模式:
cpsid if, #0x1F但是cps这条指令会让我的系统崩溃。在ARM1176JZF-S (ARMv6架构)上,这条线工作得无懈可击。我调查了一下,它似乎与低权限级别有关,但svc指令并没有像我想象的那样解决这个问题。我需要做什么才能在这个架构中实现系统模式?
控制位来源:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344i/ch02s14s08.html
这就是我获得CPS信息的地方(在更改系统模式中):http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0527a/index.html
发布于 2017-07-15 01:48:36
我为pi2和pi3退出hyp模式的代码(假设SD卡上没有config.txt ):
mrs r0,cpsr
bic r0,r0,#0x1F
orr r0,r0,#0x13
msr spsr_cxsf,r0
add r0,pc,#4
msr ELR_hyp,r0
eret在raspberry pi网站上的裸体论坛上有很多人,关于这个主题也有很多变化。与过去的好日子不同,你不能只在HYP模式下更改一次cpsr,但如果你看一下eret指令,它会接受一个新的cpsr以及分支(需要一个新的lr来馈送到pc),而不是真正的返回,而是一种更改cpsr的方式。这就是我所知道的赤裸裸的人正在做的事情。
当然,这里需要一些假设来实现这一点,而且它们恰好与pi一起工作。
如果你有一个config.txt,那么你需要小心一点,图形处理器为arm放置的引导程序代码对内核进行“排序”,并让内核0通过,以及将所有内核置于HYP模式。(包括pi2和pi3),如果您选择击败它:
kernel_old=1
disable_commandline_tags=1然后由您对核心进行排序
mrs x0,mpidr_el1
mov x1,#0xC1000000
bic x1,x0,x1
cbz x1,zero
not_zero:
wfi
b not_zero
zero:所以你不会让他们四个几乎并行地运行相同的代码……
https://stackoverflow.com/questions/45107469
复制相似问题