Hi Sascha, On 3/10/23 10:42, Sascha Hauer wrote: > The of_overlay command currently only supports applying overlays to the > Linux device tree. Add an option to apply an overlay to the live tree. > Using this option will apply the overlay and also triggers rescanning > the device tree in case new devices have been added. > > Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> > --- > commands/of_overlay.c | 38 ++++++++++++++++++++++++++++++++++---- > 1 file changed, 34 insertions(+), 4 deletions(-) > > diff --git a/commands/of_overlay.c b/commands/of_overlay.c > index b3660b4bf1..1d68e31ef2 100644 > --- a/commands/of_overlay.c > +++ b/commands/of_overlay.c > @@ -17,10 +17,20 @@ static int do_of_overlay(int argc, char *argv[]) > struct fdt_header *fdt; > struct device_node *overlay; > size_t size; > + bool live_tree = false; > + int opt; > > - if (argc != 2) > + if (argc < 2) > return COMMAND_ERROR_USAGE; > > + while ((opt = getopt(argc, argv, "l")) > 0) { > + switch (opt) { > + case 'l': > + live_tree = true; > + break; > + } > + } > + > fdt = read_file(argv[optind], &size); of course this is not the intended usage, but "of_overlay -l" (i.e., skipping the overlay argument) throws an exception. > if (!fdt) { > printf("cannot read %s\n", argv[optind]); > @@ -32,7 +42,14 @@ static int do_of_overlay(int argc, char *argv[]) > if (IS_ERR(overlay)) > return PTR_ERR(overlay); > > - ret = of_register_overlay(overlay); > + if (live_tree) { > + ret = of_overlay_apply_tree(of_get_root_node(), overlay); If I pass a meaningful argument ("of_overlay -l path_to_my_overlay"), I get ERROR: of_resolver: __symbols__ missing from base devicetree cannot apply oftree overlay: Invalid argument of_overlay: Invalid argument in return. The base device tree does not contain any __symbols__ sections indeed. How can I activate the generation of this section? Thanks and regards, Michael > + if (!ret) > + ret = of_probe(); > + } else { > + ret = of_register_overlay(overlay); > + } > + > if (ret) { > printf("cannot apply oftree overlay: %s\n", strerror(-ret)); > goto err; > @@ -45,9 +62,22 @@ err: > return ret; > } > > +BAREBOX_CMD_HELP_START(of_overlay) > +BAREBOX_CMD_HELP_TEXT("Register a device tree overlay file (dtbo) with barebox.") > +BAREBOX_CMD_HELP_TEXT("By default the overlay is registered as a fixup and the") > +BAREBOX_CMD_HELP_TEXT("overlay will then be applied to the Linux device tree.") > +BAREBOX_CMD_HELP_TEXT("With -l given the overlay is applied to the barebox live") > +BAREBOX_CMD_HELP_TEXT("tree instead. This involves probing new devices added in") > +BAREBOX_CMD_HELP_TEXT("the overlay file.") > +BAREBOX_CMD_HELP_TEXT("") > +BAREBOX_CMD_HELP_TEXT("Options:") > +BAREBOX_CMD_HELP_OPT("-l", "apply to barebox live tree") > +BAREBOX_CMD_HELP_END > + > BAREBOX_CMD_START(of_overlay) > .cmd = do_of_overlay, > - BAREBOX_CMD_DESC("register device tree overlay as fixup") > - BAREBOX_CMD_OPTS("FILE") > + BAREBOX_CMD_DESC("register device tree overlay") > + BAREBOX_CMD_OPTS("[-l] FILE") > BAREBOX_CMD_GROUP(CMD_GRP_MISC) > + BAREBOX_CMD_HELP(cmd_of_overlay_help) > BAREBOX_CMD_END