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

来源:互联网 发布:net和java哪个比较好 编辑:程序博客网 时间:2024/05/18 03:11
移植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 <u-boot.lst>    }     . = 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] 错误 1make[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.oCOBJS   = 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.oCOBJS   = 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] 错误 1make[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!
我的过了!







0 0
原创粉丝点击