jason19820107
驱动牛犊
驱动牛犊
  • 注册日期2006-09-27
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望74点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
阅读:1366回复:5

bootloader的问题

楼主#
更多 发布于:2008-02-22 10:39
在我的项目中,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...
liurx_driver
驱动牛犊
驱动牛犊
  • 注册日期2006-07-28
  • 最后登录2008-11-19
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望8点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-02-26 20:55
查看你自己的ipl.bib文件,可能内存配置不正确
jason19820107
驱动牛犊
驱动牛犊
  • 注册日期2006-09-27
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望74点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-02-27 08:43
引用第1楼liurx_driver于2008-02-26 20:55发表的  :
查看你自己的ipl.bib文件,可能内存配置不正确


哦,谢谢你的回复。
ipl.bib没有改的阿,就是原来bsp的配置,只不过它原来是不开启mmu的,现在我添了开启mmu的代码,这个配置需要改的吗?
wang_wcj
驱动小牛
驱动小牛
  • 注册日期2002-04-14
  • 最后登录2010-05-14
  • 粉丝0
  • 关注0
  • 积分213分
  • 威望253点
  • 贡献值1点
  • 好评度82点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-02-27 09:06
我想應該沒有你想的那麽簡單
你的虛擬地址和物理地址不一緻導致的問題
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-02-28 21:14
引用第3楼wang_wcj于2008-02-27 09:06发表的  :
我想應該沒有你想的那麽簡單
你的虛擬地址和物理地址不一緻導致的問題


同意这个讲法.
学海无涯
jason19820107
驱动牛犊
驱动牛犊
  • 注册日期2006-09-27
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望74点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-02-29 08:47
谢谢!
也就是说要确保代码所在地址的物理地址和虚拟地址一致,对吧?
游客

返回顶部