通常我们对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
时间: 2024-10-18 23:44:52