uboot 2013.01 s3c6400编译失败

通常我们对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的开发板上。

注:我又查看了smdk2410使用的链接脚本,发现smdk2410使用的是arch/arm/cpu/u-boot.lds,并且没有出现任何编译或者链接错误,

可以根据该文件对smdk6400的链接脚本进行其他的一些修改。

原文地址:https://www.cnblogs.com/qiaoqiao2003/p/3726534.html