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 <[email protected]>
---
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: [email protected]
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.
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core