From: Michael Riesch <michael.riesch@wolfvision.net>
To: Christian Melki <christian.melki@t2data.com>,
ptxdist@pengutronix.de, m.tretter@pengutronix.de
Subject: Re: [ptxdist] [PATCH 1/2] ptxd_make_world_{dtb, dtbo}: add support for device tree overlays
Date: Thu, 9 Dec 2021 11:52:48 +0100 [thread overview]
Message-ID: <cde9144d-64f7-0cf3-47f1-d93c389061db@wolfvision.net> (raw)
In-Reply-To: <20211209104632.GP15196@pengutronix.de>
Hello again,
On 12/9/21 11:46 AM, Michael Olbrich wrote:
> On Thu, Dec 09, 2021 at 10:58:03AM +0100, Michael Riesch wrote:
>> On 12/9/21 9:53 AM, Michael Olbrich wrote:
>>> On Thu, Dec 09, 2021 at 08:20:05AM +0100, Michael Riesch wrote:
>>>> On 12/8/21 9:31 AM, Michael Olbrich wrote:
>>>>> On Tue, Dec 07, 2021 at 06:30:54PM +0100, Christian Melki wrote:
>>>>>> I like this take on dtbos!
>>>>>>
>>>>>> On 12/7/21 16:39, Michael Riesch wrote:
>>>>>>> Make ptxd_make_dtb more general and provide suitable wrappers to
>>>>>>> support the generation of device tree overlays.
>>>>>>>
>>>>>>> Signed-off-by: Michael Riesch <michael.riesch@wolfvision.net>
>>>>>>> ---
>>>>>>> rules/post/ptxd_make_world_dtbo.make | 21 +++++++
>>>>>>> scripts/lib/ptxd_make_world_dtb.sh | 82 ++++++++++++++++++++--------
>>>>>>> 2 files changed, 80 insertions(+), 23 deletions(-)
>>>>>>> create mode 100644 rules/post/ptxd_make_world_dtbo.make
>>>>>>>
>>>>>>> diff --git a/rules/post/ptxd_make_world_dtbo.make b/rules/post/ptxd_make_world_dtbo.make
>>>>>>> new file mode 100644
>>>>>>> index 000000000..61babc653
>>>>>>> --- /dev/null
>>>>>>> +++ b/rules/post/ptxd_make_world_dtbo.make
>>>>>>> @@ -0,0 +1,21 @@
>>>>>>> +# -*-makefile-*-
>>>>>>> +#
>>>>>>> +# Copyright (C) 2020 by Michael Tretter <m.tretter@pengutronix.de>
>>>>>>> +#
>>>>>>> +# For further information about the PTXdist project and license conditions
>>>>>>> +# see the README file.
>>>>>>> +#
>>>>>>> +
>>>>>>> +world/dtbo/env = \
>>>>>>> + $(call world/env, $(1)) \
>>>>>>> + pkg_dtso_path="$($(1)_DTSO_PATH)" \
>>>>>>> + pkg_dtso="$($(1)_DTSO)" \
>>>>>>> + pkg_dtbo_dir="$($(1)_DTBO_DIR)" \
>>>>>>> + pkg_kernel_src="$($(1)_KERNEL_DIR)" \
>>>>>
>>>>> Right, reaching into the source tree of another package is always ugly.
>>>>> Make sure that <PKG>_DEVPKG is set to 'NO' for the package. It's already
>>>>> set for the generic kernel package (out-of-tree modules need it as well)
>>>>> but not for the kernel package template.
>>>>
>>>> Could you elaborate a bit on why this is required?
>>>>
>>>> What action should be carried out if this variable is not set to 'NO' or
>>>> must this not happen in the first place?
>>>
>>> If pre-built archives[1] are used are used then the source tree may not be
>>> available. So if the source/build tree of a package is used by any other
>>> package then <PKG>_DEVPKG must be set to ensure that the package is always
>>> built.
>>>
>>> It's a somewhat obscure feature of PTXdist.
>>>
>>> Michael
>>>
>>> [1] https://www.ptxdist.org/doc/daily_work_section.html#using-pre-built-archives
>>>
>>
>> Thanks for the explanation, now I understand why this is necessary.
>> However, I am still not sure what I can do about it in this patch series.
>>
>> Can I really change the <PKG>_DEVPKG (e.g., KERNEL_CUSTOM_DEVPKG where
>> KERNEL_CUSTOM is derived from the kernel template) at the time
>> world/dtbo is called (from MY_OVERLAY package)? Would it have any effect?
>>
>> I guess I can output a warning, but as far as I understand the damage is
>> already done at this point and if there are no kernel sources in
>> MY_OVERLAY_KERNEL_DIR the dtc command might fail miserably.
>>
>> How would I determine the kernel package name from the kernel directory
>> to begin with?
>
> Ah, sorry. I didn't mean that there is anything for you to change. Just
> something to keep in mind when you use it.
OK, that's alright then :-) Thanks for the valuable pointer!
v2 will follow soon.
Best regards,
Michael
>
> Michael
>
>>>>>>> + pkg_arch="$(GENERIC_KERNEL_ARCH)"
>>>>>>> +
>>>>>>> +world/dtbo = \
>>>>>>> + $(call world/dtbo/env,$(strip $(1))) \
>>>>>>> + ptxd_make_world_dtbo
>>>>>>> +
>>>>>>> +# vim: syntax=make
>>>>>>> diff --git a/scripts/lib/ptxd_make_world_dtb.sh b/scripts/lib/ptxd_make_world_dtb.sh
>>>>>>> index f5e796b9d..c1ded5ffb 100644
>>>>>>> --- a/scripts/lib/ptxd_make_world_dtb.sh
>>>>>>> +++ b/scripts/lib/ptxd_make_world_dtb.sh
>>>>>>> @@ -9,18 +9,10 @@
>>>>>>> ptxd_make_dtb() {
>>>>>>> local dtc dts tmp_dts dtb deps tmp_deps
>>>>>>>
>>>>>>> - if [[ "${dts_dts}" =~ ^/.* ]]; then
>>>>>>> - ptxd_bailout "'${dts_dts}' must not be an absolute path!" \
>>>>>>> - "Use <PKG>_DTS_PATH to specify the search path."
>>>>>>> - fi
>>>>>>> -
>>>>>>> - if ! ptxd_in_path pkg_dts_path "${dts_dts}"; then
>>>>>>> - ptxd_bailout "Device-tree '${dts_dts}' not found in '${pkg_dts_path}'."
>>>>>>> - fi
>>>>>>> - dts="${ptxd_reply}"
>>>>>>> - dtb="${dtb_dir}/$(basename ${dts/%.dts/.dtb})"
>>>>>>> + dts="${dtb_source}"
>>>>>>> + dtb="${dtb_target}"
>>>>>>>
>>>>>>> - dtc="${pkg_build_dir}/scripts/dtc/dtc"
>>>>>>> + dtc="${dtb_kernel_dir}/scripts/dtc/dtc"
>>>>>>> if [ ! -x "${dtc}" ]; then
>>>>>>> dtc=dtc
>>>>>>> fi
>>>>>>> @@ -39,16 +31,16 @@ ptxd_make_dtb() {
>>>>>>> -Wp,-MT,${dtb_deps_target} \
>>>>>>> -nostdinc \
>>>>>>> -I"$(dirname "${dts}")" \
>>>>>>> - -I${pkg_dir}/arch/${pkg_arch}/boot/dts \
>>>>>>> - -I${pkg_dir}/arch/${pkg_arch}/boot/dts/include \
>>>>>>> - -I${pkg_dir}/scripts/dtc/include-prefixes \
>>>>>>> - -I${pkg_dir}/drivers/of/testcase-data \
>>>>>>> - -I${pkg_dir}/include \
>>>>>>> + -I${dtb_kernel_dir}/arch/${pkg_arch}/boot/dts \
>>>>>>> + -I${dtb_kernel_dir}/arch/${pkg_arch}/boot/dts/include \
>>>>>>> + -I${dtb_kernel_dir}/scripts/dtc/include-prefixes \
>>>>>>> + -I${dtb_kernel_dir}/drivers/of/testcase-data \
>>>>>>> + -I${dtb_kernel_dir}/include \
>>>>>>> -undef -D__DTS__ -x assembler-with-cpp \
>>>>>>> -o ${tmp_dts} \
>>>>>>> ${dts} &&
>>>>>>>
>>>>>>> - sed -e "\;^ ${pkg_dir}[^ ]*;d" \
>>>>>>> + sed -e "\;^ ${dtb_kernel_dir}[^ ]*;d" \
>>>>>>> -e 's;^ \([^ \]*\); $(wildcard \1);' "${tmp_deps}" > "${deps}" &&
>>>>>>> # empty line in case all dependencies were removed
>>>>>>> echo >> "${deps}" &&
>>>>>>> @@ -57,9 +49,9 @@ ptxd_make_dtb() {
>>>>>>> echo "DTC $(ptxd_print_path "${dtb}")" &&
>>>>>>> ptxd_eval \
>>>>>>> "${dtc}" \
>>>>>>> - $(ptxd_get_ptxconf PTXCONF_DTC_EXTRA_ARGS) \
>>>>>>> + "${dtb_extra_args}" \
>>>>>>> -i "$(dirname "${dts}")" \
>>>>>>> - -i "${pkg_dir}/arch/${pkg_arch}/boot/dts" \
>>>>>>> + -i "${dtb_kernel_dir}/arch/${pkg_arch}/boot/dts" \
>>>>>>> -d "${tmp_deps}" \
>>>>>>> -I dts -O dtb -b 0 \
>>>>>>> -o "${dtb}" "${tmp_dts}" &&
>>>>>>> @@ -81,17 +73,61 @@ ptxd_make_dtb() {
>>>>>>> export -f ptxd_make_dtb
>>>>>>>
>>>>>>>
>>>>>>> +ptxd_make_world_dtbo() {
>>>>>>> + local dtb_deps_target dtb_extra_args dtb_kernel_dir dtb_source dtb_target
>>>>>>> +
>>>>>>> + ptxd_make_world_init || break
>>>>>>> +
>>>>>>> + dtb_deps_target="${ptx_state_dir}/${pkg_stamp}"
>>>>>>> + dtb_extra_args="-@"
>>>>>>
>>>>>> Looks ok. Do we need to do a dtc version check?
>>>>>> 1.4.4+ I think. Maybe a bit excessive?
>>>>>
>>>>> We cannot build dtbos if that's not supported, so a check won't really
>>>>> help.
>>>>
>>>> Ack.
>>>>
>>>>>
>>>>>>> + dtb_kernel_dir="${pkg_kernel_src}"
>>>>>>> + if [ -z $dtb_kernel_dir ]; then
>>>>>>> + dtb_kernel_dir="${pkg_dir}"
>>>>>>> + fi
>>>>>
>>>>> dtb_kernel_dir="${pkg_kernel_src:-${pkg_dir}}"
>>>>>
>>>>> should work. And I think this can be moved to the shared code above. It
>>>>> works just fine because pkg_kernel_src is never set for the dts case (but
>>>>> we might want to allow it in the future).
>>>>
>>>> Ack.
>>>>
>>>>>
>>>>>>> +
>>>>>>> + echo -e "\nBuilding device tree overlays..."
>>>>>>> +
>>>>>>> + for overlay in ${pkg_dtso}; do
>>>>>>> + if [[ "${overlay}" =~ ^/.* ]]; then
>>>>>>> + ptxd_bailout "'${overlay}' must not be an absolute path!" \
>>>>>>> + "Use <PKG>_DTSO_PATH to specify the search path."
>>>>>>> + fi
>>>>>>> +
>>>>>>> + if ! ptxd_in_path pkg_dtso_path "${overlay}"; then
>>>>>>> + ptxd_bailout "Overlay '${overlay}' not found in '${pkg_dtso_path}'."
>>>>>>> + fi
>>>>>>> + dtb_source="${ptxd_reply}"
>>>>>>> + dtb_target="${pkg_pkg_dir}/${pkg_dtbo_dir}/$(basename ${overlay/%.dts*/.dtbo})"
>>>>>>> +
>>>>>>> + ptxd_make_dtb || break
>>>>>>> + done
>>>>>>> +}
>>>>>>> +export -f ptxd_make_world_dtbo
>>>>>>> +
>>>>>>> +
>>>>>>> ptxd_make_world_dtb() {
>>>>>>> - local dtb_deps_target dtb_dir
>>>>>>> + local dtb_deps_target dtb_extra_args dtb_kernel_dir dtb_source dtb_target
>>>>>>>
>>>>>>> ptxd_make_world_init || break
>>>>>>>
>>>>>>> dtb_deps_target="${ptx_state_dir}/${pkg_stamp}"
>>>>>>> - dtb_dir="${pkg_pkg_dir}/boot"
>>>>>>> + dtb_extra_args="$(ptxd_get_ptxconf PTXCONF_DTC_EXTRA_ARGS)"
>>>>>>
>>>>>> Not sure I follow here. Must not the dtb itself be built with -@ for
>>>>>> symbols if dtbos are used? Does EXTRA_ARGS default to -@ or something?
>>>>>
>>>>> I don't know much about dtbos. If -@ is required for the dtb to make dtbos
>>>>> work, then this should be propagated automatically. Add something to
>>>>> world/dtb/env, maybe with a noprompt kernel options
>>>>> KERNEL_DTS_SUPPORT_OVERLAYS or something like that. And select it as
>>>>> needed.
>>>>
>>>> Will change this in v2.
>>>>
>>>> Thanks and regards,
>>>> Michael
>>>>
>>>>>
>>>>>>> + dtb_kernel_dir="${pkg_dir}"
>>>>>>> +
>>>>>>> + echo -e "\nBuilding device trees..."
>>>>>>> +
>>>>>>> + for tree in ${pkg_dts}; do
>>>>>
>>>>> Please keep the dts_dts variable name.
>>>>>
>>>>> Michael
>>>>>
>>>>>>> + if [[ "${tree}" =~ ^/.* ]]; then
>>>>>>> + ptxd_bailout "'${tree}' must not be an absolute path!" \
>>>>>>> + "Use <PKG>_DTS_PATH to specify the search path."
>>>>>>> + fi
>>>>>>>
>>>>>>> - echo -e "\nBuilding Device trees..."
>>>>>>> + if ! ptxd_in_path pkg_dts_path "${tree}"; then
>>>>>>> + ptxd_bailout "Overlay '${tree}' not found in '${pkg_dts_path}'."
>>>>>>> + fi
>>>>>>> + dtb_source="${ptxd_reply}"
>>>>>>> + dtb_target="${pkg_pkg_dir}/boot/$(basename ${tree/%.dts/.dtb})"
>>>>>>
>>>>>> Static output dir path?
>>>>>>
>>>>>>>
>>>>>>> - for dts_dts in ${pkg_dts}; do
>>>>>>> ptxd_make_dtb || break
>>>>>>> done
>>>>>>> }
>>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> ptxdist mailing list
>>>>>> ptxdist@pengutronix.de
>>>>>> To unsubscribe, send a mail with subject "unsubscribe" to ptxdist-request@pengutronix.de
>>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> ptxdist mailing list
>>>> ptxdist@pengutronix.de
>>>> To unsubscribe, send a mail with subject "unsubscribe" to ptxdist-request@pengutronix.de
>>>>
>>>
>>
>> _______________________________________________
>> ptxdist mailing list
>> ptxdist@pengutronix.de
>> To unsubscribe, send a mail with subject "unsubscribe" to ptxdist-request@pengutronix.de
>>
>
_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de
To unsubscribe, send a mail with subject "unsubscribe" to ptxdist-request@pengutronix.de
next prev parent reply other threads:[~2021-12-09 10:53 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-07 15:39 [ptxdist] [PATCH 0/2] Add " Michael Riesch
2021-12-07 15:39 ` [ptxdist] [PATCH 1/2] ptxd_make_world_{dtb, dtbo}: add " Michael Riesch
2021-12-07 17:30 ` Christian Melki
2021-12-08 8:31 ` Michael Olbrich
2021-12-09 7:20 ` Michael Riesch
2021-12-09 8:53 ` Michael Olbrich
2021-12-09 9:58 ` Michael Riesch
2021-12-09 10:46 ` Michael Olbrich
2021-12-09 10:52 ` Michael Riesch [this message]
2021-12-09 6:26 ` Michael Riesch
2021-12-09 7:08 ` Michael Olbrich
2021-12-07 15:39 ` [ptxdist] [PATCH 2/2] kernel: activate " Michael Riesch
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cde9144d-64f7-0cf3-47f1-d93c389061db@wolfvision.net \
--to=michael.riesch@wolfvision.net \
--cc=christian.melki@t2data.com \
--cc=m.tretter@pengutronix.de \
--cc=ptxdist@pengutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox