uboot 链接错误
本文是原「蜗窝讨论区」的历史存档(2017-08-04),来自版块「X Project」,共 2 帖。讨论区已停止服务,此处仅供查阅。
我把内存,时钟等初始化代码写到了板级文件夹中。然后在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 tosystem_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]: *** Error 1
Makefile:1382: recipe for target 'spl/u-boot-spl' failed
make: *** Error 2
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 tosystem_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]: *** Error 1
Makefile:1382: recipe for target 'spl/u-boot-spl' failed
make: *** Error 2
SOC代码调用板级代码,本来就是不规范的用法,还是改这个地方比较好。
