Bug 11706

Summary: binman (U-boot tool) cannot find libfdt "binman: No module named _libfdt" if python3 selected
Product: buildroot Reporter: safyannikov
Component: OtherAssignee: unassigned
Status: RESOLVED FIXED    
Severity: normal CC: buildroot, safyannikov
Priority: P5    
Version: unspecified   
Target Milestone: ---   
Hardware: All   
OS: Linux   
Host: Target:
Build:

Description safyannikov 2019-02-27 08:07:57 UTC
U-Boot building fails with:

...
  LD      spl/u-boot-spl
  OBJCOPY spl/u-boot-spl-nodtb.bin
  COPY    spl/u-boot-spl.bin
  MKSUNXI spl/sunxi-spl.bin
  BINMAN  u-boot-sunxi-with-spl.bin
binman: No module named _libfdt
make[1]: *** [Makefile:1348: u-boot-sunxi-with-spl.bin] Error 1


This situation occurs on system with only python3 installed and after selecting python3 to install on image


So far I can reproduce this situation by this way:

Take clean buildroot.
Configure it for for any sun7i-a20 board
Turn on U-boot and select creation of SPL
Turn on dtc and libfdt for uboot

Configure U-boot for sunxi boards

Build image. 
And everything will be fine

After that cleanup, select python3, and try to build again

It does not make, and get error in this situation.

I remember there was a bug some years ago with uboot using python3 instead of python2. That bug was fixed, but looks like 'binman' now stumble on the same rope
Comment 1 Carlos Santos 2019-08-13 01:17:32 UTC
Sorry for the late answer. I'm taking this bug.

Is this report still valid? If yes, please attach a copy your defconfig. You
can create it with:

   $ make sevedefconfig BR2_DEFCONFIG=/tmp/defconfig

Then attach the generated /tmp/defconfig to this case.
Comment 2 Thomas Petazzoni 2019-08-15 14:03:46 UTC
I can indeed reproduce the issue with the following defconfig:

BR2_arm=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-full-2019.05.1.tar.bz2"
BR2_TOOLCHAIN_EXTERNAL_GCC_4_9=y
BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_14=y
BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
BR2_TOOLCHAIN_EXTERNAL_CXX=y
BR2_INIT_NONE=y
BR2_SYSTEM_BIN_SH_NONE=y
# BR2_PACKAGE_BUSYBOX is not set
BR2_PACKAGE_LIBVIPS=y
# BR2_TARGET_ROOTFS_TAR is not set

The problem is that binman has the following shebang:

#!/usr/bin/env python2

When python3 is selected for the target, we build host-python3, and we install all host-Python modules for host-python3. So when binman uses python2, it uses the system-provided python2, which does not have those additional Python modules installed.
Comment 3 Fabrice Fontaine 2020-03-03 21:22:52 UTC
binman uses python3 since version 2020.01 and https://github.com/u-boot/u-boot/commit/388560134b99dc4cc752627d3a7e9f8c8c2a89a7.

uboot-tools has been bumped to 2020.01 on January 24th with https://git.buildroot.net/buildroot/commit/?id=8258a60ad403d8e2637bd1226ec43863e4160726 so perhaps this issue has been "fixed".
Comment 4 Thomas Petazzoni 2021-02-16 21:48:06 UTC
I indeed think this issue is resolved now that binman uses python3 in more recent versions of U-Boot. Also Buildroot has been enhanced to be able to describe U-Boot configurations that depend on python2 or python3.

Let's assume this is fixed.