自己搜到自己的帖子!
那个可以解释下下面的代码是什么意思
void call_linux(U32 a0, U32 a1, U32 a2)
{
void (*goto_start)(U32, U32);
cache_clean_invalidate();
tlb_invalidate();
__asm{
// mov r0, a0//%0
// mov r1, a1//%1
// mov r2, a2//%2
mov ip, #0
mcr p15, 0, ip, c13, c0, 0 /* zero PID */
mcr p15, 0, ip, c7, c7, 0 /* invalidate I,D caches */
mcr p15, 0, ip, c7, c10, 4 /* drain write buffer */
mcr p15, 0, ip, c8, c7, 0 /* invalidate I,D TLBs */
mrc p15, 0, ip, c1, c0, 0 /* get control register */
bic ip, ip, #0x0001 /* disable MMU */
mcr p15, 0, ip, c1, c0, 0 /* write control register */
//mov pc, r2
//nop
//nop
/* no outpus */
//: "r" (a0), "r" (a1), "r" (a2)
}
//SetClockDivider(1, 1);
//SetSysFclk(FCLK_200M); //start kernel, use 200M
Delay(1000);
// disable_irq();
goto_start = (void (*)(U32, U32))a2; //这里应该是跳转到要执行的RAM的起始地址
(*goto_start)(a0, a1);
}
复制代码
主要是汇编部分