移植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!
我的过了!