[meta-xilinx] meta-xilinx device-tree recipe on master / yocto pyro

Nathan Rossi nathan at nathanrossi.com
Thu Oct 5 01:05:33 PDT 2017

On 5 October 2017 at 07:34,  <Holden.Sandlar at ultra-fei.com> wrote:
> Hi all,
> I'm hoping this is a quick and easy issue someone already knows the answer
> to. I'm working with a ZCU102, using meta-petalinux, meta-xilinx,
> meta-xilinx-tools and bitbake/poky 1.34.0 -- both meta-xilinx and
> meta-xilinx-tools on the master branch and am having an issue with the
> meta-xilinx device-tree recipe. Just for quick and easy reference, the
> device-tree recipe is here:
> https://github.com/Xilinx/meta-xilinx/blob/master/recipes-bsp/device-tree/device-tree.bb
> The issue that I'm running into is that when I run "bitbake device-tree" I
> get an error that there are no dts files in the device-tree/1.0-r0
> directory. Full error shown below:
> ERROR: device-tree-1.0-r0 do_compile: Function failed: do_compile (log file
> is located at
> /work/MPSoC/yocto_2017.2/build/tmp/work/zcu102_zynqmp-xilinx-linux/device-tree/1.0-r0/temp/log.do_compile.15884)
> ERROR: Logfile of failure stored in:
> /work/MPSoC/yocto_2017.2/build/tmp/work/zcu102_zynqmp-xilinx-linux/device-tree/1.0-r0/temp/log.do_compile.15884
> Log data follows:
> | DEBUG: Executing shell function do_compile
> |
> /work/MPSoC/yocto_2017.2/build/tmp/work/zcu102_zynqmp-xilinx-linux/device-tree/1.0-r0
> | gcc: error:
> /work/MPSoC/yocto_2017.2/build/tmp/work/zcu102_zynqmp-xilinx-linux/device-tree/1.0-r0/*.dts:
> No such file or directory
> | gcc: warning: ‘-x assembler-with-cpp’ after last input file has no effect
> | gcc: fatal error: no input files
> | compilation terminated.
> /work/MPSoC/yocto_2017.2/build/tmp/work/zcu102_zynqmp-xilinx-linux/device-tree/1.0-r0/temp/run.do_compile.15884:1
> exit 4 from 'gcc -E -nostdinc -Ulinux -x assembler-with-cpp
> -I/work/MPSoC/yocto_2017.2/build/tmp/work/zcu102_zynqmp-xilinx-linux/device-tree/1.0-r0
> -I/work/MPSoC/yocto_2017.2/build/tmp/work-shared/zcu102-zynqmp/kernel-source/arch/arm64/boot/dts
> -I/work/MPSoC/yocto_2017.2/build/tmp/work-shared/zcu102-zynqmp/kernel-source/arch/arm64/boot/dts/include
> -I/work/MPSoC/yocto_2017.2/build/tmp/work-shared/zcu102-zynqmp/kernel-source/arch/arm64/boot/dts/xilinx
> -o `basename ${DTS_FILE}`.pp ${DTS_FILE}'
> | ERROR: Function failed: do_compile (log file is located at
> /work/MPSoC/yocto_2017.2/build/tmp/work/zcu102_zynqmp-xilinx-linux/device-tree/1.0-r0/temp/log.do_compile.15884)
> ERROR: Task
> (/work/MPSoC/yocto_2017.2/sources/core/../meta-xilinx/recipes-bsp/device-tree/device-tree.bb:do_compile)
> failed with exit code '1'
> NOTE: Tasks Summary: Attempted 534 tasks of which 464 didn't need to be
> rerun and 1 failed.
> Summary: 1 task failed:
> /work/MPSoC/yocto_2017.2/sources/core/../meta-xilinx/recipes-bsp/device-tree/device-tree.bb:do_compile
> Summary: There were 5 WARNING messages shown.
> Summary: There was 1 ERROR message shown, returning a non-zero exit code.
> After reviewing the history on this recipe, it appears the recipe was
> restructured months ago to "Improve, clean up and remove
> MACHINE_DEVICETREE". Based on this commit, it appears the intent was to use
> the dts/dtsi files within the kernel sources as a base for generating a
> device tree. There was a line added to ensure that
> "virtual/kernel:do_shared_workdir" is run prior to the device-tree recipe.
> My assumption is that the kernel recipe do_shared_workdir task is supposed
> to copy the selected machine's dts files into the shared workdir so they can
> be used by this device-tree recipe. However, this does not seem to happen in
> my case --
> /work/MPSoC/yocto_2017.2/build/tmp/work-shared/zcu102-zynqmp/kernel-source$
> ls
> arch   COPYING  Documentation  fs       ipc      kernel       Makefile
> README          scripts   tools
> block  CREDITS  drivers        include  Kbuild   lib          mm
> REPORTING-BUGS  security  usr
> certs  crypto   firmware       init     Kconfig  MAINTAINERS  net
> samples         sound     virt
> Additionally, the device-tree recipe loops over any *.dts files in the ${S}
> directory, which is mapped to ${WORKDIR} in this recipe
> (https://github.com/Xilinx/meta-xilinx/blob/master/recipes-bsp/device-tree/device-tree.bb#L51).
> This loop will effectively do an ls in the
> build/tmp/work/zcu102_zynqmp-xilinx-linux/device-tree/1.0-r0 directory to
> check for any *.dts files. This directory definitely does not contain any
> dts files.
> I'm guessing I'm missing something small/simple here. Can anyone provide any
> guidance?

The 'device-tree' recipe is intended to build custom source
device-trees within OE outside of the kernel source itself (whilst
still being able to reference the kernel dts includes).

Unless you have provided some additional device tree sources via a
.bbappend to device-tree (like meta-xilinx does for some specific
machines https://github.com/Xilinx/meta-xilinx/blob/master/recipes-bsp/device-tree/device-tree.bbappend)
there will be no dts files in the ${S} directory of the device-tree
recipe build and it will fail.

The zcu102-zynqmp board already has device trees in the linux-xlnx
kernel source (built by setting KERNEL_DEVICETREE in the machine
conf), so there is no need to use device-tree for that machine.

If you are using meta-xilinx-tools you might be confusing
'device-tree' for the 'device-tree-generation' recipe? Which uses
Xilinx tools to generate device trees from your HDF design.


More information about the meta-xilinx mailing list