主题 : ld链接脚本问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 9057
精华: 0
发帖: 13
金钱: 95 两
威望: 37 点
综合积分: 26 分
注册时间: 2009-09-15
最后登录: 2015-09-15
楼主  发表于: 2009-10-31 09:31

 ld链接脚本问题

在从nand copy代码到ram的实验中,ld脚本是这样的
SECTIONS {
  firtst      0x00000000 : { head.o init.o nand.o}
  second    0x30000000 : AT(4096) { main.o }
}
编译链接后,程序正常跳转到main并运行
我现在想只有一个输出段,于是改了ld脚本
SECTIONS {
  . = 0x30000000;
  .init  : AT(0){
        head.o
        *.o
    }
}
head.S中的nand_read的参数也做了相应修改
_start:
        mrs r0,cpsr      @set cpu to SVC32 mode
        bic r0,r0,#0x1F
        orr r0,r0,#0xD3
        msr cpsr,r0      @cpsr=11x10011, IRQ/FIQ disabled
  
                                            @函数disable_watch_dog, memsetup, init_nand, nand_read_ll在init.c中定义
            ldr    sp, =4096              @设置堆栈
            bl      disable_watch_dog      @关WATCH DOG
            bl        clock_init
            bl      memsetup                @初始化SDRAM
            bl      nand_init              @初始化NAND Flash
         bl        ledsetup                @点亮led5
                                            @将NAND Flash中地址4096开始的1024字节代码(main.c编译得到)复制到SDRAM中

            ldr    r0,    =0x30000000    @1. 目标地址=0x30000000,这是SDRAM的起始地址
            mov    r1,    #0x0          @2.  源地址  = 4096,连接的时候,main.c中的代码都存在NAND Flash地址4096开始处
            mov    r2,    #4096          @3.  复制长度= 1024(bytes),对于本实验的main.c,这是足够了
            bl      nand_read              @调用C函数nand_read
         bl        led6_on      
            ldr    sp, =0x34000000        @设置栈
      
            @ldr    lr, =halt_loop
            ldr    pc, =main    
编译链接烧到板子,只能运行到bl led6_on,不能跳到main
再等几分钟,一个led都不亮了,连最初的led_setup那里都运行不到。
想不明白哪里出问题了,高手指点下!谢谢。