蜗窝讨论区

慢下来,享受技术

您尚未登录。

#1 2017-08-04 10:22:16

xcl706
会员
注册时间: 2017-07-31
帖子: 1

uboot 链接错误

我把内存,时钟等初始化代码写到了板级文件夹中。然后在SOC级(mach-xxxx)的通用代码中调用。编译u-boot时遇到了链接错误,提示符号未定义,也就是板级文件中定义的那些符号在链接mach-xxx相关代码时找不到。
原因大概能猜到,应该是最后的链接命令中mach-xxx的built-in.o 出现在board的built-in.o的前面。
我想问下:有没有有没有办法在不修改链接命令的情况下忽略上述的链接顺序。还有就是,为什么_start 中调用了_main 链接时却不会出错。难道有什么特殊的用法。

附上最后的链接命令和错误信息:
(cd spl && arm-linux-ld   -T u-boot-spl.lds  --gc-sections -Bstatic --gc-sections  -Ttext 0x02021410 arch/arm/cpu/armv7/start.o --start-group arch/arm/mach-exynos/built-in.o arch/arm/cpu/armv7/built-in.o arch/arm/cpu/built-in.o arch/arm/lib/built-in.o board/samsung/tiny4412/built-in.o board/samsung/common/built-in.o common/init/built-in.o drivers/built-in.o dts/built-in.o fs/built-in.o  --end-group arch/arm/lib/eabi_compat.o arch/arm/lib/lib.a -Map u-boot-spl.map -o u-boot-spl)

arch/arm/mach-exynos/built-in.o: In function `do_lowlevel_init':
/home/xcl706/Documents/Source Insight 4.0/Projects/uboot/src/arch/arm/mach-exynos/lowlevel_init.c:221: undefined reference to `system_clock_init'
/home/xcl706/Documents/Source Insight 4.0/Projects/uboot/src/arch/arm/mach-exynos/lowlevel_init.c:229: undefined reference to `mem_ctrl_init'
scripts/Makefile.spl:333: recipe for target 'spl/u-boot-spl' failed
make[1]: *** [spl/u-boot-spl] Error 1
Makefile:1382: recipe for target 'spl/u-boot-spl' failed
make: *** [spl/u-boot-spl] Error 2

离线

#2 2017-08-08 08:35:36

wowo
管理员
注册时间: 2016-04-18
帖子: 221

Re: uboot 链接错误

xcl706 说:

我把内存,时钟等初始化代码写到了板级文件夹中。然后在SOC级(mach-xxxx)的通用代码中调用。编译u-boot时遇到了链接错误,提示符号未定义,也就是板级文件中定义的那些符号在链接mach-xxx相关代码时找不到。
原因大概能猜到,应该是最后的链接命令中mach-xxx的built-in.o 出现在board的built-in.o的前面。
我想问下:有没有有没有办法在不修改链接命令的情况下忽略上述的链接顺序。还有就是,为什么_start 中调用了_main 链接时却不会出错。难道有什么特殊的用法。

附上最后的链接命令和错误信息:
(cd spl && arm-linux-ld   -T u-boot-spl.lds  --gc-sections -Bstatic --gc-sections  -Ttext 0x02021410 arch/arm/cpu/armv7/start.o --start-group arch/arm/mach-exynos/built-in.o arch/arm/cpu/armv7/built-in.o arch/arm/cpu/built-in.o arch/arm/lib/built-in.o board/samsung/tiny4412/built-in.o board/samsung/common/built-in.o common/init/built-in.o drivers/built-in.o dts/built-in.o fs/built-in.o  --end-group arch/arm/lib/eabi_compat.o arch/arm/lib/lib.a -Map u-boot-spl.map -o u-boot-spl)

arch/arm/mach-exynos/built-in.o: In function `do_lowlevel_init':
/home/xcl706/Documents/Source Insight 4.0/Projects/uboot/src/arch/arm/mach-exynos/lowlevel_init.c:221: undefined reference to `system_clock_init'
/home/xcl706/Documents/Source Insight 4.0/Projects/uboot/src/arch/arm/mach-exynos/lowlevel_init.c:229: undefined reference to `mem_ctrl_init'
scripts/Makefile.spl:333: recipe for target 'spl/u-boot-spl' failed
make[1]: *** [spl/u-boot-spl] Error 1
Makefile:1382: recipe for target 'spl/u-boot-spl' failed
make: *** [spl/u-boot-spl] Error 2

SOC代码调用板级代码,本来就是不规范的用法,还是改这个地方比较好。

离线

页脚