阅读:1366回复:5
bootloader的问题
在我的项目中,eboot开启了mmu,ipl没有开启,现在想在ipl中也开启mmu,于是将eboot中开启mmu的代码拷贝至ipl里,运行后发现程序无法从汇编代码里跳转到c代码的main函数里,很困惑,同样的代码,为什么eboot中可以跳过去,而修改后的ipl却跳不过去呢?哪位大虾能指点一下啊:)
mov r1, #0x78 ; Bits [6:3] must be written as 1's. orr r1, r1, #0x1 ; Enable MMU. orr r1, r1, #0x1000 ; Enable IC. orr r1, r1, #0x0800 ; Enable BTB. orr r1, r1, #0x4 ; Enable DC. ldr r2, =VirtualStart ; Get virtual address of 'VirtualStart' label. cmp r2, #0 ; Make sure no stall on "mov pc,r2" below. //能确信走到这里了,下面就不知道了 ; ; Enable the MMU. There must be a flat-mapped descriptor in the table. mcr p15, 0, r1, c1, c0, 0 ; MMU ON: All memory accesses are now virtual. ; Jump to the virtual address of the 'VirtualStart' label. ; mov pc, r2 nop nop nop ; ************************************************************************* ; ************************************************************************* ; The MMU and caches are now enabled and we're running in a virtual ; address space. ; ALIGN VirtualStart ; Set up a supervisor mode stack. Blows away the previous stack (resets the sp to the top). ; ; NOTE: These values must match the OEMAddressTable and .bib file entries for ; the bootloader. ; ldr sp, =IMAGE_BOOT_STACK_RAM_UA_START ; Jump to the C entrypoint. ; bl main ; Jump to main.c::main(), never to return... |
|
沙发#
发布于:2008-02-26 20:55
查看你自己的ipl.bib文件,可能内存配置不正确
|
|
板凳#
发布于:2008-02-27 08:43
引用第1楼liurx_driver于2008-02-26 20:55发表的 : 哦,谢谢你的回复。 ipl.bib没有改的阿,就是原来bsp的配置,只不过它原来是不开启mmu的,现在我添了开启mmu的代码,这个配置需要改的吗? |
|
地板#
发布于:2008-02-27 09:06
我想應該沒有你想的那麽簡單
你的虛擬地址和物理地址不一緻導致的問題 |
|
地下室#
发布于:2008-02-28 21:14
引用第3楼wang_wcj于2008-02-27 09:06发表的 : 同意这个讲法. |
|
|
5楼#
发布于:2008-02-29 08:47
谢谢!
也就是说要确保代码所在地址的物理地址和虚拟地址一致,对吧? |
|