以前我的eboot都能用的, 我加了一些调试信息后,编译出来的eboot就超出了原来的大小(因为多了一个eboot.nb1),因此我就在boot.bib里面将eboot的大小改大了.但是烧到板子上却总是不行.我在eboot的startup.s中,加了一些向串口输出信息的语句,以跟踪程序的运行,发现程序运行到最后要跳往c文件的main函数时挂了,高手帮忙看看,是不是最后的VirtualStart那部分有问题. 以下是摘出来的代码
;;;;send msg to dnw;;;; ------------------
169 ldr r0, =UART_STAT
ldrb r1,[r0]
subs r1,r1,#2
bne %B169
ldr r0 , =UART0_TXH0
mov r1 , #0x4b ;;; K 这个K还可以输出到dnw
str r1 , [r0]
;;;;send msg to dnw;;;;------------------
; The page tables and exception vectors are setup.
; Initialize the MMU and turn it on.
mov r1, #1
mcr p15, 0, r1, c3, c0, 0 ; setup access to domain 0
mcr p15, 0, r10, c2, c0, 0
mcr p15, 0, r0, c8, c7, 0 ; flush I+D TLBs
mov r1, #0x0071 ; Enable: MMU
orr r1, r1, #0x0004 ; Enable the cache
ldr r0, =VirtualStart
cmp r0, #0 ; make sure no stall on "mov pc,r0" below
mcr p15, 0, r1, c1, c0, 0
mov pc, r0 ; & jump to new virtual address
nop
; MMU & caches now enabled.
; (r10) = physcial address of 1st level page table
;
VirtualStart
;;;;send msg to dnw;;;; ------------------
176 ldr r0, =UART_STAT
ldrb r1,[r0]
subs r1,r1,#2
bne %B176
ldr r0 , =UART0_TXH0
mov r1 , #0x5a ; Z ;这个Z就不能输出了
str r1 , [r0]
;;;;send msg to dnw;;;; ------------------
mov sp, #0x80000000
add sp, sp, #0x30000 ; arbitrary initial super-page stack pointer
b main
ENTRY_END