Patchwork [v3] Add dtc (device tree compiler) as host tool

login
register
mail settings
Submitter Thomas De Schampheleire
Date March 23, 2012, 2:37 p.m.
Message ID <0e9c281db61ec6c47a7a.1332513454@beantl019720>
Download mbox | patch
Permalink /patch/148446/
State Superseded
Headers show

Comments

Thomas De Schampheleire - March 23, 2012, 2:37 p.m.
The dtc is taken from the Linux kernel sources and simply copied to the host
directory.
Having dtc as a separate host tool can be useful for users that have a custom
boot scenario where the device tree is not embedded in the kernel.

Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>

---
v2: remove old parameters to GENTARGETS call, sorry.
v3: rename Config.in.host and depend on Linux (comments Arnout)

 package/Config.in.host     |   1 +
 package/dtc/Config.in.host |   8 ++++++++
 package/dtc/dtc.mk         |  14 ++++++++++++++
 3 files changed, 23 insertions(+), 0 deletions(-)
Thomas Petazzoni - March 23, 2012, 2:51 p.m.
Le Fri, 23 Mar 2012 15:37:34 +0100,
Thomas De Schampheleire <patrickdepinguin+buildroot@gmail.com> a écrit :

> +HOST_DTC_SOURCE =
> +HOST_DTC_DEPENDENCIES = linux
> +
> +define HOST_DTC_INSTALL_CMDS
> +    $(INSTALL) -D -m 0755 $(LINUX_DIR)/scripts/dtc/dtc $(HOST_DIR)/usr/bin/dtc
> +endef

The problem is that this DTC binary is only built if CONFIG_DTC is
selected in the kernel configuration. So if the selected kernel does
not have this option enabled, the installation step of this package is
going to fail.

I am not sure what to do here. Just let the user figure this out? Check
the kernel .config to see if CONFIG_DTC is enabled, and if it isn't
while this package is selected, error out with a nice explanation for
the user? Simply ignore the installation if the dtc binary was not
built?

Thomas
Thomas De Schampheleire - March 23, 2012, 3:01 p.m.
On Fri, Mar 23, 2012 at 3:51 PM, Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> wrote:
> Le Fri, 23 Mar 2012 15:37:34 +0100,
> Thomas De Schampheleire <patrickdepinguin+buildroot@gmail.com> a écrit :
>
>> +HOST_DTC_SOURCE =
>> +HOST_DTC_DEPENDENCIES = linux
>> +
>> +define HOST_DTC_INSTALL_CMDS
>> +    $(INSTALL) -D -m 0755 $(LINUX_DIR)/scripts/dtc/dtc $(HOST_DIR)/usr/bin/dtc
>> +endef
>
> The problem is that this DTC binary is only built if CONFIG_DTC is
> selected in the kernel configuration. So if the selected kernel does
> not have this option enabled, the installation step of this package is
> going to fail.
>
> I am not sure what to do here. Just let the user figure this out? Check
> the kernel .config to see if CONFIG_DTC is enabled, and if it isn't
> while this package is selected, error out with a nice explanation for
> the user? Simply ignore the installation if the dtc binary was not
> built?

I hadn't though about this case.
One could question whether it is a valid case that someone selects dtc
in buildroot but not in the kernel.

Probably the nicest way is to not use dtc from the linux kernel
sources but download the dtc sources explicitly. I thought this was a
bit overkill, and I'm not sure if there can be inconsistencies between
these sources and the kernel ones.

Best regards,
Thomas
Jean-Christophe PLAGNIOL-VILLARD - March 23, 2012, 3:05 p.m.
On 15:51 Fri 23 Mar     , Thomas Petazzoni wrote:
> Le Fri, 23 Mar 2012 15:37:34 +0100,
> Thomas De Schampheleire <patrickdepinguin+buildroot@gmail.com> a écrit :
> 
> > +HOST_DTC_SOURCE =
> > +HOST_DTC_DEPENDENCIES = linux
> > +
> > +define HOST_DTC_INSTALL_CMDS
> > +    $(INSTALL) -D -m 0755 $(LINUX_DIR)/scripts/dtc/dtc $(HOST_DIR)/usr/bin/dtc
> > +endef
> 
> The problem is that this DTC binary is only built if CONFIG_DTC is
> selected in the kernel configuration. So if the selected kernel does
> not have this option enabled, the installation step of this package is
> going to fail.
> 
> I am not sure what to do here. Just let the user figure this out? Check
> the kernel .config to see if CONFIG_DTC is enabled, and if it isn't
> while this package is selected, error out with a nice explanation for
> the user? Simply ignore the installation if the dtc binary was not
> built?
dtc is always provuded with the kernel so why do you need it?

Best Regards,
J.
Thomas Petazzoni - March 23, 2012, 3:09 p.m.
Le Fri, 23 Mar 2012 16:01:16 +0100,
Thomas De Schampheleire <patrickdepinguin+buildroot@gmail.com> a écrit :

> I hadn't though about this case.
> One could question whether it is a valid case that someone selects dtc
> in buildroot but not in the kernel.
> 
> Probably the nicest way is to not use dtc from the linux kernel
> sources but download the dtc sources explicitly. I thought this was a
> bit overkill, and I'm not sure if there can be inconsistencies between
> these sources and the kernel ones.

I have no strong opinion here. You can just keep what you've done and:

 * Add an explanation in the help text about this fact

 * Add something like the following to your installation code:

if ! grep -q ^CONFIG_DTC=y $(LINUX_DIR)/.config ; then
	echo "Cannot install the Device Tree Compiler since you have
	not enabled CONFIG_DTC=y in your kernel configuration.
	Aborting".
	exit 1
fi

Regards,

Thomas
Thomas Petazzoni - March 23, 2012, 3:32 p.m.
Le Fri, 23 Mar 2012 16:05:18 +0100,
Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> a écrit :

> dtc is always provuded with the kernel so why do you need it?

The sources are always available, but it is *built* only if CONFIG_DTC
is selected. So unconditionally installing scripts/dtc/dtc will not
work if the kernel was configured !CONFIG_DTC.

Regards,

Thomas
Jean-Christophe PLAGNIOL-VILLARD - March 23, 2012, 3:37 p.m.
On 16:32 Fri 23 Mar     , Thomas Petazzoni wrote:
> Le Fri, 23 Mar 2012 16:05:18 +0100,
> Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> a écrit :
> 
> > dtc is always provuded with the kernel so why do you need it?
> 
> The sources are always available, but it is *built* only if CONFIG_DTC
> is selected. So unconditionally installing scripts/dtc/dtc will not
> work if the kernel was configured !CONFIG_DTC.
but the source is up-to-date for the kernel you use

we get this discussion on the kernel we do only expect the dtc that is
provided byt the kernel that you compile to be used. If you use other verison
we do not garanty it will work.

Best Regards,
J.
Thomas Petazzoni - March 23, 2012, 3:54 p.m.
Le Fri, 23 Mar 2012 16:37:27 +0100,
Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> a écrit :

> but the source is up-to-date for the kernel you use
> 
> we get this discussion on the kernel we do only expect the dtc that is
> provided byt the kernel that you compile to be used. If you use other verison
> we do not garanty it will work.

Ok, that's good to know, thanks!

Thomas
Alexandre Pereira da Silva - March 23, 2012, 4:27 p.m.
On Fri, Mar 23, 2012 at 12:54 PM, Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> wrote:
> Le Fri, 23 Mar 2012 16:37:27 +0100,
> Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> a écrit :
>
>> but the source is up-to-date for the kernel you use
>>
>> we get this discussion on the kernel we do only expect the dtc that is
>> provided byt the kernel that you compile to be used. If you use other verison
>> we do not garanty it will work.
>
> Ok, that's good to know, thanks!

Why not move this into the linux.mk package?
If the user has selected DTC support, just copy from the built kernel.
Thomas De Schampheleire - March 26, 2012, 7:15 a.m.
On Fri, Mar 23, 2012 at 5:27 PM, Alexandre Pereira da Silva
<aletes.xgr@gmail.com> wrote:
> On Fri, Mar 23, 2012 at 12:54 PM, Thomas Petazzoni
> <thomas.petazzoni@free-electrons.com> wrote:
>> Le Fri, 23 Mar 2012 16:37:27 +0100,
>> Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> a écrit :
>>
>>> but the source is up-to-date for the kernel you use
>>>
>>> we get this discussion on the kernel we do only expect the dtc that is
>>> provided byt the kernel that you compile to be used. If you use other verison
>>> we do not garanty it will work.
>>
>> Ok, that's good to know, thanks!
>
> Why not move this into the linux.mk package?
> If the user has selected DTC support, just copy from the built kernel.

This sounds like a fine proposal to me...
Does anyone have objections against it?

Thanks,
Thomas
Arnout Vandecappelle - March 26, 2012, 7:55 a.m.
On Monday 26 March 2012 09:15:49 Thomas De Schampheleire wrote:
> > Why not move this into the linux.mk package?
> > If the user has selected DTC support, just copy from the built kernel.
> 
> This sounds like a fine proposal to me...
> Does anyone have objections against it?

 Sounds good to me!

 Regards,
 Arnout

Patch

diff --git a/package/Config.in.host b/package/Config.in.host
--- a/package/Config.in.host
+++ b/package/Config.in.host
@@ -1,5 +1,6 @@ 
 menu "Host utilities"
 
+source "package/dtc/Config.in.host"
 source "package/lpc3250loader/Config.in.host"
 source "package/openocd/Config.in.host"
 source "package/sam-ba/Config.in.host"
diff --git a/package/dtc/Config.in.host b/package/dtc/Config.in.host
new file mode 100644
--- /dev/null
+++ b/package/dtc/Config.in.host
@@ -0,0 +1,8 @@ 
+config BR2_PACKAGE_HOST_DTC
+	bool "Device Tree Compiler (dtc)"
+	depends on BR2_LINUX_KERNEL
+	help
+	  Device Tree Compiler for flattened-device trees.
+
+comment "The dtc device tree compiler depends on the Linux kernel sources."
+    depends on !BR2_LINUX_KERNEL
diff --git a/package/dtc/dtc.mk b/package/dtc/dtc.mk
new file mode 100644
--- /dev/null
+++ b/package/dtc/dtc.mk
@@ -0,0 +1,14 @@ 
+#############################################################
+#
+# dtc
+#
+#############################################################
+
+HOST_DTC_SOURCE =
+HOST_DTC_DEPENDENCIES = linux
+
+define HOST_DTC_INSTALL_CMDS
+    $(INSTALL) -D -m 0755 $(LINUX_DIR)/scripts/dtc/dtc $(HOST_DIR)/usr/bin/dtc
+endef
+
+$(eval $(call GENTARGETS,host))