[xilnx zynq]petalinux u-boot_fw编译不过

参考文档:uboot_v2016 版本中fw_printenv的编译问题_arm-poky-linux-gnueabi/5.3.0/real-ld: cannot find -CSDN博客

最近研究fail-safe的嵌入式软件升级方案,需要在linux环境下修改uboot中的环境变量,所以需要交叉编译uboot中的/tool/env代码,编译过程中遇到了很多问题,最终完美解决了。我的交叉编译工具用的是freescal的imx6平台提供的arm-poky-linux-gnueabi-gcc套件,该套件是由yocto平台生成的。

1.按照网上的教程,设置完交叉编译的环境变量后,执行make env (由于全局的环境变量已经设置了CROSS_COMPILE,所以此处没有传递此参数。),但编译没有通过,错误如下:
tools/env/../../lib/aes.c:28:20: fatal error: string.h: No such file or directory
找不到string.h,该文件在交叉编译工具链的/usr/inlucde目录下,原因肯定是头文件搜索路径设置有问题。于是分析/tool/env下的makefile文件,发现里面有这样的内容 :
Although it may look weird, we only replace “HOSTCC”
with “CC” here for the maximum code reuse of scripts/Makefile.host.
HOSTCC = $(CC)
于是,又尝试用主机的编译器编译,能直接编译过。所以得出以下结论
1) 直接用HOSTCC,能编译过。肯定是找到了/usr/include文件
2)用交叉编译工具编译,无法编译过,找不到 cross-compile下的/usr/include文件

2 强制在makefile中的HOST_EXTRACFLAGS中增加交叉编译工具下的/usr/include路径,能编译通过,但是链接不过。错误如下
/opt/poky/2.1.1/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/5.3.0/real-ld: cannot find crt1.o: No such file or directory
在网上找了些方法,尝试解决,最后都失败了。

3uboot中的makefile层次关系自己不是很懂,不知道怎么修改了。所以就直接在/tool/env下面写一个makefile,按照交叉编译应用程序的方式,编译fw_printenv,但是此时最大的问题是,由于该工具大量依赖uboot中和平台相关的代码,原makefile中UBOOTINCLUDE变量中包括的头文件路径解决不了。仍然编译不过。

4 继续思考,为什么在应用程序中交叉编译时,能找到交叉编译工具下的/usr/include路径,而这次编译确找不到呢?环境变量中的CC设置如下,里面是有sysroot路径的,同一个编译工具为什么出现了两种情况?
CC=arm-poky-linux-gnueabi-gcc -march=armv7-a -marm -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 –sysroot=/opt/poky/2.1.1/sysroots/cortexa9hf-neon-poky-linux-gnueabi
接下来,分析顶层makefile中,发现关键语句。该语句相当于没使用设置的CC,而是把CC设置成了arm-poky-linux-gnueabi-gcc,后面的sysroot没设置。
CC = $(CROSS_COMPILE)gcc
原因找到,将此处的CC注释掉,使用自己设置的CC,问题解决。

----------------------------------------------------------------

修改顶层Makefile

注释掉

+++ b/u-boot-xlnx-xilinx-v2020.1/Makefile
@@ -389,7 +389,7 @@ LD          = $(CROSS_COMPILE)ld.bfd
 else
 LD             = $(CROSS_COMPILE)ld
 endif
-CC             = $(CROSS_COMPILE)gcc
+#CC            = $(CROSS_COMPILE)gcc
 CPP            = $(CC) -E
 AR             = $(CROSS_COMPILE)ar
@@ -281,7 +281,7 @@ $(LOGO_DATA_H):     $(obj)/bmp_logo $(LOGO_BMP)
 endif

 # Let clean descend into subdirs
-subdir- += env
+subdir-y += env

 ifneq ($(CROSS_BUILD_TOOLS),)
 override HOSTCC = $(CC)

使用make V=1 ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- env -j8

编译后生成fw_printenv

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值