Created attachment 3181 [details] Buildroot configuration to reproduce the problem fw_printenv does not build in current versions of buildroot. The problem is well known ussue in upstream U-Boot. The good news is that there is a workaround. The bad news is that the issue is known by the U-Boot developers since last october, but there does not seem to be activity to really fix it. For the long story see the links in http://lists.denx.de/pipermail/u-boot/2011-April/089987.html . Reproduced with current buildroot (2011.02-116-g64b351f) and the attached (minimized) config. The result is: CONF config/config.in CONF config/config.in mkdir -p /home/murray/temp/buildroot-clean/output/target/usr/sbin /home/murray/temp/buildroot-clean/output/host/usr/bin/arm-unknown-linux-gnueabi-gcc --sysroot=/home/murray/temp/buildroot-clean/output/host/usr/arm-unknown-linux-gnueabi/sysroot -I/home/murray/temp/buildroot-clean/output/build/u-boot-2010.12/include -I/include \ -DUSE_HOSTCC -o /home/murray/temp/buildroot-clean/output/target/usr/sbin/fw_printenv \ /home/murray/temp/buildroot-clean/output/build/u-boot-2010.12/tools/env/*.c /home/murray/temp/buildroot-clean/output/build/u-boot-2010.12/lib*/crc32.c /home/murray/temp/buildroot-clean/output/host/usr/lib/gcc/arm-unknown-linux-gnueabi/4.4.3/../../../../arm-unknown-linux-gnueabi/bin/ld: errno: TLS definition in /home/murray/temp/buildroot-clean/output/host/usr/arm-unknown-linux-gnueabi/sysroot/lib/libc.so.6 section .tbss mismatches non-TLS reference in /tmp/cccHIRXB.o /home/murray/temp/buildroot-clean/output/host/usr/arm-unknown-linux-gnueabi/sysroot/lib/libc.so.6: could not read symbols: Bad value collect2: ld returned 1 exit status make: *** [/home/murray/temp/buildroot-clean/output/target/usr/sbin/fw_printenv] Error 1 I solved this problem applying the known workaround this way: diff --git a/boot/u-boot/u-boot.mk b/boot/u-boot/u-boot.mk index d859cf5..4de4d1f 100644 --- a/boot/u-boot/u-boot.mk +++ b/boot/u-boot/u-boot.mk @@ -166,9 +166,8 @@ $(TARGET_DIR)/usr/bin/mkimage: $(U_BOOT_DIR)/.configured # Build manually fw_printenv for the target $(TARGET_DIR)/usr/sbin/fw_printenv: $(U_BOOT_DIR)/.configured mkdir -p $(@D) - $(TARGET_CC) -I$(U_BOOT_DIR)/include -I$(LINUX_HEADERS_DIR)/include \ - -DUSE_HOSTCC -o $@ \ - $(U_BOOT_DIR)/tools/env/*.c $(U_BOOT_DIR)/lib*/crc32.c + $(MAKE) HOSTCC="$(TARGET_CC)" -C $(U_BOOT_DIR) env + cp $(U_BOOT_DIR)/tools/env/fw_printenv $@ $(STRIPCMD) $(STRIP_STRIP_UNNEEDED) $@ ln -sf fw_printenv $(TARGET_DIR)/usr/sbin/fw_setenv This works for me, but I don't know if will for other people, nor if it is general enough to be proposed for mainline buildroot inclusion. Any observations? Luca
I was first a bit concerned about how long this env target had been supported (as we support older u-boot versions as well), but it seems like it has been there very long. Thanks, committed with minor tweaks.