Hi, I sent patches, please check.
But before correct emails I sent several test emails.

-----Original Message-----
From: Simon Glass <s...@chromium.org> 
Sent: Friday, November 5, 2021 5:02 AM
To: Roman Kopytin <roman.kopy...@kaspersky.com>
Cc: Rasmus Villemoes <rasmus.villem...@prevas.dk>; U-Boot Mailing List 
<u-boot@lists.denx.de>; Alex Kiernan <alex.kier...@gmail.com>; Masahiro Yamada 
<masahi...@kernel.org>
Subject: Re: [PATCH] introduce CONFIG_DEVICE_TREE_INCLUDES

Hi Roman,

Good luck! I must get a copy of that BOFH book.

Regards,
Simon



On Sun, 31 Oct 2021 at 22:30, Roman Kopytin <roman.kopy...@kaspersky.com> wrote:
>
> Hi, all
> Currently I am waiting some help from our IT infrastructure department.
>
> -----Original Message-----
> From: Simon Glass <s...@chromium.org>
> Sent: Tuesday, October 26, 2021 4:28 AM
> To: Rasmus Villemoes <rasmus.villem...@prevas.dk>
> Cc: U-Boot Mailing List <u-boot@lists.denx.de>; Alex Kiernan 
> <alex.kier...@gmail.com>; Roman Kopytin <roman.kopy...@kaspersky.com>; 
> Masahiro Yamada <masahi...@kernel.org>
> Subject: Re: [PATCH] introduce CONFIG_DEVICE_TREE_INCLUDES
>
> Hi Rasmus,
>
> On Tue, 28 Sept 2021 at 02:57, Rasmus Villemoes <rasmus.villem...@prevas.dk> 
> wrote:
> >
> > The build system already automatically looks for and includes an 
> > in-tree *-u-boot.dtsi when building the control .dtb. However, there 
> > are some things that are awkward to maintain in such an in-tree 
> > file, most notably the metadata associated to public keys used for 
> > verified boot.
> >
> > The only "official" API to get that metadata into the .dtb is via 
> > mkimage, as a side effect of building an actual signed image. But 
> > there are multiple problems with that. First of all, the final 
> > U-Boot (be it U-Boot proper or an SPL) image is built based on a 
> > binary image, the .dtb, and possibly some other binary artifacts. So 
> > modifying the .dtb after the build requires the meta-buildsystem 
> > (Yocto, buildroot, whatnot) to know about and repeat some of the 
> > steps that are already known to and handled by U-Boot's build 
> > system, resulting in needless duplication of code. It's also 
> > somewhat annoying and inconsistent to have a .dtb file in the build 
> > folder which is not generated by the command listed in the 
> > corresponding .cmd file (that of course applies to any generated file).
> >
> > So the contents of the /signature node really needs to be baked into 
> > the .dtb file when it is first created, which means providing the 
> > relevant data in the form of a .dtsi file. One could in theory put 
> > that data into the *-u-boot.dtsi file, but it's more convenient to 
> > be able to provide it externally: For example, when developing for a 
> > customer, it's common to use a set of dummy keys for development, 
> > while the consultants do not (and should not) have access to the 
> > actual keys used in production. For such a setup, it's easier if the 
> > keys used are chosen via the meta-buildsystem and the path(s) 
> > patched in during the configure step. And of course, nothing 
> > prevents anybody from having DEVICE_TREE_INCLUDES point at files 
> > maintained in git, or for that matter from including the public key 
> > metadata in the *-u-boot.dtsi directly and ignore this feature.
> >
> > There are other uses for this, e.g. in combination with 
> > ENV_IMPORT_FDT it can be used for providing the contents of the 
> > /config/environment node, so I don't want to tie this exclusively to 
> > use for verified boot.
> >
> > Signed-off-by: Rasmus Villemoes <rasmus.villem...@prevas.dk>
> > ---
> >
> > Getting the public key metadata into .dtsi form can be done with a 
> > little scripting (roughly 'mkimage -K' of a dummy image followed by 
> > 'dtc -I dtb -O dts'). I have a script that does that, along with 
> > options to set 'required' and 'required-mode' properties, include 
> > u-boot,dm-spl properties in case one wants to check U-Boot proper 
> > from SPL with the verified boot mechanism, etc. I'm happy to share 
> > that script if this gets accepted, but it's moot if this is rejected.
> >
> > I have previously tried to get an fdt_add_pubkey tool accepted [1,2] 
> > to disentangle the kernel and u-boot builds (or u-boot and SPL 
> > builds for that matter!), but as I've since realized, that isn't 
> > quite enough
> > - the above points re modifying the .dtb after it is created but 
> > before that is used to create further build artifacts still stand.
> > However, such a tool could still be useful for creating the .dtsi 
> > info without the private keys being present, and my key2dtsi.sh 
> > script could easily be modified to use a tool like that should it 
> > ever appear.
> >
> > [1]
> > https://lore.kernel.org/u-boot/20200211094818.14219-3-rasmus.villemo
> > es
> > @prevas.dk/ [2]
> > https://lore.kernel.org/u-boot/2184f1e6dd6247e48133c76205feeabe@kasp
> > er
> > sky.com/
> >
> >  dts/Kconfig          | 9 +++++++++
> >  scripts/Makefile.lib | 2 ++
> >  2 files changed, 11 insertions(+)
>
> Reviewed-by: Simon Glass <s...@chromium.org>
>
> I suggest adding this to the documentation somewhere in 
> doc/develop/devicetree/
>
> Getting the key into the U-Boot .dtb is normally done with mkimage, as you 
> say. I don't really understand why this approach is easier.
>
> Also, is there any interest in using binman? It is designed to do the 
> 'packaging' step right at the end, when all the bits are available and just 
> need to be put together.
>
> I am trying to encourage people to move away from building from source 
> always, to a two-step process:
>
> - build all the bits
> - package them, update devicetree, etc.
>
> https://u-boot.readthedocs.io/en/latest/develop/package/index.html
>
> BTW if Roman can figure out how to send the patches I think that tool would 
> be useful too.
>
> Regards,
> Simon
>
>
>
> >
> > diff --git a/dts/Kconfig b/dts/Kconfig index dabe0080c1..593dddbaf0
> > 100644
> > --- a/dts/Kconfig
> > +++ b/dts/Kconfig
> > @@ -139,6 +139,15 @@ config DEFAULT_DEVICE_TREE
> >           It can be overridden from the command line:
> >           $ make DEVICE_TREE=<device-tree-name>
> >
> > +config DEVICE_TREE_INCLUDES
> > +       string "Extra .dtsi files to include when building DT control"
> > +       depends on OF_CONTROL
> > +       help
> > +         U-Boot's control .dtb is usually built from an in-tree .dts
> > +         file, plus (if available) an in-tree U-Boot-specific .dtsi
> > +         file. This option specifies a space-separated list of extra
> > +         .dtsi files that will also be used.
> > +
> >  config OF_LIST
> >         string "List of device tree files to include for DT control"
> >         depends on SPL_LOAD_FIT || MULTI_DTB_FIT diff --git 
> > a/scripts/Makefile.lib b/scripts/Makefile.lib index
> > 78bbebe7e9..a2accba940 100644
> > --- a/scripts/Makefile.lib
> > +++ b/scripts/Makefile.lib
> > @@ -320,6 +320,8 @@ quiet_cmd_dtc = DTC     $@
> >  # Bring in any U-Boot-specific include at the end of the file 
> > cmd_dtc = mkdir -p $(dir ${dtc-tmp}) ; \
> >         (cat $<; $(if $(u_boot_dtsi),echo '$(pound)include
> > "$(u_boot_dtsi)"')) > $(pre-tmp); \
> > +       $(foreach f,$(subst $(quote),,$(CONFIG_DEVICE_TREE_INCLUDES)), \
> > +         echo '$(pound)include "$(f)"' >> $(pre-tmp);) \
> >         $(CPP) $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) 
> > $(pre-tmp) ; \
> >         $(DTC) -O dtb -o $@ -b 0 \
> >                 -i $(dir $<) $(DTC_FLAGS) \
> > --
> > 2.31.1
> >

Reply via email to