Hi,
I am using the attached.
To use DTC+CPP, instead of giving the full path
arch/${ARCH}/boot/dts/<filename>, you only have to specify <filename> in
KERNEL_DEVICETREE.
This was done to stay compatible with existing build rules, but I don't
know if this would work for the case ${ARCH} != arm
Cheers,
Andre'
On Mon, 2013-07-22 at 09:25 -0300, Otavio Salvador wrote:
> Hello,
>
> I need to use one kernel which uses dtc_cpp. So for now I ended
> duplicating all linux-dtc.inc file for it.
>
> Does someone have a better option?
>
> --
> 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
> _______________________________________________
> Openembedded-core mailing list
> [email protected]
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
>From c75412b664d1d5acc6d50b8b5ea5a54af703b534 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <[email protected]>
Date: Fri, 19 Jul 2013 09:15:42 +0100
Subject: [PATCH] linux-dtb: allow to build dtb using support from kernel
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The kernel build system has native support for device tree
source files that /include/ additional files and it also
supports the source file to be pre-processed using CPP.
This commits lets OE use the kbuild system if
$KERNEL_DEVICETREE points to file(s) that are located in
arch/${ARCH}/boot/dts/
Signed-off-by: André Draszik <[email protected]>
---
meta/recipes-kernel/linux/linux-dtb.inc | 76 +++++++++++++++++++++++++++------
1 file changed, 64 insertions(+), 12 deletions(-)
diff --git a/meta/recipes-kernel/linux/linux-dtb.inc b/meta/recipes-kernel/linux/linux-dtb.inc
index 58b93a1..c8951ed 100644
--- a/meta/recipes-kernel/linux/linux-dtb.inc
+++ b/meta/recipes-kernel/linux/linux-dtb.inc
@@ -1,28 +1,67 @@
+inherit kernel-arch
+
# Support for device tree generation
FILES_kernel-devicetree = "/boot/devicetree*"
KERNEL_DEVICETREE_FLAGS ?= "-R 8 -p 0x3000"
python __anonymous () {
+ from os import path
+
devicetree = d.getVar("KERNEL_DEVICETREE", True) or ''
if devicetree:
- depends = d.getVar("DEPENDS", True)
- d.setVar("DEPENDS", "%s dtc-native" % depends)
+ # fixme: add dependency only if file not found
+ S = d.getVar("S", True)
+ for DTS_FILE in devicetree.split():
+ DTS_FILE = S + "/" + DTS_FILE
+ if os.path.exists(DTS_FILE):
+ # full path given, use dtc-native
+ print "old style KERNEL_DEVICETREE, adding depend on dtc-native"
+ depends = d.getVar("DEPENDS", True)
+ d.setVar("DEPENDS", "%s dtc-native" % depends)
+ else:
+ # new style - it's just a file name, under arch/${ARCH}/boot/dts
+ # we don't need dtc-native, as we use the kernel's compiler
+ print "new style KERNEL_DEVICETREE"
packages = d.getVar("PACKAGES", True)
d.setVar("PACKAGES", "%s kernel-devicetree" % packages)
}
-do_install_append() {
+do_compile_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
+ if [ ! -f arch/${ARCH}/boot/dts/${DTS_FILE} ]; then
+ echo "Warning: ${DTS_FILE} is not available!"
+ continue
+ fi
+
+ # standard build using kbuild
+ echo "Info: standard kbuild for device tree blob"
+ DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
+
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
+ oe_runmake ${DTS_BASE_NAME}.dtb CC="${KERNEL_CC}" LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS}
fi
+ done
+ fi
+}
+
+do_install_append() {
+ if test -n "${KERNEL_DEVICETREE}"; then
+ for DTS_FILE in ${KERNEL_DEVICETREE}; do
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}/boot/devicetree-${DTB_SYMLINK_NAME}.dtb
+ if [ ! -f ${DTS_FILE} ]; then
+ if [ ! -f arch/${ARCH}/boot/dts/${DTS_FILE} ]; then
+ echo "Warning: ${DTS_FILE} is not available!"
+ continue
+ fi
+
+ install -m 0644 arch/${ARCH}/boot/${DTS_BASE_NAME}.dtb ${D}/boot/devicetree-${DTB_SYMLINK_NAME}.dtb
+ continue
+ fi
+ dtc -I dts -O dtb ${KERNEL_DEVICETREE_FLAGS} -o ${DTS_BASE_NAME}.dtb ${DTS_FILE}
+ install -m 0644 ${DTS_BASE_NAME}.dtb ${D}/boot/devicetree-${DTB_SYMLINK_NAME}.dtb
done
fi
}
@@ -30,15 +69,28 @@ do_install_append() {
do_deploy_append() {
if test -n "${KERNEL_DEVICETREE}"; then
for DTS_FILE in ${KERNEL_DEVICETREE}; do
+ DTS_BASE_NAME=`basename ${DTS_FILE} | awk -F "." '{print $1}'`
if [ ! -f ${DTS_FILE} ]; then
- echo "Warning: ${DTS_FILE} is not available!"
- continue
+ if [ ! -f arch/${ARCH}/boot/dts/${DTS_FILE} ]; then
+ echo "Warning: ${DTS_FILE} is not available!"
+ continue
+ fi
+
+ # standard build using kbuild
+ echo "Info: standard kbuild for device tree blob"
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"`
+
install -d ${DEPLOYDIR}
- install -m 0644 ${B}/${DTS_BASE_NAME} ${DEPLOYDIR}/${DTB_NAME}.dtb
+
+ if [ -f arch/${ARCH}/boot/dts/${DTS_FILE} ]; then
+ install -m 0644 ${B}/arch/${ARCH}/boot/${DTS_BASE_NAME}.dtb ${DEPLOYDIR}/${DTB_NAME}.dtb
+ else
+ install -m 0644 ${B}/${DTS_BASE_NAME}.dtb ${DEPLOYDIR}/${DTB_NAME}.dtb
+ fi
+
cd ${DEPLOYDIR}
ln -sf ${DTB_NAME}.dtb ${DTB_SYMLINK_NAME}.dtb
cd -
--
1.8.2
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core