zoukankan      html  css  js  c++  java
  • 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的链接脚本进行其他的一些修改。

  • 相关阅读:
    chapter01
    2019.07.11
    系统进程
    Linex第五-第七章
    Linex第三章第四章
    Linux 系统管理 第二章第三章
    2019/7/24
    使用.htaccess进行浏览器图片文件缓存
    div+css3实现漂亮的多彩标签云,鼠标移动会有动画
    搜索排序的作弊与反作弊,面壁人与智子的巅峰对决
  • 原文地址:https://www.cnblogs.com/qiaoqiao2003/p/3726534.html
Copyright © 2011-2022 走看看