* Re: [PATCH v2] linux-dtb: Use kernel build system to generate the dtb files
2013-08-13 13:52 [PATCH v2] linux-dtb: Use kernel build system to generate the dtb files Otavio Salvador
@ 2013-08-13 18:36 ` Bruce Ashfield
2013-08-14 7:32 ` André Draszik
` (3 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Bruce Ashfield @ 2013-08-13 18:36 UTC (permalink / raw)
To: Otavio Salvador
Cc: Evan Kotara, Lauren Post, Daiane Angolini,
OpenEmbedded Core Mailing List
On 13-08-13 09:52 AM, Otavio Salvador wrote:
> As the Linux kernel, unconditionally, builds the dtc application and
> it is the compatible version with the DeviceTree files shipped within
> the kernel it is better to use it and the kernel build system to
> generate the dtb files.
>
> Some DeviceTree files rely on CPP and kernel headers to be able to
> generate the dtb binary contents and it is harder to replicate it
> outside of Linux kernel build system so we /use/ it.
>
> To comply with these assumptions we need to use the dtb file when
> calling 'make' instead of pointing to the DeviceTree source file; the
> code has been made backward compatible but it is advised to move to
> the new definition to avoid warnings as:
>
> ,----[ Original definition ]
> | KERNEL_DEVICETREE = "${S}/arch/arm/boot/dts/imx6q-sabresd.dts"
> `----
>
> Becomes:
>
> ,----[ New definition ]
> | KERNEL_DEVICETREE = "imx6q-sabresd.dtb"
> `----
>
>
> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
This passed a build test on the yocto reference mpc8315e-rdb, so at
least in a simple case, it worked for me.
Acked-by: Bruce Ashfield <bruce.ashfield@windriver.com>
> ---
> Changes in v2:
> - Drop debug warning left by mistake
> - Improve bbwarn message (Bruce Ashfield)
> - Improve commit log (Bruce Ascfield)
>
> meta/recipes-kernel/linux/linux-dtb.inc | 58 +++++++++++++++------------------
> 1 file changed, 26 insertions(+), 32 deletions(-)
>
> diff --git a/meta/recipes-kernel/linux/linux-dtb.inc b/meta/recipes-kernel/linux/linux-dtb.inc
> index 41dd599..cebc76a 100644
> --- a/meta/recipes-kernel/linux/linux-dtb.inc
> +++ b/meta/recipes-kernel/linux/linux-dtb.inc
> @@ -1,44 +1,38 @@
> # Support for device tree generation
> FILES_kernel-devicetree = "/${KERNEL_IMAGEDEST}/devicetree*"
> -KERNEL_DEVICETREE_FLAGS ?= "-R 8 -p 0x3000"
>
> python __anonymous () {
> - devicetree = d.getVar("KERNEL_DEVICETREE", True) or ''
> - if devicetree:
> - depends = d.getVar("DEPENDS", True)
> - d.setVar("DEPENDS", "%s dtc-native" % depends)
> - packages = d.getVar("PACKAGES", True)
> - d.setVar("PACKAGES", "%s kernel-devicetree" % packages)
> + d.appendVar("PACKAGES", " kernel-devicetree")
> }
>
> do_install_append() {
> if test -n "${KERNEL_DEVICETREE}"; then
> - for DTS_FILE in ${KERNEL_DEVICETREE}; do
> - if [ ! -f ${DTS_FILE} ]; then
> - echo "Warning: ${DTS_FILE} is not available!"
> - continue
> + for DTB in ${KERNEL_DEVICETREE}; do
> + if echo ${DTB} | grep -q '/dts/'; then
> + bbwarn "${DTB} contains the full path to the the dts file, but only the dtb name should be used."
> + DTB=`basename ${DTB} | sed 's,\.dts$,.dtb,g'`
> fi
> - DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
> - DTB_NAME=`echo ${KERNEL_IMAGE_BASE_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> - DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> - dtc -I dts -O dtb ${KERNEL_DEVICETREE_FLAGS} -o ${DTS_BASE_NAME} ${DTS_FILE}
> - install -m 0644 ${DTS_BASE_NAME} ${D}/${KERNEL_IMAGEDEST}/devicetree-${DTB_SYMLINK_NAME}.dtb
> + DTB_BASE_NAME=`basename ${DTB} .dtb`
> + DTB_NAME=`echo ${KERNEL_IMAGE_BASE_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> + DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> + oe_runmake ${DTB}
> + install -m 0644 ${B}/arch/${ARCH}/boot/${DTB} ${D}/${KERNEL_IMAGEDEST}/devicetree-${DTB_SYMLINK_NAME}.dtb
> done
> fi
> }
>
> do_deploy_append() {
> if test -n "${KERNEL_DEVICETREE}"; then
> - for DTS_FILE in ${KERNEL_DEVICETREE}; do
> - if [ ! -f ${DTS_FILE} ]; then
> - echo "Warning: ${DTS_FILE} is not available!"
> - continue
> + for DTB in ${KERNEL_DEVICETREE}; do
> + if echo ${DTB} | grep -q '/dts/'; then
> + bbwarn "${DTB} contains the full path to the the dts file, but only the dtb name should be used."
> + DTB=`basename ${DTB} | sed 's,\.dts$,.dtb,g'`
> fi
> - DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
> - DTB_NAME=`echo ${KERNEL_IMAGE_BASE_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> - DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> + DTB_BASE_NAME=`basename ${DTB} .dtb`
> + DTB_NAME=`echo ${KERNEL_IMAGE_BASE_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> + DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> install -d ${DEPLOYDIR}
> - install -m 0644 ${B}/${DTS_BASE_NAME} ${DEPLOYDIR}/${DTB_NAME}.dtb
> + install -m 0644 ${B}/arch/${ARCH}/boot/${DTB} ${DEPLOYDIR}/${DTB_NAME}.dtb
> cd ${DEPLOYDIR}
> ln -sf ${DTB_NAME}.dtb ${DTB_SYMLINK_NAME}.dtb
> cd -
> @@ -48,20 +42,20 @@ do_deploy_append() {
>
> pkg_postinst_kernel-devicetree () {
> cd /${KERNEL_IMAGEDEST}
> - for DTS_FILE in ${KERNEL_DEVICETREE}
> + for DTB_FILE in ${KERNEL_DEVICETREE}
> do
> - DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
> - DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> - update-alternatives --install /${KERNEL_IMAGEDEST}/${DTS_BASE_NAME}.dtb ${DTS_BASE_NAME}.dtb devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true
> + DTB_BASE_NAME=`basename ${DTB_FILE} | awk -F "." '{print $1}'`
> + DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> + update-alternatives --install /${KERNEL_IMAGEDEST}/${DTB_BASE_NAME}.dtb ${DTB_BASE_NAME}.dtb devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true
> done
> }
>
> pkg_postrm_kernel-devicetree () {
> cd /${KERNEL_IMAGEDEST}
> - for DTS_FILE in ${KERNEL_DEVICETREE}
> + for DTB_FILE in ${KERNEL_DEVICETREE}
> do
> - DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
> - DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> - update-alternatives --remove ${DTS_BASE_NAME}.dtb devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true
> + DTB_BASE_NAME=`basename ${DTB_FILE} | awk -F "." '{print $1}'`
> + DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> + update-alternatives --remove ${DTB_BASE_NAME}.dtb devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true
> done
> }
>
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v2] linux-dtb: Use kernel build system to generate the dtb files
2013-08-13 13:52 [PATCH v2] linux-dtb: Use kernel build system to generate the dtb files Otavio Salvador
2013-08-13 18:36 ` Bruce Ashfield
@ 2013-08-14 7:32 ` André Draszik
2013-08-14 14:17 ` Mike Looijmans
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: André Draszik @ 2013-08-14 7:32 UTC (permalink / raw)
To: OpenEmbedded Core Mailing List
Hi,
Can this please be pushed to dylan as well, please. It's a useful
change, and I then could remove my version of that patch from our
layer :-)
Cheers,
Andre'
On Tue, 2013-08-13 at 10:52 -0300, Otavio Salvador wrote:
> As the Linux kernel, unconditionally, builds the dtc application and
> it is the compatible version with the DeviceTree files shipped within
> the kernel it is better to use it and the kernel build system to
> generate the dtb files.
>
> Some DeviceTree files rely on CPP and kernel headers to be able to
> generate the dtb binary contents and it is harder to replicate it
> outside of Linux kernel build system so we /use/ it.
>
> To comply with these assumptions we need to use the dtb file when
> calling 'make' instead of pointing to the DeviceTree source file; the
> code has been made backward compatible but it is advised to move to
> the new definition to avoid warnings as:
>
> ,----[ Original definition ]
> | KERNEL_DEVICETREE = "${S}/arch/arm/boot/dts/imx6q-sabresd.dts"
> `----
>
> Becomes:
>
> ,----[ New definition ]
> | KERNEL_DEVICETREE = "imx6q-sabresd.dtb"
> `----
>
>
> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
> ---
> Changes in v2:
> - Drop debug warning left by mistake
> - Improve bbwarn message (Bruce Ashfield)
> - Improve commit log (Bruce Ascfield)
>
> meta/recipes-kernel/linux/linux-dtb.inc | 58 +++++++++++++++------------------
> 1 file changed, 26 insertions(+), 32 deletions(-)
>
> diff --git a/meta/recipes-kernel/linux/linux-dtb.inc b/meta/recipes-kernel/linux/linux-dtb.inc
> index 41dd599..cebc76a 100644
> --- a/meta/recipes-kernel/linux/linux-dtb.inc
> +++ b/meta/recipes-kernel/linux/linux-dtb.inc
> @@ -1,44 +1,38 @@
> # Support for device tree generation
> FILES_kernel-devicetree = "/${KERNEL_IMAGEDEST}/devicetree*"
> -KERNEL_DEVICETREE_FLAGS ?= "-R 8 -p 0x3000"
>
> python __anonymous () {
> - devicetree = d.getVar("KERNEL_DEVICETREE", True) or ''
> - if devicetree:
> - depends = d.getVar("DEPENDS", True)
> - d.setVar("DEPENDS", "%s dtc-native" % depends)
> - packages = d.getVar("PACKAGES", True)
> - d.setVar("PACKAGES", "%s kernel-devicetree" % packages)
> + d.appendVar("PACKAGES", " kernel-devicetree")
> }
>
> do_install_append() {
> if test -n "${KERNEL_DEVICETREE}"; then
> - for DTS_FILE in ${KERNEL_DEVICETREE}; do
> - if [ ! -f ${DTS_FILE} ]; then
> - echo "Warning: ${DTS_FILE} is not available!"
> - continue
> + for DTB in ${KERNEL_DEVICETREE}; do
> + if echo ${DTB} | grep -q '/dts/'; then
> + bbwarn "${DTB} contains the full path to the the dts file, but only the dtb name should be used."
> + DTB=`basename ${DTB} | sed 's,\.dts$,.dtb,g'`
> fi
> - DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
> - DTB_NAME=`echo ${KERNEL_IMAGE_BASE_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> - DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> - dtc -I dts -O dtb ${KERNEL_DEVICETREE_FLAGS} -o ${DTS_BASE_NAME} ${DTS_FILE}
> - install -m 0644 ${DTS_BASE_NAME} ${D}/${KERNEL_IMAGEDEST}/devicetree-${DTB_SYMLINK_NAME}.dtb
> + DTB_BASE_NAME=`basename ${DTB} .dtb`
> + DTB_NAME=`echo ${KERNEL_IMAGE_BASE_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> + DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> + oe_runmake ${DTB}
> + install -m 0644 ${B}/arch/${ARCH}/boot/${DTB} ${D}/${KERNEL_IMAGEDEST}/devicetree-${DTB_SYMLINK_NAME}.dtb
> done
> fi
> }
>
> do_deploy_append() {
> if test -n "${KERNEL_DEVICETREE}"; then
> - for DTS_FILE in ${KERNEL_DEVICETREE}; do
> - if [ ! -f ${DTS_FILE} ]; then
> - echo "Warning: ${DTS_FILE} is not available!"
> - continue
> + for DTB in ${KERNEL_DEVICETREE}; do
> + if echo ${DTB} | grep -q '/dts/'; then
> + bbwarn "${DTB} contains the full path to the the dts file, but only the dtb name should be used."
> + DTB=`basename ${DTB} | sed 's,\.dts$,.dtb,g'`
> fi
> - DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
> - DTB_NAME=`echo ${KERNEL_IMAGE_BASE_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> - DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> + DTB_BASE_NAME=`basename ${DTB} .dtb`
> + DTB_NAME=`echo ${KERNEL_IMAGE_BASE_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> + DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> install -d ${DEPLOYDIR}
> - install -m 0644 ${B}/${DTS_BASE_NAME} ${DEPLOYDIR}/${DTB_NAME}.dtb
> + install -m 0644 ${B}/arch/${ARCH}/boot/${DTB} ${DEPLOYDIR}/${DTB_NAME}.dtb
> cd ${DEPLOYDIR}
> ln -sf ${DTB_NAME}.dtb ${DTB_SYMLINK_NAME}.dtb
> cd -
> @@ -48,20 +42,20 @@ do_deploy_append() {
>
> pkg_postinst_kernel-devicetree () {
> cd /${KERNEL_IMAGEDEST}
> - for DTS_FILE in ${KERNEL_DEVICETREE}
> + for DTB_FILE in ${KERNEL_DEVICETREE}
> do
> - DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
> - DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> - update-alternatives --install /${KERNEL_IMAGEDEST}/${DTS_BASE_NAME}.dtb ${DTS_BASE_NAME}.dtb devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true
> + DTB_BASE_NAME=`basename ${DTB_FILE} | awk -F "." '{print $1}'`
> + DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> + update-alternatives --install /${KERNEL_IMAGEDEST}/${DTB_BASE_NAME}.dtb ${DTB_BASE_NAME}.dtb devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true
> done
> }
>
> pkg_postrm_kernel-devicetree () {
> cd /${KERNEL_IMAGEDEST}
> - for DTS_FILE in ${KERNEL_DEVICETREE}
> + for DTB_FILE in ${KERNEL_DEVICETREE}
> do
> - DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
> - DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> - update-alternatives --remove ${DTS_BASE_NAME}.dtb devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true
> + DTB_BASE_NAME=`basename ${DTB_FILE} | awk -F "." '{print $1}'`
> + DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> + update-alternatives --remove ${DTB_BASE_NAME}.dtb devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true
> done
> }
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v2] linux-dtb: Use kernel build system to generate the dtb files
2013-08-13 13:52 [PATCH v2] linux-dtb: Use kernel build system to generate the dtb files Otavio Salvador
2013-08-13 18:36 ` Bruce Ashfield
2013-08-14 7:32 ` André Draszik
@ 2013-08-14 14:17 ` Mike Looijmans
2013-08-15 2:39 ` Otavio Salvador
2013-08-14 14:32 ` How about deploying devicetree (dtb) files? Mike Looijmans
2013-08-20 9:55 ` [PATCH v2] linux-dtb: Use kernel build system to generate the dtb files Mike Looijmans
4 siblings, 1 reply; 8+ messages in thread
From: Mike Looijmans @ 2013-08-14 14:17 UTC (permalink / raw)
To: openembedded-core
On 08/13/2013 03:52 PM, Otavio Salvador wrote:
> As the Linux kernel, unconditionally, builds the dtc application and
> it is the compatible version with the DeviceTree files shipped within
> the kernel it is better to use it and the kernel build system to
> generate the dtb files.
>
> Some DeviceTree files rely on CPP and kernel headers to be able to
> generate the dtb binary contents and it is harder to replicate it
> outside of Linux kernel build system so we /use/ it.
>
> To comply with these assumptions we need to use the dtb file when
> calling 'make' instead of pointing to the DeviceTree source file; the
> code has been made backward compatible but it is advised to move to
> the new definition to avoid warnings as:
>
> ,----[ Original definition ]
> | KERNEL_DEVICETREE = "${S}/arch/arm/boot/dts/imx6q-sabresd.dts"
> `----
>
> Becomes:
>
> ,----[ New definition ]
> | KERNEL_DEVICETREE = "imx6q-sabresd.dtb"
> `----
I currently have a "bbappend" that adds a DTB file from outside the
kernel (listing driver configuration that is implemented in the FPGA
part of the SOC). The DTB file /include/s files from the kernel (that
is, it gets everything from the standard files and adds a single device).
How would I go about adding this after this change?
(as for the change itself, I'm all in favor)
Mike.
Met vriendelijke groet / kind regards,
Mike Looijmans
TOPIC Embedded Systems
Eindhovenseweg 32-C, NL-5683 KH Best
Postbus 440, NL-5680 AK Best
Telefoon: (+31) – (0)499 - 33.69.79
Telefax: (+31) - (0)499 - 33.69.70
E-mail: mike.looijmans@topic.nl
Website: www.topic.nl
Dit e-mail bericht en de eventueel daarbij behorende bijlagen zijn uitsluitend bestemd voor de geadresseerde, zoals die blijkt uit het e-mail bericht en/of de bijlagen. Er kunnen gegevens met betrekking tot een derde instaan. Indien u als niet-geadresseerde dit bericht en de bijlagen ontvangt, terwijl u niet bevoegd of gemachtigd bent om dit bericht namens de geadresseerde te ontvangen, wordt u verzocht de afzender hierover direct te informeren en het e-mail bericht met de bijlagen te vernietigen. Ieder gebruik van de inhoud van het e-mail bericht, waaronder de daarbij behorende bijlagen, door een ander dan de geadresseerde is onrechtmatig jegens ons dan wel de eventueel in het e-mail bericht of de bijlagen voorkomende andere personen. TOPIC Embedded Systems is niet aansprakelijk voor enigerlei schade voortvloeiend uit het gebruik en/of acceptatie van dit e-mail bericht of de daarbij behorende bijlagen.
The contents of this message, as well as any enclosures, are addressed personally to, and thus solely intended for the addressee. They may contain information regarding a third party. A recipient who is neither the addressee, nor empowered to receive this message on behalf of the addressee, is kindly requested to immediately inform the sender of receipt, and to destroy the message and the enclosures. Any use of the contents of this message and/or the enclosures by any other person than the addressee or person who is empowered to receive this message, is illegal towards the sender and/or the aforementioned third party. TOPIC Embedded Systems is not liable for any damage as a result of the use and/or acceptance of this message and as well as any enclosures.
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v2] linux-dtb: Use kernel build system to generate the dtb files
2013-08-14 14:17 ` Mike Looijmans
@ 2013-08-15 2:39 ` Otavio Salvador
0 siblings, 0 replies; 8+ messages in thread
From: Otavio Salvador @ 2013-08-15 2:39 UTC (permalink / raw)
To: Mike Looijmans; +Cc: Patches and discussions about the oe-core layer
On Wed, Aug 14, 2013 at 11:17 AM, Mike Looijmans
<mike.looijmans@topic.nl> wrote:
>
> On 08/13/2013 03:52 PM, Otavio Salvador wrote:
>>
>> As the Linux kernel, unconditionally, builds the dtc application and
>> it is the compatible version with the DeviceTree files shipped within
>> the kernel it is better to use it and the kernel build system to
>> generate the dtb files.
>>
>> Some DeviceTree files rely on CPP and kernel headers to be able to
>> generate the dtb binary contents and it is harder to replicate it
>> outside of Linux kernel build system so we /use/ it.
>>
>> To comply with these assumptions we need to use the dtb file when
>> calling 'make' instead of pointing to the DeviceTree source file; the
>> code has been made backward compatible but it is advised to move to
>> the new definition to avoid warnings as:
>>
>> ,----[ Original definition ]
>> | KERNEL_DEVICETREE = "${S}/arch/arm/boot/dts/imx6q-sabresd.dts"
>> `----
>>
>> Becomes:
>>
>> ,----[ New definition ]
>> | KERNEL_DEVICETREE = "imx6q-sabresd.dtb"
>> `----
>
>
> I currently have a "bbappend" that adds a DTB file from outside the kernel
> (listing driver configuration that is implemented in the FPGA part of the
> SOC). The DTB file /include/s files from the kernel (that is, it gets
> everything from the standard files and adds a single device).
>
> How would I go about adding this after this change?
Apply a patch?
--
Otavio Salvador O.S. Systems
http://www.ossystems.com.br http://projetos.ossystems.com.br
Mobile: +55 (53) 9981-7854 Mobile: +1 (347) 903-9750
^ permalink raw reply [flat|nested] 8+ messages in thread
* How about deploying devicetree (dtb) files?
2013-08-13 13:52 [PATCH v2] linux-dtb: Use kernel build system to generate the dtb files Otavio Salvador
` (2 preceding siblings ...)
2013-08-14 14:17 ` Mike Looijmans
@ 2013-08-14 14:32 ` Mike Looijmans
2013-08-20 9:55 ` [PATCH v2] linux-dtb: Use kernel build system to generate the dtb files Mike Looijmans
4 siblings, 0 replies; 8+ messages in thread
From: Mike Looijmans @ 2013-08-14 14:32 UTC (permalink / raw)
To: openembedded-core
Now that the subject came up, maybe it's good to exchange some ideas here.
Building the DTB is one thing. But we have to get it on the target as well.
Currently, a bitbake virtual/kernel will also build one or more dtb
files, and put them in the directory where the images will end up. It's
up to the user to make it so that the blobs actually get programmed onto
the target. Nothing wrong with that.
At some point, I thought it would be a good idea to be able to upgrade
boards "in the field". So I added a postinstall script to the kernel to
deploy in "/tmp/boot" instead of "/boot" and then make it write itself
into the flash device or onto the FAT partition on the SD card, or
whatever other method I came up with to load the kernel.
Now for the devicetree, I thought I could just include the
"kernel-devicetree" package onto my system, add a bit of script, and
that would allow me to have devices upgrade themselves.
The "kernel-devicetree" package contains multiple DTB files. I would
expect a target to actually use only one, and that the various dtb files
are intended for different targets. I think it would make sense to split
that single package into a package for each DTB file. Then you can pick
and choose which dtb you want on your target.
Another issue is that the kernel-devicetree package postinstall script
calls "awk" and "update-alternatives". Those must therefore be present
on the target, if you expect to be able to install or upgrade it. As far
as I can see, the only reason for using these tools is to create a
symbolic link. As far as I know, no other package provides a dtb file.
So why is it registering itself as an alternative?
And I was just wondering, how do you guys handle upgrading kernel,
bootloader and devicetree files?
Met vriendelijke groet / kind regards,
Mike Looijmans
TOPIC Embedded Systems
Eindhovenseweg 32-C, NL-5683 KH Best
Postbus 440, NL-5680 AK Best
Telefoon: (+31) – (0)499 - 33.69.79
Telefax: (+31) - (0)499 - 33.69.70
E-mail: mike.looijmans@topic.nl
Website: www.topic.nl
Dit e-mail bericht en de eventueel daarbij behorende bijlagen zijn uitsluitend bestemd voor de geadresseerde, zoals die blijkt uit het e-mail bericht en/of de bijlagen. Er kunnen gegevens met betrekking tot een derde instaan. Indien u als niet-geadresseerde dit bericht en de bijlagen ontvangt, terwijl u niet bevoegd of gemachtigd bent om dit bericht namens de geadresseerde te ontvangen, wordt u verzocht de afzender hierover direct te informeren en het e-mail bericht met de bijlagen te vernietigen. Ieder gebruik van de inhoud van het e-mail bericht, waaronder de daarbij behorende bijlagen, door een ander dan de geadresseerde is onrechtmatig jegens ons dan wel de eventueel in het e-mail bericht of de bijlagen voorkomende andere personen. TOPIC Embedded Systems is niet aansprakelijk voor enigerlei schade voortvloeiend uit het gebruik en/of acceptatie van dit e-mail bericht of de daarbij behorende bijlagen.
The contents of this message, as well as any enclosures, are addressed personally to, and thus solely intended for the addressee. They may contain information regarding a third party. A recipient who is neither the addressee, nor empowered to receive this message on behalf of the addressee, is kindly requested to immediately inform the sender of receipt, and to destroy the message and the enclosures. Any use of the contents of this message and/or the enclosures by any other person than the addressee or person who is empowered to receive this message, is illegal towards the sender and/or the aforementioned third party. TOPIC Embedded Systems is not liable for any damage as a result of the use and/or acceptance of this message and as well as any enclosures.
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v2] linux-dtb: Use kernel build system to generate the dtb files
2013-08-13 13:52 [PATCH v2] linux-dtb: Use kernel build system to generate the dtb files Otavio Salvador
` (3 preceding siblings ...)
2013-08-14 14:32 ` How about deploying devicetree (dtb) files? Mike Looijmans
@ 2013-08-20 9:55 ` Mike Looijmans
2013-08-20 12:02 ` Otavio Salvador
4 siblings, 1 reply; 8+ messages in thread
From: Mike Looijmans @ 2013-08-20 9:55 UTC (permalink / raw)
To: Otavio Salvador
Cc: Evan Kotara, Daiane Angolini, OpenEmbedded Core Mailing List
I cannot get this to work, do_install fails because it cannot find the
generated ".dtb" file.
See further in the message:
On 08/13/2013 03:52 PM, Otavio Salvador wrote:
> As the Linux kernel, unconditionally, builds the dtc application and
> it is the compatible version with the DeviceTree files shipped within
> the kernel it is better to use it and the kernel build system to
> generate the dtb files.
>
> Some DeviceTree files rely on CPP and kernel headers to be able to
> generate the dtb binary contents and it is harder to replicate it
> outside of Linux kernel build system so we /use/ it.
>
> To comply with these assumptions we need to use the dtb file when
> calling 'make' instead of pointing to the DeviceTree source file; the
> code has been made backward compatible but it is advised to move to
> the new definition to avoid warnings as:
>
> ,----[ Original definition ]
> | KERNEL_DEVICETREE = "${S}/arch/arm/boot/dts/imx6q-sabresd.dts"
> `----
>
> Becomes:
>
> ,----[ New definition ]
> | KERNEL_DEVICETREE = "imx6q-sabresd.dtb"
> `----
>
>
> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
> ---
> Changes in v2:
> - Drop debug warning left by mistake
> - Improve bbwarn message (Bruce Ashfield)
> - Improve commit log (Bruce Ascfield)
>
> meta/recipes-kernel/linux/linux-dtb.inc | 58 +++++++++++++++------------------
> 1 file changed, 26 insertions(+), 32 deletions(-)
>
> diff --git a/meta/recipes-kernel/linux/linux-dtb.inc b/meta/recipes-kernel/linux/linux-dtb.inc
> index 41dd599..cebc76a 100644
> --- a/meta/recipes-kernel/linux/linux-dtb.inc
> +++ b/meta/recipes-kernel/linux/linux-dtb.inc
> @@ -1,44 +1,38 @@
> # Support for device tree generation
> FILES_kernel-devicetree = "/${KERNEL_IMAGEDEST}/devicetree*"
> -KERNEL_DEVICETREE_FLAGS ?= "-R 8 -p 0x3000"
>
> python __anonymous () {
> - devicetree = d.getVar("KERNEL_DEVICETREE", True) or ''
> - if devicetree:
> - depends = d.getVar("DEPENDS", True)
> - d.setVar("DEPENDS", "%s dtc-native" % depends)
> - packages = d.getVar("PACKAGES", True)
> - d.setVar("PACKAGES", "%s kernel-devicetree" % packages)
> + d.appendVar("PACKAGES", " kernel-devicetree")
> }
>
> do_install_append() {
> if test -n "${KERNEL_DEVICETREE}"; then
> - for DTS_FILE in ${KERNEL_DEVICETREE}; do
> - if [ ! -f ${DTS_FILE} ]; then
> - echo "Warning: ${DTS_FILE} is not available!"
> - continue
> + for DTB in ${KERNEL_DEVICETREE}; do
> + if echo ${DTB} | grep -q '/dts/'; then
> + bbwarn "${DTB} contains the full path to the the dts file, but only the dtb name should be used."
> + DTB=`basename ${DTB} | sed 's,\.dts$,.dtb,g'`
> fi
> - DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
> - DTB_NAME=`echo ${KERNEL_IMAGE_BASE_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> - DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> - dtc -I dts -O dtb ${KERNEL_DEVICETREE_FLAGS} -o ${DTS_BASE_NAME} ${DTS_FILE}
> - install -m 0644 ${DTS_BASE_NAME} ${D}/${KERNEL_IMAGEDEST}/devicetree-${DTB_SYMLINK_NAME}.dtb
> + DTB_BASE_NAME=`basename ${DTB} .dtb`
> + DTB_NAME=`echo ${KERNEL_IMAGE_BASE_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> + DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> + oe_runmake ${DTB}
> + install -m 0644 ${B}/arch/${ARCH}/boot/${DTB} ${D}/${KERNEL_IMAGEDEST}/devicetree-${DTB_SYMLINK_NAME}.dtb
This fails now, because ${B}/arch/${ARCH}/boot/${DTB} cannot be found.
The dtb file is in the "dts" subdirectory, so should this line read:
+ install -m 0644 ${B}/arch/${ARCH}/boot/dts/${DTB}
${D}/${KERNEL_IMAGEDEST}/devicetree-${DTB_SYMLINK_NAME}.dtb
I wonder why this works on your system?
> done
> fi
> }
>
> do_deploy_append() {
> if test -n "${KERNEL_DEVICETREE}"; then
> - for DTS_FILE in ${KERNEL_DEVICETREE}; do
> - if [ ! -f ${DTS_FILE} ]; then
> - echo "Warning: ${DTS_FILE} is not available!"
> - continue
> + for DTB in ${KERNEL_DEVICETREE}; do
> + if echo ${DTB} | grep -q '/dts/'; then
> + bbwarn "${DTB} contains the full path to the the dts file, but only the dtb name should be used."
> + DTB=`basename ${DTB} | sed 's,\.dts$,.dtb,g'`
> fi
> - DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
> - DTB_NAME=`echo ${KERNEL_IMAGE_BASE_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> - DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> + DTB_BASE_NAME=`basename ${DTB} .dtb`
> + DTB_NAME=`echo ${KERNEL_IMAGE_BASE_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> + DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> install -d ${DEPLOYDIR}
> - install -m 0644 ${B}/${DTS_BASE_NAME} ${DEPLOYDIR}/${DTB_NAME}.dtb
> + install -m 0644 ${B}/arch/${ARCH}/boot/${DTB} ${DEPLOYDIR}/${DTB_NAME}.dtb
> cd ${DEPLOYDIR}
> ln -sf ${DTB_NAME}.dtb ${DTB_SYMLINK_NAME}.dtb
> cd -
> @@ -48,20 +42,20 @@ do_deploy_append() {
>
> pkg_postinst_kernel-devicetree () {
> cd /${KERNEL_IMAGEDEST}
> - for DTS_FILE in ${KERNEL_DEVICETREE}
> + for DTB_FILE in ${KERNEL_DEVICETREE}
> do
> - DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
> - DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> - update-alternatives --install /${KERNEL_IMAGEDEST}/${DTS_BASE_NAME}.dtb ${DTS_BASE_NAME}.dtb devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true
> + DTB_BASE_NAME=`basename ${DTB_FILE} | awk -F "." '{print $1}'`
> + DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> + update-alternatives --install /${KERNEL_IMAGEDEST}/${DTB_BASE_NAME}.dtb ${DTB_BASE_NAME}.dtb devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true
> done
> }
>
> pkg_postrm_kernel-devicetree () {
> cd /${KERNEL_IMAGEDEST}
> - for DTS_FILE in ${KERNEL_DEVICETREE}
> + for DTB_FILE in ${KERNEL_DEVICETREE}
> do
> - DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
> - DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTS_BASE_NAME}/g"`
> - update-alternatives --remove ${DTS_BASE_NAME}.dtb devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true
> + DTB_BASE_NAME=`basename ${DTB_FILE} | awk -F "." '{print $1}'`
> + DTB_SYMLINK_NAME=`echo ${KERNEL_IMAGE_SYMLINK_NAME} | sed "s/${MACHINE}/${DTB_BASE_NAME}/g"`
> + update-alternatives --remove ${DTB_BASE_NAME}.dtb devicetree-${DTB_SYMLINK_NAME}.dtb ${KERNEL_PRIORITY} || true
> done
> }
>
Met vriendelijke groet / kind regards,
Mike Looijmans
TOPIC Embedded Systems
Eindhovenseweg 32-C, NL-5683 KH Best
Postbus 440, NL-5680 AK Best
Telefoon: (+31) – (0)499 - 33.69.79
Telefax: (+31) - (0)499 - 33.69.70
E-mail: mike.looijmans@topic.nl
Website: www.topic.nl
Dit e-mail bericht en de eventueel daarbij behorende bijlagen zijn uitsluitend bestemd voor de geadresseerde, zoals die blijkt uit het e-mail bericht en/of de bijlagen. Er kunnen gegevens met betrekking tot een derde instaan. Indien u als niet-geadresseerde dit bericht en de bijlagen ontvangt, terwijl u niet bevoegd of gemachtigd bent om dit bericht namens de geadresseerde te ontvangen, wordt u verzocht de afzender hierover direct te informeren en het e-mail bericht met de bijlagen te vernietigen. Ieder gebruik van de inhoud van het e-mail bericht, waaronder de daarbij behorende bijlagen, door een ander dan de geadresseerde is onrechtmatig jegens ons dan wel de eventueel in het e-mail bericht of de bijlagen voorkomende andere personen. TOPIC Embedded Systems is niet aansprakelijk voor enigerlei schade voortvloeiend uit het gebruik en/of acceptatie van dit e-mail bericht of de daarbij behorende bijlagen.
The contents of this message, as well as any enclosures, are addressed personally to, and thus solely intended for the addressee. They may contain information regarding a third party. A recipient who is neither the addressee, nor empowered to receive this message on behalf of the addressee, is kindly requested to immediately inform the sender of receipt, and to destroy the message and the enclosures. Any use of the contents of this message and/or the enclosures by any other person than the addressee or person who is empowered to receive this message, is illegal towards the sender and/or the aforementioned third party. TOPIC Embedded Systems is not liable for any damage as a result of the use and/or acceptance of this message and as well as any enclosures.
^ permalink raw reply [flat|nested] 8+ messages in thread