我自己写了基于s3c6410的uboot烧写到nandflash中,启动但是没有反应,是怎么回事尼,哪位高手指教 ? 5
.text.align2.global_start_start:ldrpc,=reset@0x0ldrpc,=undef_interrput@0x4ldrpc,=swi_...
.text .align 2
.global _start
_start:
ldr pc,=reset @0x0
ldr pc,=undef_interrput @0x4
ldr pc,=swi_interrput @0x8
ldr pc,=pabort_interrput @0xc
ldr pc,=dabort_interrput @0x10
nop
ldr pc,=irq_interrput @0x18
ldr pc,=fiq_interrput @0x1c
undef_interrput:
b undef_interrput
swi_interrput:
b swi_interrput
pabort_interrput:
b pabort_interrput
dabort_interrput:
b dabort_interrput
irq_interrput:
b irq_interrput
fiq_interrput:
b fiq_interrput
reset:
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0xd3
msr cpsr,r0 @设置cpu为管理模式
mov r0,#0
ldr r0,=WTDCON
str r0,[r1] @关闭关门狗
ldr r0,=PORTM
mcr p15,0,r0,c15,c2,4
mov sp,#8192
bl clk_init
bl nand_init
bl dram_init
bl uart_init
bl buz_init
bl buz_on
mrc p15,0,r0,c7,c7,0 @关闭cache
mrc p15,0,r0,c8,c7,0 @关闭TLB
mrc p15,0,r0,c1,c0,0
bic r0,r0,#1
mcr p15,0,r0,c1,c0,0 @关闭MMU
@判断是否从ram中运行
adr r0,_start
ldr r1,=_TEXT_BASE
cmp r0,r1 @相等说明是下载到内存中运行
beq stack_init
@不等就从nandflash中启动,还需要将代码拷贝到内存中
ldr r0,=_TEXT_BASE
mov r1,#0
mov r2,#0x30000
bl nand_read
@clear_bss: 清楚bss段
ldr r0,=__bss_start
ldr r1,=__bss_end
mov r2,#0
1:
str r2,[r0],#4
cmp r0,r1
blt 1b
bl stack_init @初始化栈
bl main
stack_init:
mov r1,lr
ldr r2,=_TEXT_BASE
sub r2,r2,#CFG_MALLOC_LEN
sub r2,r2,#CFG_GBL_DATA_SIZE
sub r2,r2,#(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_IRQ)
sub sp,r2,#12
mov pc,lr 展开
.global _start
_start:
ldr pc,=reset @0x0
ldr pc,=undef_interrput @0x4
ldr pc,=swi_interrput @0x8
ldr pc,=pabort_interrput @0xc
ldr pc,=dabort_interrput @0x10
nop
ldr pc,=irq_interrput @0x18
ldr pc,=fiq_interrput @0x1c
undef_interrput:
b undef_interrput
swi_interrput:
b swi_interrput
pabort_interrput:
b pabort_interrput
dabort_interrput:
b dabort_interrput
irq_interrput:
b irq_interrput
fiq_interrput:
b fiq_interrput
reset:
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0xd3
msr cpsr,r0 @设置cpu为管理模式
mov r0,#0
ldr r0,=WTDCON
str r0,[r1] @关闭关门狗
ldr r0,=PORTM
mcr p15,0,r0,c15,c2,4
mov sp,#8192
bl clk_init
bl nand_init
bl dram_init
bl uart_init
bl buz_init
bl buz_on
mrc p15,0,r0,c7,c7,0 @关闭cache
mrc p15,0,r0,c8,c7,0 @关闭TLB
mrc p15,0,r0,c1,c0,0
bic r0,r0,#1
mcr p15,0,r0,c1,c0,0 @关闭MMU
@判断是否从ram中运行
adr r0,_start
ldr r1,=_TEXT_BASE
cmp r0,r1 @相等说明是下载到内存中运行
beq stack_init
@不等就从nandflash中启动,还需要将代码拷贝到内存中
ldr r0,=_TEXT_BASE
mov r1,#0
mov r2,#0x30000
bl nand_read
@clear_bss: 清楚bss段
ldr r0,=__bss_start
ldr r1,=__bss_end
mov r2,#0
1:
str r2,[r0],#4
cmp r0,r1
blt 1b
bl stack_init @初始化栈
bl main
stack_init:
mov r1,lr
ldr r2,=_TEXT_BASE
sub r2,r2,#CFG_MALLOC_LEN
sub r2,r2,#CFG_GBL_DATA_SIZE
sub r2,r2,#(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_IRQ)
sub sp,r2,#12
mov pc,lr 展开
3个回答
展开全部
bl nand_read 是否正确读到型旅和uboot了,一般nand不能直接镇肢读,nand控制卜盯器是否已经初始化?
追问
前面已经调用nand_init 初始化好了,
现在的问题是我的链接脚本的是从0x0开始,但是反汇编的里面看到的是不是从0x0开始的?
怎么回事
追答
是的,一般不一样,两者的地址偏差应该是TEXT_BASE
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
反汇编肯定不是0地址,uboot在码李兄第一阶段要拷贝代码到sdram,重扰咐定位,反汇编看到的是重定位后的地址,也就是你的迟袭sdram其实以后的某个地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其实当然不是0x0的,如果没记错的话,应该是0x74000000开始的,这是6410的内存起始地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询