通常我们对s3c6410平台开发u-boot是在s3c6400的基础上修改而成的,但是从uboot 2013.01这个版本之后的版本都把smdk6400对应的配置给删除了。
这是因为该版本smdk6400的配置编译失败,从而导致无法生成u-boot的可执行文件
从ftp://ftp.denx.de/pub/u-boot/u-boot-2013.01.01.tar.bz2下载uboot,并进行解压缩。
执行下面的命令进行配置和编译:
make smdk6400_config make
然后会出现一个编译错误:
.arm-none-linux-gnueabi-ld:u-boot.lds:19: syntax error
而u-boot.lds内容如下:
1 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") 2 OUTPUT_ARCH(arm) 3 ENTRY(_start) 4 SECTIONS 5 { 6 . = 0x00000000; 7 . = ALIGN(4); 8 .text : 9 { 10 arch/arm/cpu/arm1176/start.o (.text) 11 *(.text) 12 } 13 . = ALIGN(4); 14 .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } 15 . = ALIGN(4); 16 .data : { *(.data) } 17 . = ALIGN(4); 18 .got : { *(.got) } 19 . = align(4); 20 .u_boot_list : { 21 _u_boot_list__start = .; 22 _u_boot_list_cmd__start = .; 23 *(SORT(.u_boot_list.cmd.*)); 24 _u_boot_list_cmd__end = .; 25 _u_boot_list_env_clbk__start = .; 26 *(SORT(.u_boot_list.env_clbk.*)); 27 _u_boot_list_env_clbk__end = .; 28 *(SORT(.u_boot_list.*)); 29 _u_boot_list__end = .; 30 } 31 . = align(4); 32 .mmudata : { *(.mmudata) } 33 . = ALIGN(4); 34 .rel.dyn : { 35 __rel_dyn_start = .; 36 *(.rel*) 37 __rel_dyn_end = .; 38 } 39 .dynsym : { 40 __dynsym_start = .; 41 *(.dynsym) 42 } 43 _end = .; 44 .bss __rel_dyn_start (OVERLAY) : { 45 __bss_start = .; 46 *(.bss) 47 . = ALIGN(4); 48 __bss_end__ = .; 49 } 50 /DISCARD/ : { *(.dynstr*) } 51 /DISCARD/ : { *(.dynamic*) } 52 /DISCARD/ : { *(.plt*) } 53 /DISCARD/ : { *(.interp*) } 54 /DISCARD/ : { *(.gnu*) } 55 }
可以看到19行内容为align(4),而其他大部分行都是ALIGN(4),貌似是大小写的问题。
而u-boot.lds内容又是根据board/samsung/smdk6400/u-boot-nand.lds而得到的。
然后将board/samsung/smdk6400/u-boot-nand.lds中的所有align(4)修改为ALIGN(4),再重新执行make,就能得到u-boot.bin
但是此时出现另外一个编译错误:
u-boot-2013.01.01/nand_spl/board/samsung/smdk6400/start.S:227: undefined reference to `_main‘
而我查看2012.10版本的u-boot则没有227行的代码,试着将此行注释掉就可以完全编译通过了。
因为对实际开发板的移植还不算特别熟悉,等稍微熟悉之后我再试下是否该版本可以真正用于6410的开发板上。
uboot 2013.01 s3c6400编译失败,布布扣,bubuko.com
原文:http://www.cnblogs.com/qiaoqiao2003/p/3726534.html