u-boot移植报错:arm-linux-ld:u-boot.lds:19: syntax error

移植u-boot-2013.04-rc1 到OK6410上的时候,
编译的时候报错 “arm-linux-ld:u-boot.lds:19: syntax error”
解决办法如下:
由于, u-boot.lds文件是 u-boot-nand.lds 的链接文件,那我们就去看看这个文件
进入目录 /u-boot/board/samsung/smdk6410
找到文件:u-boot-nand.lds 

内容如下:

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
    . = 0x00000000;
 
    . = ALIGN(4);
    .text      :
    {
      arch/arm/cpu/arm1176/start.o  (.text)
      *(.text)
    }
 
    . = ALIGN(4);
    .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
 
    . = ALIGN(4);
    .data : { *(.data) }
 
    . = ALIGN(4);
    .got : { *(.got) }
 
 
    . = align(4);
    .u_boot_list : {
        #include 
    }
 
    . = align(4);
    .mmudata : { *(.mmudata) }
 
    . = ALIGN(4);
 
    .rel.dyn : {
        __rel_dyn_start = .;
        *(.rel*)
        __rel_dyn_end = .;
    }
 
    .dynsym : {
        __dynsym_start = .;
        *(.dynsym)
    }
 
    _end = .;
 
    .bss __rel_dyn_start (OVERLAY) : {
        __bss_start = .;
        *(.bss)
        . = ALIGN(4);
        __bss_end__ = .;
    }
 
    /DISCARD/ : { *(.dynstr*) }
    /DISCARD/ : { *(.dynamic*) }
    /DISCARD/ : { *(.plt*) }
    /DISCARD/ : { *(.interp*) }
    /DISCARD/ : { *(.gnu*) }
}

注意文中的 25行和30行的
. = align(4);
将其修改为
. = ALIGN(4);
接下来就可以尝试重新编译有没有问题了。
希望能帮你解决问题!
如果你编译通过了,那就恭喜你了。
但是要是你出现如下错误,

 

 

start.o: In function `cpu_init_crit':
/root/u-boot/nand_spl/board/samsung/smdk6410/start.S:227: undefined reference to `_main'
make[1]: *** [/root/u-boot/nand_spl/u-boot-spl] 错误 1
make[1]:正在离开目录 `/root/u-boot/nand_spl/board/samsung/smdk6410'
make: *** [nand_spl] 错误 2

那就让我们进一步解决这个问题吧。
我们进入目录:/u-boot/nand_spl/board/samsung/smdk6410/
修改Makefile文件,找到如下代码:

 

 

# from cpu directory
$(obj)start.S:
    @rm -f $@
    @ln -s $(TOPDIR)/arch/arm/cpu/arm1176/start.S $@

在其后添加如下代码:

$(obj)crt0.S:
    @rm -f $@
    @ln -s $(TOPDIR)/arch/arm/lib/crt0.S $@

找到如下代码:

SOBJS   = start.o cpu_init.o lowlevel_init.o
COBJS   = nand_boot.o nand_ecc.o s3c64xx.o smdk6410_nand_spl.o nand_base.o

将其修改为

SOBJS   = start.o cpu_init.o lowlevel_init.o crt0.o
COBJS   = nand_boot.o nand_ecc.o s3c64xx.o smdk6410_nand_spl.o nand_base.o

再次尝试编译。你能通过了,恭喜你了。
不过,我的还是有问题啊,提示如下错误:

crt0.o: In function `clbss_l':
/root/u-boot/nand_spl/board/samsung/smdk6410/crt0.S:153: undefined reference to `coloured_LED_init'
/root/u-boot/nand_spl/board/samsung/smdk6410/crt0.S:154: undefined reference to `red_led_on'
make[1]: *** [/root/u-boot/nand_spl/u-boot-spl] 错误 1
make[1]:正在离开目录 `/root/u-boot/nand_spl/board/samsung/smdk6410'
make: *** [nand_spl] 错误 2

那就去 /u-boot/nand_spl/board/samsung/smdk6410/crt0.S 看看有什么问题吧。
找到如下代码:

clbss_l:cmp     r0, r1                  /* while not at end of BSS */
        strlo   r2, [r0]                /* clear 32-bit BSS word */
        addlo   r0, r0, #4              /* move to next */
        blo     clbss_l
 
        bl coloured_LED_init
        bl red_led_on

修改如下

clbss_l:cmp     r0, r1                  /* while not at end of BSS */
        strlo   r2, [r0]                /* clear 32-bit BSS word */
        addlo   r0, r0, #4              /* move to next */
        blo     clbss_l
#ifndef CONFIG_NAND_SPL
        bl coloured_LED_init
        bl red_led_on
#endif

再次尝试编译
OK!Congratulations!
我的过了!

 

 

 

 

 

 

 

你可能感兴趣的:(ARM)