* [ptxdist] [PATCH v2 0/2] Run DT schema check on selected device trees
@ 2026-08-31 13:11 Bruno Thomsen
2026-08-31 13:11 ` [ptxdist] [PATCH v2 1/2] host-system-python3: add dtschema Bruno Thomsen
2026-08-31 13:11 ` [ptxdist] [PATCH v2 2/2] kernel: validate device trees against the DT schema Bruno Thomsen
0 siblings, 2 replies; 4+ messages in thread
From: Bruno Thomsen @ 2026-08-31 13:11 UTC (permalink / raw)
To: ptxdist; +Cc: Bruno Thomsen
During development of new boards or preparation of upstream patches
it can be very useful to run dt-schema check on device trees.
Tested with the following PTXCONF values:
PTXCONF_KERNEL_DTS_PATH="${KERNEL_DIR}/arch/${GENERIC_KERNEL_ARCH}/boot/dts/ti/omap"
PTXCONF_KERNEL_DTS="am335x-emperor.dts am335x-emperor-mini.dts"
Bruno Thomsen (2):
host-system-python3: add dtschema
kernel: validate device trees against the DT schema
platforms/kernel.in | 25 ++++++++++++++++++++++
rules/host-system-python3.in | 4 ++++
rules/host-system-python3.make | 9 ++++++++
rules/kernel.make | 7 +++++++
rules/post/ptxd_make_world_dtb.make | 1 +
scripts/lib/ptxd_make_world_dtb.sh | 32 +++++++++++++++++++++++++++++
6 files changed, 78 insertions(+)
base-commit: deecb91874f09aa7e6258ba94509ade70c8b41ba
--
2.55.0
^ permalink raw reply [flat|nested] 4+ messages in thread* [ptxdist] [PATCH v2 1/2] host-system-python3: add dtschema 2026-08-31 13:11 [ptxdist] [PATCH v2 0/2] Run DT schema check on selected device trees Bruno Thomsen @ 2026-08-31 13:11 ` Bruno Thomsen 2026-09-04 7:17 ` Michael Olbrich 2026-08-31 13:11 ` [ptxdist] [PATCH v2 2/2] kernel: validate device trees against the DT schema Bruno Thomsen 1 sibling, 1 reply; 4+ messages in thread From: Bruno Thomsen @ 2026-08-31 13:11 UTC (permalink / raw) To: ptxdist; +Cc: Bruno Thomsen Used for device tree validation. Signed-off-by: Bruno Thomsen <bruno.thomsen@gmail.com> --- v1 -> v2 changed: - host-system-python{,3} --- rules/host-system-python3.in | 4 ++++ rules/host-system-python3.make | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/rules/host-system-python3.in b/rules/host-system-python3.in index 4d6ea7d1d..2d8296852 100644 --- a/rules/host-system-python3.in +++ b/rules/host-system-python3.in @@ -15,6 +15,10 @@ config HOST_SYSTEM_PYTHON3_CRYPTOGRAPHY config HOST_SYSTEM_PYTHON3_DEV bool +config HOST_SYSTEM_PYTHON3_DTSCHEMA + select HOST_SYSTEM_PYTHON3_SYSTEM_PACKAGES + bool + config HOST_SYSTEM_PYTHON3_NUMPY select HOST_SYSTEM_PYTHON3_SYSTEM_PACKAGES bool diff --git a/rules/host-system-python3.make b/rules/host-system-python3.make index 6de4466d0..8923acfd6 100644 --- a/rules/host-system-python3.make +++ b/rules/host-system-python3.make @@ -42,6 +42,15 @@ ifdef PTXCONF_HOST_SYSTEM_PYTHON3_DEV ptxd_bailout "Python development files module not found! \ Please install python3-dev (debian)"; endif +ifdef PTXCONF_HOST_SYSTEM_PYTHON3_DTSCHEMA + @echo "Checking for Python dtschema ..." + @$(SYSTEMPYTHON3) -c 'import dtschema' 2>/dev/null || \ + ptxd_bailout "Python dtschema module not found! \ + Please install python3-dtschema (debian)"; + @dt-validate --version >/dev/null 2>&1 || \ + ptxd_bailout "'dt-validate' not found in PATH! \ + Please install python3-dtschema (debian)"; +endif ifdef PTXCONF_HOST_SYSTEM_PYTHON3_NUMPY @echo "Checking for Python Numpy ..." @$(SYSTEMPYTHON3) -c 'import numpy' 2>/dev/null || \ -- 2.55.0 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [ptxdist] [PATCH v2 1/2] host-system-python3: add dtschema 2026-08-31 13:11 ` [ptxdist] [PATCH v2 1/2] host-system-python3: add dtschema Bruno Thomsen @ 2026-09-04 7:17 ` Michael Olbrich 0 siblings, 0 replies; 4+ messages in thread From: Michael Olbrich @ 2026-09-04 7:17 UTC (permalink / raw) To: Bruno Thomsen; +Cc: ptxdist On Mon, Aug 31, 2026 at 03:11:58PM +0200, Bruno Thomsen wrote: > Used for device tree validation. > > Signed-off-by: Bruno Thomsen <bruno.thomsen@gmail.com> > --- > v1 -> v2 changed: > - host-system-python{,3} > --- > rules/host-system-python3.in | 4 ++++ > rules/host-system-python3.make | 9 +++++++++ > 2 files changed, 13 insertions(+) > > diff --git a/rules/host-system-python3.in b/rules/host-system-python3.in > index 4d6ea7d1d..2d8296852 100644 > --- a/rules/host-system-python3.in > +++ b/rules/host-system-python3.in > @@ -15,6 +15,10 @@ config HOST_SYSTEM_PYTHON3_CRYPTOGRAPHY > config HOST_SYSTEM_PYTHON3_DEV > bool > > +config HOST_SYSTEM_PYTHON3_DTSCHEMA > + select HOST_SYSTEM_PYTHON3_SYSTEM_PACKAGES > + bool > + > config HOST_SYSTEM_PYTHON3_NUMPY > select HOST_SYSTEM_PYTHON3_SYSTEM_PACKAGES > bool > diff --git a/rules/host-system-python3.make b/rules/host-system-python3.make > index 6de4466d0..8923acfd6 100644 > --- a/rules/host-system-python3.make > +++ b/rules/host-system-python3.make > @@ -42,6 +42,15 @@ ifdef PTXCONF_HOST_SYSTEM_PYTHON3_DEV > ptxd_bailout "Python development files module not found! \ > Please install python3-dev (debian)"; > endif > +ifdef PTXCONF_HOST_SYSTEM_PYTHON3_DTSCHEMA > + @echo "Checking for Python dtschema ..." > + @$(SYSTEMPYTHON3) -c 'import dtschema' 2>/dev/null || \ > + ptxd_bailout "Python dtschema module not found! \ > + Please install python3-dtschema (debian)"; > + @dt-validate --version >/dev/null 2>&1 || \ > + ptxd_bailout "'dt-validate' not found in PATH! \ > + Please install python3-dtschema (debian)"; The Debian package is dt-schema. I'll fix it while applying the patch. Michael > +endif > ifdef PTXCONF_HOST_SYSTEM_PYTHON3_NUMPY > @echo "Checking for Python Numpy ..." > @$(SYSTEMPYTHON3) -c 'import numpy' 2>/dev/null || \ > -- > 2.55.0 > > > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | ^ permalink raw reply [flat|nested] 4+ messages in thread
* [ptxdist] [PATCH v2 2/2] kernel: validate device trees against the DT schema 2026-08-31 13:11 [ptxdist] [PATCH v2 0/2] Run DT schema check on selected device trees Bruno Thomsen 2026-08-31 13:11 ` [ptxdist] [PATCH v2 1/2] host-system-python3: add dtschema Bruno Thomsen @ 2026-08-31 13:11 ` Bruno Thomsen 1 sibling, 0 replies; 4+ messages in thread From: Bruno Thomsen @ 2026-08-31 13:11 UTC (permalink / raw) To: ptxdist; +Cc: Bruno Thomsen Make it possible to do device tree validation on dts/dtsi during development and preparation for upstream. Signed-off-by: Bruno Thomsen <bruno.thomsen@gmail.com> --- v1 -> v2 changed: - Move complexity from kernel.make to ptxd_make_world_dtb - KERNEL_DTB_CHECK_OPT conditional on KERNEL_DTB_CHECK - Move KERNEL_DTB_CHECK inside 'if KERNEL_DTB' - Clarify in help that schema problems are warnings --- platforms/kernel.in | 25 ++++++++++++++++++++++ rules/kernel.make | 7 +++++++ rules/post/ptxd_make_world_dtb.make | 1 + scripts/lib/ptxd_make_world_dtb.sh | 32 +++++++++++++++++++++++++++++ 4 files changed, 65 insertions(+) diff --git a/platforms/kernel.in b/platforms/kernel.in index 2c6d906e8..36a4f3cf0 100644 --- a/platforms/kernel.in +++ b/platforms/kernel.in @@ -11,6 +11,8 @@ menuconfig KERNEL select HOST_LZ4 if KERNEL_LZ4 select HOST_LIBKMOD if KERNEL_MODULES select HOST_SYSTEM_BC + select HOST_SYSTEM_PYTHON3 if KERNEL_DTB_CHECK + select HOST_SYSTEM_PYTHON3_DTSCHEMA if KERNEL_DTB_CHECK select HOST_OPENSSL if KERNEL_OPENSSL select HOST_LIBELF if KERNEL_LIBELF select HOST_BINDGEN_CLI if KERNEL_RUST @@ -200,6 +202,29 @@ config KERNEL_DTS is used as a search path for the device tree files specified here. Multiple dts files can be specified, separated by spaces. +config KERNEL_DTB_CHECK + bool + prompt "validate device trees against the DT schema" + help + Additionally build the device trees with the kernel build system + ('make CHECK_DTBS=y <board>.dtb') to validate them against the + device tree bindings in Documentation/devicetree/bindings. + Schema problems are reported as warnings, so they do not break + the build. + + This requires the 'dtschema' python package on the build host and + it noticeably increases the build time of the kernel, because the + schema of all bindings must be processed first. + + Only device trees that are part of the kernel tree can be checked, + because the make targets are relative to arch/<arch>/boot/dts. + Each file in KERNEL_DTS is looked up in KERNEL_DTS_PATH and the + first match inside the kernel tree is validated. Device trees + without such a match are skipped with a warning. So for device + trees in a vendor directory, that directory must be part of + KERNEL_DTS_PATH, e.g. + "${KERNEL_DIR}/arch/${GENERIC_KERNEL_ARCH}/boot/dts/ti/omap". + config KERNEL_DTS_SUPPORT_OVERLAYS bool diff --git a/rules/kernel.make b/rules/kernel.make index af0dd3913..d32a0443c 100644 --- a/rules/kernel.make +++ b/rules/kernel.make @@ -282,6 +282,13 @@ KERNEL_INSTALL_OPT = \ $(KERNEL_BASE_OPT) \ modules_install +ifdef PTXCONF_KERNEL_DTB_CHECK +# validate the device trees while building them in world/dtb +KERNEL_DTB_CHECK_OPT = \ + $(KERNEL_SHARED_OPT) \ + CHECK_DTBS=y +endif + $(STATEDIR)/kernel.install: @$(call targetinfo) ifdef PTXCONF_KERNEL_MODULES_INSTALL diff --git a/rules/post/ptxd_make_world_dtb.make b/rules/post/ptxd_make_world_dtb.make index 37468c0be..81b237a87 100644 --- a/rules/post/ptxd_make_world_dtb.make +++ b/rules/post/ptxd_make_world_dtb.make @@ -10,6 +10,7 @@ world/dtb/env = \ $(call world/env, $(1)) \ pkg_dts_path="$($(1)_DTS_PATH)" \ pkg_dts="$($(1)_DTS)" \ + pkg_dtb_check_opt="$(call ptx/escape,$($(1)_DTB_CHECK_OPT))" \ pkg_arch="$(GENERIC_KERNEL_ARCH)" world/dtb = \ diff --git a/scripts/lib/ptxd_make_world_dtb.sh b/scripts/lib/ptxd_make_world_dtb.sh index dea9268ff..22622b2ad 100644 --- a/scripts/lib/ptxd_make_world_dtb.sh +++ b/scripts/lib/ptxd_make_world_dtb.sh @@ -109,10 +109,13 @@ export -f ptxd_make_world_dtbo ptxd_make_world_dtb() { local dtb_deps_target dtb_source dtb_target + local dts_file dts_in_tree dtb_check_dtstree + local -a dtb_check_targets=() ptxd_make_world_init || return dtb_deps_target="${ptx_state_dir}/${pkg_stamp}" + dtb_check_dtstree="${pkg_kernel_dir:-${pkg_dir}}/arch/${pkg_arch}/boot/dts" echo -e "\nBuilding device trees..." @@ -128,7 +131,36 @@ ptxd_make_world_dtb() { dtb_source="${ptxd_reply}" dtb_target="${pkg_pkg_dir}/boot/$(basename ${dts_dts/%.dts/.dtb})" + # + # The dtb targets of the kernel build system are relative to + # arch/<arch>/boot/dts, so only device trees from the kernel tree + # can be validated. + # + if [ -n "${pkg_dtb_check_opt}" ]; then + dts_file="" + for dts_in_tree in "${ptxd_reply[@]}"; do + if [ "${dts_in_tree}" != "${dts_in_tree#${dtb_check_dtstree}/}" ]; then + dts_file="${dts_in_tree#${dtb_check_dtstree}/}" + break + fi + done + if [ -n "${dts_file}" ]; then + dtb_check_targets[${#dtb_check_targets[@]}]="${dts_file/%.dts/.dtb}" + else + ptxd_warning "Device tree '${dts_dts}' is not part of the kernel tree. Skipping validation." + fi + fi + ptxd_make_dtb || break done + + if [ ${#dtb_check_targets[@]} -ne 0 ]; then + echo -e "\nValidating device trees..." + ptxd_eval \ + "${MAKE}" \ + "${pkg_dtb_check_opt}" \ + "${dtb_check_targets[@]}" || + ptxd_bailout "Unable to validate device trees." + fi } export -f ptxd_make_world_dtb -- 2.55.0 ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-09-04 7:17 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2026-08-31 13:11 [ptxdist] [PATCH v2 0/2] Run DT schema check on selected device trees Bruno Thomsen 2026-08-31 13:11 ` [ptxdist] [PATCH v2 1/2] host-system-python3: add dtschema Bruno Thomsen 2026-09-04 7:17 ` Michael Olbrich 2026-08-31 13:11 ` [ptxdist] [PATCH v2 2/2] kernel: validate device trees against the DT schema Bruno Thomsen
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox