Skip to contentSkip to conversation

linux-yocto custom device tree in overlay

DISCUSSION Andreas Galauner 3 participants 5 messages May 7, 2014 – Jul 18, 2016

lore
Share & tools
lore
#0 lore raw

Hi Yocto Community,

I'm currently trying to build a custom image for a beaglebone black for which I need to enable the can-controllers on the SoC. I managed to create an overlay which already deals with building a few tools for CAN communication, I created a kernel config snippet for linux-yocto to enable CAN-support in the kernel and it already works with a USB transceiver.

Now I need to modify the device tree for the board to enable the SoC controllers. How do I put the device tree into my overlay? I tried several ways, but the kernel buildsystem doesn't seem to find the dts file to be compiled.

That definitely doesn't work:

Quoted 3 lines
SRC_URI += "file://can.cfg \
            file://am335x-boneblack-cansniff.dts"

KERNEL_DEVICETREE = "am335x-boneblack-cansniff.dtb"

Any ideas? Google wasn't too fruitful either.
With non-yocto kernels I always put the device tree into the whole path like 'git/arch/arm/boot/dts/mydevicetree.dts' but that also doesn't seem to work on linux-yocto because it uses another layout in its working directory.

I'd rather not want to create my own git repo for linux-yocto like I did for another project where I needed the same.

Thanks for your help,
- Andy

#1 lore raw
Quoted 19 lines · Andreas Galauner

Hi Yocto Community,

I'm currently trying to build a custom image for a beaglebone black for which I need to enable the can-controllers on the SoC. I managed to create an overlay which already deals with building a few tools for CAN communication, I created a kernel config snippet for linux-yocto to enable CAN-support in the kernel and it already works with a USB transceiver.

Now I need to modify the device tree for the board to enable the SoC controllers. How do I put the device tree into my overlay? I tried several ways, but the kernel buildsystem doesn't seem to find the dts file to be compiled.

That definitely doesn't work:

Quoted 3 lines
SRC_URI += "file://can.cfg \
             file://am335x-boneblack-cansniff.dts"

KERNEL_DEVICETREE = "am335x-boneblack-cansniff.dtb"

Quoted 5 lines

Any ideas? Google wasn't too fruitful either.
With non-yocto kernels I always put the device tree into the whole path like 'git/arch/arm/boot/dts/mydevicetree.dts' but that also doesn't seem to work on linux-yocto because it uses another layout in its working directory.

I use device trees all the time with linux-yocto based kernels, and what you have above is fundamentally correct, except (as you noted) the dts is going only be in ${WORKDIR} and not somewhere the kernel build can find it.

So you can either patch it into the kernel, or do a bbappend with that copies it into the source tree (linux/arch/arm/boot/dts/mydevicetree.dts).

Cheers,

Bruce

Quoted 7 lines

I'd rather not want to create my own git repo for linux-yocto like I did for another project where I needed the same.

Thanks for your help,
- Andy

#2 lore raw
Quoted 3 lines · Bruce Ashfield

So you can either patch it into the kernel, or do a bbappend with that copies it into the source tree (linux/arch/arm/boot/dts/mydevicetree.dts).

Thx! That worked fine.

For reference, this is what I added:

Quoted 3 lines
do_install_prepend() {
	cp ${WORKDIR}/*.dts ${WORKDIR}/linux/arch/${ARCH}/boot/dts/
}

Cheers,
- Andy

#3 lore raw
Quoted 6 lines · Andreas Galauner
Quoted 3 lines · Bruce Ashfield

So you can either patch it into the kernel, or do a bbappend with that copies it into the source tree (linux/arch/arm/boot/dts/mydevicetree.dts).

Thx! That worked fine.

Glad to hear!

Bruce

Quoted 9 lines

For reference, this is what I added:

Quoted 3 lines
do_install_prepend() {
	cp ${WORKDIR}/*.dts ${WORKDIR}/linux/arch/${ARCH}/boot/dts/
}

Cheers,
- Andy

#4 lore raw
Quoted 7 lines · Bruce Ashfield
Quoted 5 lines · Andreas Galauner
Quoted 3 lines · Bruce Ashfield

So you can either patch it into the kernel, or do a bbappend with that copies it into the source tree (linux/arch/arm/boot/dts/mydevicetree.dts).

Quoted 16 lines
Quoted 1 line

Thx! That worked fine.

Glad to hear!

Bruce

Quoted 9 lines

For reference, this is what I added:

Quoted 3 lines
do_install_prepend() {
	cp ${WORKDIR}/*.dts ${WORKDIR}/linux/arch/${ARCH}/boot/dts/
}

Cheers,
- Andy

Hi,
I am running into the same problem. Editing the existing dts files in the kernel source directory does not help. After some time, the files are restored again.

I added my own dts file which is located at a different location but the method you mentioned is not clear to me. Could you please specify where did you add this? In which file?

Thanks in advance.
Adnan