mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH v2 1/2] Add support for extlinux.conf
@ 2026-04-28 13:28 Alexander Shiyan
  2026-04-28 13:28 ` [PATCH v2 2/2] Documentation: add extlinux.conf support description Alexander Shiyan
  2026-05-05  9:56 ` [PATCH v2 1/2] Add support for extlinux.conf Ahmad Fatoum
  0 siblings, 2 replies; 11+ messages in thread
From: Alexander Shiyan @ 2026-04-28 13:28 UTC (permalink / raw)
  To: barebox; +Cc: Alexander Shiyan

This adds support for the extlinux.conf configuration format, commonly
used by Syslinux and many Linux distributions. The configuration file
is typically located at /boot/extlinux/extlinux.conf or
/extlinux/extlinux.conf and defines boot entries with kernel, initrd,
device tree, and command line options.

The implementation integrates with the existing boot entry framework:
- The extlinux scanner discovers entries on mounted filesystems.
- The default LABEL is turned into a boot entry.
- The "root=" parameter is stripped from the APPEND line only when
  global.bootm.appendroot is set. This allows barebox to inject the
  correct root device based on the actual boot device (e.g., when the
  same rootfs image is used across different storage media).
- Bootm is used to load and start the kernel.
---
barebox@Diasom DS-RK3568-SOM-EVB:/ global.bootm.appendroot=true
barebox@Diasom DS-RK3568-SOM-EVB:/ global.boot.default=mmc1.2
barebox@Diasom DS-RK3568-SOM-EVB:/ boot
ext4 ext40: EXT2 rev 1, inode_size 256, descriptor size 64
Booting entry 'extlinux: linux'
extlinux: Booting extlinux label 'linux'
Adding "root=/dev/mmcblk1p3" to Kernel commandline
Loading ARM aarch64 Linux/EFI image '/mnt/mmc1.2/boot/extlinux/../vmlinuz'
commandline: root=/dev/mmcblk1p3 console=ttyS2,1500000n8 ro systemd.unit=setup.target quiet splash systemd.machine_id=181af2816b4c6b0aef77068e0ccc69ad
Loaded kernel to 0x0a400000, devicetree at 0x000000000fb49000

Signed-off-by: Alexander Shiyan <eagle.alexander923@gmail.com>
---
 common/Kconfig    |  19 +++
 common/Makefile   |   1 +
 common/extlinux.c | 286 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 306 insertions(+)
 create mode 100644 common/extlinux.c

diff --git a/common/Kconfig b/common/Kconfig
index fd422714d5..0e93686e4f 100644
--- a/common/Kconfig
+++ b/common/Kconfig
@@ -734,6 +734,25 @@ config BLSPEC
 	  on a device and it allows the Operating System to install / update
 	  kernels.
 
+config EXTLINUX
+	bool
+	prompt "Support extlinux.conf"
+	depends on FLEXIBLE_BOOTARGS
+	depends on !SHELL_NONE
+	select BOOT
+	select BOOTM
+	select MMCBLKDEV_ROOTARG if MCI
+	help
+	  Enable this to let barebox parse extlinux.conf configuration files,
+	  commonly used by the Syslinux bootloader and many Linux distributions
+	  (e.g., on SD cards or USB drives).
+	  extlinux.conf is typically located at /boot/extlinux/extlinux.conf or
+	  /extlinux/extlinux.conf. It defines boot entries with kernel, initrd,
+	  device tree, and command line options.
+	  This option allows barebox to discover and boot operating systems
+	  that follow the extlinux configuration format, providing a simple
+	  and portable way to manage multiple boot options.
+
 config FLEXIBLE_BOOTARGS
 	bool
 	prompt "flexible Linux bootargs generation"
diff --git a/common/Makefile b/common/Makefile
index 27c5dea168..cd929b2194 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -9,6 +9,7 @@ obj-y				+= clock.o
 pbl-$(CONFIG_PBL_CLOCKSOURCE)	+= clock.o
 obj-y				+= console_common.o
 obj-$(CONFIG_OFDEVICE)		+= deep-probe.o
+obj-$(CONFIG_EXTLINUX)		+= extlinux.o
 obj-y				+= startup.o
 obj-y				+= misc.o
 obj-pbl-y			+= memsize.o
diff --git a/common/extlinux.c b/common/extlinux.c
new file mode 100644
index 0000000000..0e838e9889
--- /dev/null
+++ b/common/extlinux.c
@@ -0,0 +1,286 @@
+// SPDX-License-Identifier: GPL-2.0+
+/* SPDX-FileCopyrightText: Alexander Shiyan <shc_work@mail.ru> */
+
+#define pr_fmt(fmt)     "extlinux: " fmt
+
+#include <boot.h>
+#include <bootm.h>
+#include <bootscan.h>
+#include <common.h>
+#include <environment.h>
+#include <fs.h>
+#include <globalvar.h>
+#include <libfile.h>
+#include <libgen.h>
+#include <malloc.h>
+#include <string.h>
+
+struct extlinux_entry {
+	struct bootentry entry;
+	char *rootpath;
+	char *label;
+	char *kernel;
+	char *initrd;
+	char *fdtdir;
+	char *fdt;
+	char *append;
+};
+
+static char *remove_param(const char *params, const char *param)
+{
+	char *result, *dst;
+	const char *src;
+
+	result = xmalloc(strlen(params) + 1);
+
+	src = params;
+	dst = result;
+
+	while (*src) {
+		if (!strncasecmp(src, param, strlen(param))) {
+			while (*src && *src != ' ')
+				src++;
+
+			src = skip_spaces(src);
+
+			continue;
+		}
+
+		*dst++ = *src++;
+	}
+
+	*dst = '\0';
+
+	return result;
+}
+
+static int extlinux_boot(struct bootentry *be, int verbose, int dryrun)
+{
+	struct extlinux_entry *e =
+		container_of(be, struct extlinux_entry, entry);
+	char *kernel_abs, *initrd_abs = NULL, *fdt_abs = NULL;
+	struct bootm_data data = {};
+	int ret;
+
+	bootm_data_init_defaults(&data);
+
+	data.dryrun = max_t(int, dryrun, data.dryrun);
+	data.verbose = max(verbose, data.verbose);
+
+	kernel_abs = basprintf("%s/%s", e->rootpath, e->kernel);
+	data.os_file = kernel_abs;
+
+	if (e->initrd) {
+		initrd_abs = basprintf("%s/%s", e->rootpath, e->initrd);
+		data.initrd_file = initrd_abs;
+	}
+
+	if (e->fdt) {
+		char *fdtdir = e->fdtdir ? : e->rootpath;
+
+		fdt_abs = basprintf("%s/%s", fdtdir, e->fdt);
+		data.oftree_file = fdt_abs;
+	}
+
+	if (e->append) {
+		char *append;
+
+		/*
+		 * The same rootfs image may be launched from eMMC or SD card.
+		 * Remove any hardcoded root= parameter from "append" to avoid
+		 * conflicts, then let barebox automatically add the correct
+		 * root= (via global.bootm.appendroot) based on the boot device.
+		 */
+		if (data.appendroot)
+			append = remove_param(e->append, "ROOT=");
+		else
+			append = xstrdup(e->append);
+
+		globalvar_add_simple("linux.bootargs.dyn.extlinux", append);
+
+		free(append);
+	}
+
+	pr_info("Booting extlinux label '%s'\n", e->label);
+
+	ret = bootm_boot(&data);
+	if (ret)
+		pr_err("bootm failed: %s\n", strerror(-ret));
+
+	free(kernel_abs);
+	free(initrd_abs);
+	free(fdt_abs);
+
+	return ret;
+}
+
+static void extlinux_entry_free(struct bootentry *be)
+{
+	struct extlinux_entry *e =
+		container_of(be, struct extlinux_entry, entry);
+
+	free(e->rootpath);
+	free(e->label);
+	free(e->kernel);
+	free(e->initrd);
+	free(e->fdtdir);
+	free(e->fdt);
+	free(e->append);
+	free(e);
+}
+
+static struct extlinux_entry *parse_extlinux_conf(const char *abspath,
+						  const char *rootpath)
+{
+	char *buf, *bufptr, *line, *default_label = NULL;
+	struct extlinux_entry *entry = NULL;
+
+	bufptr = read_file(abspath, NULL);
+	if (!bufptr)
+		return ERR_PTR(-errno);
+
+	buf = bufptr;
+	while ((line = strsep(&buf, "\n\r")) != NULL) {
+		char *key, *val;
+
+		line = skip_spaces(line);
+
+		if (*line == '#' || *line == '\0')
+			continue;
+
+		key = strsep(&line, " \t");
+		val = isempty(line) ? NULL : skip_spaces(line);
+		if (!key || !val)
+			continue;
+
+		if (!default_label) {
+			if (!strcasecmp(key, "DEFAULT"))
+				default_label = xstrdup(val);
+
+			continue;
+		}
+
+		if (!strcasecmp(key, "LABEL")) {
+			if (!strcmp(val, default_label)) {
+				entry = xzalloc(sizeof(*entry));
+				entry->label = xstrdup(val);
+				entry->rootpath = dirname(xstrdup(abspath));
+			} else if (entry) {
+				break;
+			}
+			continue;
+		}
+
+		if (entry) {
+			if (!strcasecmp(key, "KERNEL"))
+				entry->kernel = xstrdup(val);
+			else if (!strcasecmp(key, "INITRD"))
+				entry->initrd = xstrdup(val);
+			else if (!strcasecmp(key, "FDTDIR"))
+				entry->fdtdir = xstrdup(val);
+			else if (!strcasecmp(key, "FDT"))
+				entry->fdt = xstrdup(val);
+			else if (!strcasecmp(key, "APPEND"))
+				entry->append = xstrdup(val);
+			else
+				pr_warn("Unhandled key: %s\n", key);
+		}
+	}
+
+	free(default_label);
+	free(bufptr);
+
+	if (!entry || !entry->kernel) {
+		if (entry)
+			extlinux_entry_free(&entry->entry);
+		return ERR_PTR(-EINVAL);
+	}
+
+	return entry;
+}
+
+static int _extlinux_scan_file(struct bootscanner *scanner,
+			       struct bootentries *bootentries,
+			       const char *configname,
+			       const char *rootpath)
+{
+	struct extlinux_entry *e;
+
+	if (!strends(configname, "extlinux.conf"))
+		return 0;
+
+	e = parse_extlinux_conf(configname, rootpath);
+	if (IS_ERR(e))
+		return PTR_ERR(e);
+
+	e->entry.boot = extlinux_boot;
+	e->entry.release = extlinux_entry_free;
+	e->entry.path = xstrdup_const(configname);
+	e->entry.title = basprintf("extlinux: %s", e->label);
+	e->entry.description = basprintf("extlinux entry \'%s\" on %s",
+					 e->label, rootpath);
+	e->entry.me.type = MENU_ENTRY_NORMAL;
+
+	bootentries_add_entry(bootentries, &e->entry);
+
+	return 1;
+}
+
+static int extlinux_scan_file(struct bootscanner *scanner,
+			      struct bootentries *bootentries,
+			      const char *configname)
+{
+	const char *rootpath = get_mounted_path(configname);
+	if (IS_ERR(rootpath))
+		return PTR_ERR(rootpath);
+
+	return _extlinux_scan_file(scanner, bootentries, configname, rootpath);
+}
+
+static int extlinux_scan_directory(struct bootscanner *scanner,
+				   struct bootentries *bootentries,
+				   const char *rootpath)
+{
+	char *path;
+	struct stat s;
+	int ret;
+
+	path = basprintf("%s/boot/extlinux/extlinux.conf", rootpath);
+	ret = stat(path, &s);
+	if (!ret && S_ISREG(s.st_mode))
+		ret = _extlinux_scan_file(scanner, bootentries, path, rootpath);
+	free(path);
+	if (ret > 0)
+		return ret;
+
+	path = basprintf("%s/extlinux/extlinux.conf", rootpath);
+	ret = stat(path, &s);
+	if (!ret && S_ISREG(s.st_mode))
+		ret = _extlinux_scan_file(scanner, bootentries, path, rootpath);
+	free(path);
+
+	return ret;
+}
+
+static struct bootscanner extlinux_scanner = {
+	.name = "extlinux",
+	.scan_file = extlinux_scan_file,
+	.scan_directory = extlinux_scan_directory,
+};
+
+static int extlinux_generate(struct bootentries *bootentries, const char *name)
+{
+	return bootentry_scan_generate(&extlinux_scanner, bootentries, name);
+}
+
+static struct bootentry_provider extlinux_provider = {
+	.name = "extlinux",
+	.generate = extlinux_generate,
+	.priority = -25,
+};
+
+static int extlinux_init(void)
+{
+	return bootentry_register_provider(&extlinux_provider);
+}
+device_initcall(extlinux_init);
-- 
2.52.0




^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v2 2/2] Documentation: add extlinux.conf support description
  2026-04-28 13:28 [PATCH v2 1/2] Add support for extlinux.conf Alexander Shiyan
@ 2026-04-28 13:28 ` Alexander Shiyan
  2026-05-05  9:56 ` [PATCH v2 1/2] Add support for extlinux.conf Ahmad Fatoum
  1 sibling, 0 replies; 11+ messages in thread
From: Alexander Shiyan @ 2026-04-28 13:28 UTC (permalink / raw)
  To: barebox; +Cc: Alexander Shiyan

Signed-off-by: Alexander Shiyan <eagle.alexander923@gmail.com>
---
 Documentation/user/booting-linux.rst | 42 ++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/Documentation/user/booting-linux.rst b/Documentation/user/booting-linux.rst
index 3972777f30..a192efd453 100644
--- a/Documentation/user/booting-linux.rst
+++ b/Documentation/user/booting-linux.rst
@@ -309,6 +309,48 @@ Additional notes about keys in the bootloader spec entries:
    different devices without having to specify a different ``root=`` option each
    time.
 
+.. _extlinux_conf:
+
+extlinux.conf Support
+^^^^^^^^^^^^^^^^^^^^^
+
+In addition to the Boot Loader Specification, barebox also supports the
+extlinux configuration format, commonly used by the Syslinux bootloader and
+many Linux distributions. This format is often found on SD cards, USB drives,
+or disk partitions prepared with tools like ``extlinux --install``.
+
+The configuration file is named ``extlinux.conf`` and can be located at:
+* ``/boot/extlinux/extlinux.conf``
+* ``/extlinux/extlinux.conf``
+
+The file uses a simple key-value syntax with sections labeled by ``LABEL``.
+A typical example looks like:
+
+.. code-block:: none
+
+  DEFAULT linux
+  LABEL linux
+    KERNEL /boot/vmlinuz
+    INITRD /boot/initrd.img
+    FDT /boot/board.dtb
+    APPEND console=ttyS0,115200 root=PARTUUID=deadbeef-01
+
+When booting an extlinux entry, barebox strips any ``root=`` parameter from the
+``APPEND`` line **only if** the global variable ``global.bootm.appendroot`` is
+set to true. After stripping, barebox injects the correct ``root=`` based on
+the boot device (similar to the ``linux-appendroot`` feature in blspec). This
+makes the same root filesystem image usable across different storage media.
+
+To use extlinux support, enable ``CONFIG_EXTLINUX`` in your barebox
+configuration. Entries are automatically discovered by the :ref:`command_boot`
+command when scanning a device or mount point. For example:
+
+.. code-block:: sh
+
+  global.bootm.appendroot=true
+  global.boot.default=mmc1.2
+  boot
+
 .. _booting_linux_net:
 
 Network boot
-- 
2.52.0




^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 1/2] Add support for extlinux.conf
  2026-04-28 13:28 [PATCH v2 1/2] Add support for extlinux.conf Alexander Shiyan
  2026-04-28 13:28 ` [PATCH v2 2/2] Documentation: add extlinux.conf support description Alexander Shiyan
@ 2026-05-05  9:56 ` Ahmad Fatoum
  2026-05-05 10:47   ` Alexander Shiyan
  1 sibling, 1 reply; 11+ messages in thread
From: Ahmad Fatoum @ 2026-05-05  9:56 UTC (permalink / raw)
  To: Alexander Shiyan, barebox

Hello Alexander,

On 4/28/26 3:28 PM, Alexander Shiyan wrote:

> +static int extlinux_boot(struct bootentry *be, int verbose, int dryrun)
> +{
> +	struct extlinux_entry *e =
> +		container_of(be, struct extlinux_entry, entry);
> +	char *kernel_abs, *initrd_abs = NULL, *fdt_abs = NULL;
> +	struct bootm_data data = {};
> +	int ret;
> +
> +	bootm_data_init_defaults(&data);
> +
> +	data.dryrun = max_t(int, dryrun, data.dryrun);
> +	data.verbose = max(verbose, data.verbose);
> +
> +	kernel_abs = basprintf("%s/%s", e->rootpath, e->kernel);
> +	data.os_file = kernel_abs;
> +
> +	if (e->initrd) {
> +		initrd_abs = basprintf("%s/%s", e->rootpath, e->initrd);
> +		data.initrd_file = initrd_abs;
> +	}
> +
> +	if (e->fdt) {
> +		char *fdtdir = e->fdtdir ? : e->rootpath;
> +
> +		fdt_abs = basprintf("%s/%s", fdtdir, e->fdt);
> +		data.oftree_file = fdt_abs;
> +	}
> +
> +	if (e->append) {
> +		char *append;
> +
> +		/*
> +		 * The same rootfs image may be launched from eMMC or SD card.
> +		 * Remove any hardcoded root= parameter from "append" to avoid
> +		 * conflicts, then let barebox automatically add the correct
> +		 * root= (via global.bootm.appendroot) based on the boot device.
> +		 */
> +		if (data.appendroot)
> +			append = remove_param(e->append, "ROOT=");

Why use the upper case form here? Does the kernel even support uppercase
ROOT=? I suspect not, in which case we can replace the case-insensitive
comparison with a regular one.


I thought about this a bit and I still see multiple issues:

- Even in absence of root=, an initramfs can decide its own root anyway
- Giving this extra meaning to bootm.appendroot will make extlinux.conf
behave differently to blspec
- The extlinux.conf files are not necessarily within a rootfs to begin
with (maybe it's partition with just boot/kernel images)
- Other kernel options that are related to the rootfs aren't touched by this

I am not sure these can be resolved properly.

I thus have a question to you: What happens if you drop remove_param()
completely? Sure we will have two root=, but the later gets precedence,
so your use case would continue to work without giving users a wrong
expectation.

I just Cc'd you on [1] which ensures appendroot is later than whatever
is added by blspec or extlinux.conf.

[1]:
https://lore.barebox.org/barebox/20260505095137.1123867-2-a.fatoum@pengutronix.de/T/#u

> +		else
> +			append = xstrdup(e->append);
> +
> +		globalvar_add_simple("linux.bootargs.dyn.extlinux", append);

Please rename to linux.bootargs.dyn.bootentries like blspec.

These kernel parameters are assembled in alphabetical order and have the
same name both here and in blspec will make interaction with other
parameters less surprising.

> +	ret = bootm_boot(&data);

As mentioned for v1, this should be bootm_entry(), not bootm_boot().

> +	if (ret)
> +		pr_err("bootm failed: %s\n", strerror(-ret));

... %pe\n", ERR_PTR(ret));

Cheers,
Ahmad


-- 
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] 11+ messages in thread

* Re: [PATCH v2 1/2] Add support for extlinux.conf
  2026-05-05  9:56 ` [PATCH v2 1/2] Add support for extlinux.conf Ahmad Fatoum
@ 2026-05-05 10:47   ` Alexander Shiyan
  2026-05-05 10:49     ` Ahmad Fatoum
  0 siblings, 1 reply; 11+ messages in thread
From: Alexander Shiyan @ 2026-05-05 10:47 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: barebox

Hello Ahmad.

...
> > +     if (e->append) {
> > +             char *append;
> > +
> > +             /*
> > +              * The same rootfs image may be launched from eMMC or SD card.
> > +              * Remove any hardcoded root= parameter from "append" to avoid
> > +              * conflicts, then let barebox automatically add the correct
> > +              * root= (via global.bootm.appendroot) based on the boot device.
> > +              */
> > +             if (data.appendroot)
> > +                     append = remove_param(e->append, "ROOT=");
...
> I thus have a question to you: What happens if you drop remove_param()
> completely? Sure we will have two root=, but the later gets precedence,
> so your use case would continue to work without giving users a wrong
> expectation.

Yes, the second one takes priority.
The second one is the one added via extlinux.conf APPEND option.
In our case we need the first parameter, i.e. which comes from barebox
when global.bootm.appendroot is toggled on.

Thanks!



^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 1/2] Add support for extlinux.conf
  2026-05-05 10:47   ` Alexander Shiyan
@ 2026-05-05 10:49     ` Ahmad Fatoum
  2026-05-05 12:19       ` Alexander Shiyan
  0 siblings, 1 reply; 11+ messages in thread
From: Ahmad Fatoum @ 2026-05-05 10:49 UTC (permalink / raw)
  To: Alexander Shiyan; +Cc: barebox

Hello Alexander,

On 5/5/26 12:47 PM, Alexander Shiyan wrote:
> Hello Ahmad.
> 
> ...
>>> +     if (e->append) {
>>> +             char *append;
>>> +
>>> +             /*
>>> +              * The same rootfs image may be launched from eMMC or SD card.
>>> +              * Remove any hardcoded root= parameter from "append" to avoid
>>> +              * conflicts, then let barebox automatically add the correct
>>> +              * root= (via global.bootm.appendroot) based on the boot device.
>>> +              */
>>> +             if (data.appendroot)
>>> +                     append = remove_param(e->append, "ROOT=");
> ...
>> I thus have a question to you: What happens if you drop remove_param()
>> completely? Sure we will have two root=, but the later gets precedence,
>> so your use case would continue to work without giving users a wrong
>> expectation.
> 
> Yes, the second one takes priority.
> The second one is the one added via extlinux.conf APPEND option.
> In our case we need the first parameter, i.e. which comes from barebox
> when global.bootm.appendroot is toggled on.

Ack. Please check the series I Cc'd you on, which ensures that
global.bootm.appendroot applies _after_ extlinux.conf APPEND.

Thanks,
Ahmad

> 
> Thanks!
> 

-- 
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] 11+ messages in thread

* Re: [PATCH v2 1/2] Add support for extlinux.conf
  2026-05-05 10:49     ` Ahmad Fatoum
@ 2026-05-05 12:19       ` Alexander Shiyan
  2026-05-05 12:22         ` Ahmad Fatoum
  0 siblings, 1 reply; 11+ messages in thread
From: Alexander Shiyan @ 2026-05-05 12:19 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: barebox

Hello Ahmad.

barebox@Diasom DS-RK3568-SOM-EVB:/ global
* allow_color: 1
  arch: arm64
  autoboot: countdown (values: "countdown", "abort", "halt", "menu", "boot")
  autoboot_abort_key: <NULL>
* autoboot_timeout: 2
* boot.default: default
  boot.watchdog_timeout: 0
  bootm.appendroot: 0
  bootm.dryrun: 0
  bootm.earlycon: 0
  bootm.image:
  bootm.image.loadaddr:
  bootm.initrd:
  bootm.initrd.loadaddr:
  bootm.oftree:
  bootm.provide_hostname: 0
* bootm.provide_machine_id: 1
  bootm.root_dev:
  bootm.root_param: root
  bootm.tee:
  bootm.verbose: 0
  bootm.verify: available (values: "none", "hash", "signature", "available")
* bootm.~appendroot: true
  console.ctrlc_allowed: 1
  dhcp.bootfile:
  dhcp.client_id:
  dhcp.client_uuid:
  dhcp.hostname:
  dhcp.oftree_file:
  dhcp.option224:
  dhcp.retries: 20
  dhcp.rootpath:
  dhcp.tftp_server_name:
  dhcp.user_class:
  dhcp.vendor_id: barebox
  endianness: little
  env.autoprobe: 1
  fastboot.bbu: 0
  fastboot.max_download_size: 134217728
  fastboot.partitions:
  firmware.path: /env/firmware
  hostname: diasom
  linux.bootargs.base:
  linux.bootargs.console: console=ttyS2,1500000n8
  linux.bootargs_append: 0
  linux.rootnfsopts: v3,tcp
  log_max_messages: 32768
  loglevel: 7
  machine_id: 181af2816b4c6b0aef77068e0ccc69ad
  model: Diasom DS-RK3568-SOM-EVB
  net.domainname:
  net.fetchdir: /mnt/tftp
  net.gateway: 0.0.0.0
  net.ifup_force_detect: 0
  net.nameserver: 0.0.0.0
  net.server:
  nfs.port: 0
  of.kernel.add_machine_compatible:
  of.overlay.compatible:
  of.overlay.filter: pattern compatible
  of.overlay.path:
  of.overlay.pattern: *
  of_partition_binding: adaptive (values: "new", "legacy",
"donttouch", "adaptive")
  partitions.first_usable_lba: 16384
  system.partitions:
  system.reset: unknown (values: "unknown", "POR", "RST", "WDG",
"WKE", "JTAG", "THERM", "EXT", "BROWNOUT")
  system.reset_instance: 0
  tftp.windowsize: 1
  usbgadget.acm: 0
  usbgadget.dfu_function:
* user: none
  version: 2026.04.0-00765-gd3f78fc00c40-dirty
barebox@Diasom DS-RK3568-SOM-EVB:/ global.boot.default=mmc1.2
barebox@Diasom DS-RK3568-SOM-EVB:/ boot -d
ext4 ext40: EXT2 rev 1, inode_size 256, descriptor size 64
Booting entry 'extlinux: linux'
extlinux: Booting extlinux label 'linux'

Loading ARM aarch64 Linux/EFI image '/mnt/mmc1.2/boot/extlinux/../vmlinuz'
Camera IMX662 detected.
commandline: console=ttyS2,1500000n8
systemd.machine_id=181af2816b4c6b0aef77068e0ccc69ad root=LABEL=ROOT ro
systemd.unit=setup.target quiet splash
Loaded kernel to 0x0a400000, devicetree at 0x000000000fb49000
Dryrun. Aborted

bootm.~appendroot: true, but now is ever not added to the cmdline.

вт, 5 мая 2026 г. в 13:49, Ahmad Fatoum <a.fatoum@pengutronix.de>:
>
> Hello Alexander,
>
> On 5/5/26 12:47 PM, Alexander Shiyan wrote:
> > Hello Ahmad.
> >
> > ...
> >>> +     if (e->append) {
> >>> +             char *append;
> >>> +
> >>> +             /*
> >>> +              * The same rootfs image may be launched from eMMC or SD card.
> >>> +              * Remove any hardcoded root= parameter from "append" to avoid
> >>> +              * conflicts, then let barebox automatically add the correct
> >>> +              * root= (via global.bootm.appendroot) based on the boot device.
> >>> +              */
> >>> +             if (data.appendroot)
> >>> +                     append = remove_param(e->append, "ROOT=");
> > ...
> >> I thus have a question to you: What happens if you drop remove_param()
> >> completely? Sure we will have two root=, but the later gets precedence,
> >> so your use case would continue to work without giving users a wrong
> >> expectation.
> >
> > Yes, the second one takes priority.
> > The second one is the one added via extlinux.conf APPEND option.
> > In our case we need the first parameter, i.e. which comes from barebox
> > when global.bootm.appendroot is toggled on.
>
> Ack. Please check the series I Cc'd you on, which ensures that
> global.bootm.appendroot applies _after_ extlinux.conf APPEND.
>
> Thanks,
> Ahmad
>
> >
> > Thanks!
> >
>
> --
> 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] 11+ messages in thread

* Re: [PATCH v2 1/2] Add support for extlinux.conf
  2026-05-05 12:19       ` Alexander Shiyan
@ 2026-05-05 12:22         ` Ahmad Fatoum
  2026-05-05 12:44           ` Alexander Shiyan
  0 siblings, 1 reply; 11+ messages in thread
From: Ahmad Fatoum @ 2026-05-05 12:22 UTC (permalink / raw)
  To: Alexander Shiyan; +Cc: barebox

Hello Alexander,

On 5/5/26 2:19 PM, Alexander Shiyan wrote:
> barebox@Diasom DS-RK3568-SOM-EVB:/ global
> * bootm.~appendroot: true

This should be bootm.appendroot: 1.

> bootm.~appendroot: true, but now is ever not added to the cmdline.

The tilde is just an implementation detail in common/bootm.c. You should
just global.bootm.appendroot as before.

Thanks,
Ahmad

> 
> вт, 5 мая 2026 г. в 13:49, Ahmad Fatoum <a.fatoum@pengutronix.de>:
>>
>> Hello Alexander,
>>
>> On 5/5/26 12:47 PM, Alexander Shiyan wrote:
>>> Hello Ahmad.
>>>
>>> ...
>>>>> +     if (e->append) {
>>>>> +             char *append;
>>>>> +
>>>>> +             /*
>>>>> +              * The same rootfs image may be launched from eMMC or SD card.
>>>>> +              * Remove any hardcoded root= parameter from "append" to avoid
>>>>> +              * conflicts, then let barebox automatically add the correct
>>>>> +              * root= (via global.bootm.appendroot) based on the boot device.
>>>>> +              */
>>>>> +             if (data.appendroot)
>>>>> +                     append = remove_param(e->append, "ROOT=");
>>> ...
>>>> I thus have a question to you: What happens if you drop remove_param()
>>>> completely? Sure we will have two root=, but the later gets precedence,
>>>> so your use case would continue to work without giving users a wrong
>>>> expectation.
>>>
>>> Yes, the second one takes priority.
>>> The second one is the one added via extlinux.conf APPEND option.
>>> In our case we need the first parameter, i.e. which comes from barebox
>>> when global.bootm.appendroot is toggled on.
>>
>> Ack. Please check the series I Cc'd you on, which ensures that
>> global.bootm.appendroot applies _after_ extlinux.conf APPEND.
>>
>> Thanks,
>> Ahmad
>>
>>>
>>> Thanks!
>>>
>>
>> --
>> 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 |
>>
> 

-- 
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] 11+ messages in thread

* Re: [PATCH v2 1/2] Add support for extlinux.conf
  2026-05-05 12:22         ` Ahmad Fatoum
@ 2026-05-05 12:44           ` Alexander Shiyan
  2026-05-05 12:52             ` Ahmad Fatoum
  0 siblings, 1 reply; 11+ messages in thread
From: Alexander Shiyan @ 2026-05-05 12:44 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: barebox

barebox@Diasom DS-RK3568-SOM-EVB:/ global
* allow_color: 1
  arch: arm64
  autoboot: countdown (values: "countdown", "abort", "halt", "menu", "boot")
  autoboot_abort_key: <NULL>
* autoboot_timeout: 2
* boot.default: default
  boot.watchdog_timeout: 0
* bootm.appendroot: 1
  bootm.dryrun: 0
  bootm.earlycon: 0
  bootm.image:
  bootm.image.loadaddr:
  bootm.initrd:
  bootm.initrd.loadaddr:
  bootm.oftree:
  bootm.provide_hostname: 0
* bootm.provide_machine_id: 1
  bootm.root_dev:
  bootm.root_param: root
  bootm.tee:
  bootm.verbose: 0
  bootm.verify: available (values: "none", "hash", "signature", "available")
  console.ctrlc_allowed: 1
  dhcp.bootfile:
  dhcp.client_id:
  dhcp.client_uuid:
  dhcp.hostname:
  dhcp.oftree_file:
  dhcp.option224:
  dhcp.retries: 20
  dhcp.rootpath:
  dhcp.tftp_server_name:
  dhcp.user_class:
  dhcp.vendor_id: barebox
  endianness: little
  env.autoprobe: 1
  fastboot.bbu: 0
  fastboot.max_download_size: 134217728
  fastboot.partitions:
  firmware.path: /env/firmware
  hostname: diasom
  linux.bootargs.base:
  linux.bootargs.console: console=ttyS2,1500000n8
  linux.bootargs_append: 0
  linux.rootnfsopts: v3,tcp
  log_max_messages: 32768
  loglevel: 7
  machine_id: 181af2816b4c6b0aef77068e0ccc69ad
  model: Diasom DS-RK3568-SOM-EVB
  net.domainname:
  net.fetchdir: /mnt/tftp
  net.gateway: 0.0.0.0
  net.ifup_force_detect: 0
  net.nameserver: 0.0.0.0
  net.server:
  nfs.port: 0
  of.kernel.add_machine_compatible:
  of.overlay.compatible:
  of.overlay.filter: pattern compatible
  of.overlay.path:
  of.overlay.pattern: *
  of_partition_binding: adaptive (values: "new", "legacy",
"donttouch", "adaptive")
  partitions.first_usable_lba: 16384
  system.partitions:
  system.reset: unknown (values: "unknown", "POR", "RST", "WDG",
"WKE", "JTAG", "THERM", "EXT", "BROWNOUT")
  system.reset_instance: 0
  tftp.windowsize: 1
  usbgadget.acm: 0
  usbgadget.dfu_function:
* user: none
  version: 2026.04.0-00765-gd3f78fc00c40-dirty
barebox@Diasom DS-RK3568-SOM-EVB:/ global.boot.default=mmc1.2
barebox@Diasom DS-RK3568-SOM-EVB:/ boot
ext4 ext40: EXT2 rev 1, inode_size 256, descriptor size 64
Booting entry 'extlinux: linux'
extlinux: Booting extlinux label 'linux'
Adding "root=/dev/mmcblk1p3" to Kernel commandline

Loading ARM aarch64 Linux/EFI image '/mnt/mmc1.2/boot/extlinux/../vmlinuz'
Camera IMX662 detected.
commandline: console=ttyS2,1500000n8 root=LABEL=ROOT ro
systemd.unit=setup.target quiet splash  root=/dev/mmcblk1p3
systemd.machine_id=181af2816b4c6b0aef77068e0ccc69ad
Loaded kernel to 0x0a400000, devicetree at 0x000000000fb49000
nv variables modified, saving them
I/TC: Secondary CPU 1 initializing
I/TC: Secondary CPU 1 switching to normal world boot
I/TC: Secondary CPU 2 initializing
I/TC: Secondary CPU 2 switching to normal world boot
I/TC: Secondary CPU 3 initializing
I/TC: Secondary CPU 3 switching to normal world boot

Now it works!

вт, 5 мая 2026 г. в 15:22, Ahmad Fatoum <a.fatoum@pengutronix.de>:
>
> Hello Alexander,
>
> On 5/5/26 2:19 PM, Alexander Shiyan wrote:
> > barebox@Diasom DS-RK3568-SOM-EVB:/ global
> > * bootm.~appendroot: true
>
> This should be bootm.appendroot: 1.
>
> > bootm.~appendroot: true, but now is ever not added to the cmdline.
>
> The tilde is just an implementation detail in common/bootm.c. You should
> just global.bootm.appendroot as before.
>
> Thanks,
> Ahmad
>
> >
> > вт, 5 мая 2026 г. в 13:49, Ahmad Fatoum <a.fatoum@pengutronix.de>:
> >>
> >> Hello Alexander,
> >>
> >> On 5/5/26 12:47 PM, Alexander Shiyan wrote:
> >>> Hello Ahmad.
> >>>
> >>> ...
> >>>>> +     if (e->append) {
> >>>>> +             char *append;
> >>>>> +
> >>>>> +             /*
> >>>>> +              * The same rootfs image may be launched from eMMC or SD card.
> >>>>> +              * Remove any hardcoded root= parameter from "append" to avoid
> >>>>> +              * conflicts, then let barebox automatically add the correct
> >>>>> +              * root= (via global.bootm.appendroot) based on the boot device.
> >>>>> +              */
> >>>>> +             if (data.appendroot)
> >>>>> +                     append = remove_param(e->append, "ROOT=");
> >>> ...
> >>>> I thus have a question to you: What happens if you drop remove_param()
> >>>> completely? Sure we will have two root=, but the later gets precedence,
> >>>> so your use case would continue to work without giving users a wrong
> >>>> expectation.
> >>>
> >>> Yes, the second one takes priority.
> >>> The second one is the one added via extlinux.conf APPEND option.
> >>> In our case we need the first parameter, i.e. which comes from barebox
> >>> when global.bootm.appendroot is toggled on.
> >>
> >> Ack. Please check the series I Cc'd you on, which ensures that
> >> global.bootm.appendroot applies _after_ extlinux.conf APPEND.
> >>
> >> Thanks,
> >> Ahmad
> >>
> >>>
> >>> Thanks!
> >>>
> >>
> >> --
> >> 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 |
> >>
> >
>
> --
> 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] 11+ messages in thread

* Re: [PATCH v2 1/2] Add support for extlinux.conf
  2026-05-05 12:44           ` Alexander Shiyan
@ 2026-05-05 12:52             ` Ahmad Fatoum
  2026-05-05 13:01               ` Alexander Shiyan
  0 siblings, 1 reply; 11+ messages in thread
From: Ahmad Fatoum @ 2026-05-05 12:52 UTC (permalink / raw)
  To: Alexander Shiyan; +Cc: barebox

Hi,

On 5/5/26 2:44 PM, Alexander Shiyan wrote:
> barebox@Diasom DS-RK3568-SOM-EVB:/ global

> Loading ARM aarch64 Linux/EFI image '/mnt/mmc1.2/boot/extlinux/../vmlinuz'
> Camera IMX662 detected.
> commandline: console=ttyS2,1500000n8 root=LABEL=ROOT ro
> systemd.unit=setup.target quiet splash  root=/dev/mmcblk1p3
> systemd.machine_id=181af2816b4c6b0aef77068e0ccc69ad
> Loaded kernel to 0x0a400000, devicetree at 0x000000000fb49000
> nv variables modified, saving them
> I/TC: Secondary CPU 1 initializing
> I/TC: Secondary CPU 1 switching to normal world boot
> I/TC: Secondary CPU 2 initializing
> I/TC: Secondary CPU 2 switching to normal world boot
> I/TC: Secondary CPU 3 initializing
> I/TC: Secondary CPU 3 switching to normal world boot
> 
> Now it works!

Great. I think with the rest of my feedback integrated, the v3 should be
good to go.

Thanks,
Ahmad

> 
> вт, 5 мая 2026 г. в 15:22, Ahmad Fatoum <a.fatoum@pengutronix.de>:
>>
>> Hello Alexander,
>>
>> On 5/5/26 2:19 PM, Alexander Shiyan wrote:
>>> barebox@Diasom DS-RK3568-SOM-EVB:/ global
>>> * bootm.~appendroot: true
>>
>> This should be bootm.appendroot: 1.
>>
>>> bootm.~appendroot: true, but now is ever not added to the cmdline.
>>
>> The tilde is just an implementation detail in common/bootm.c. You should
>> just global.bootm.appendroot as before.
>>
>> Thanks,
>> Ahmad
>>
>>>
>>> вт, 5 мая 2026 г. в 13:49, Ahmad Fatoum <a.fatoum@pengutronix.de>:
>>>>
>>>> Hello Alexander,
>>>>
>>>> On 5/5/26 12:47 PM, Alexander Shiyan wrote:
>>>>> Hello Ahmad.
>>>>>
>>>>> ...
>>>>>>> +     if (e->append) {
>>>>>>> +             char *append;
>>>>>>> +
>>>>>>> +             /*
>>>>>>> +              * The same rootfs image may be launched from eMMC or SD card.
>>>>>>> +              * Remove any hardcoded root= parameter from "append" to avoid
>>>>>>> +              * conflicts, then let barebox automatically add the correct
>>>>>>> +              * root= (via global.bootm.appendroot) based on the boot device.
>>>>>>> +              */
>>>>>>> +             if (data.appendroot)
>>>>>>> +                     append = remove_param(e->append, "ROOT=");
>>>>> ...
>>>>>> I thus have a question to you: What happens if you drop remove_param()
>>>>>> completely? Sure we will have two root=, but the later gets precedence,
>>>>>> so your use case would continue to work without giving users a wrong
>>>>>> expectation.
>>>>>
>>>>> Yes, the second one takes priority.
>>>>> The second one is the one added via extlinux.conf APPEND option.
>>>>> In our case we need the first parameter, i.e. which comes from barebox
>>>>> when global.bootm.appendroot is toggled on.
>>>>
>>>> Ack. Please check the series I Cc'd you on, which ensures that
>>>> global.bootm.appendroot applies _after_ extlinux.conf APPEND.
>>>>
>>>> Thanks,
>>>> Ahmad
>>>>
>>>>>
>>>>> Thanks!
>>>>>
>>>>
>>>> --
>>>> 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 |
>>>>
>>>
>>
>> --
>> 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 |
>>
> 

-- 
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] 11+ messages in thread

* Re: [PATCH v2 1/2] Add support for extlinux.conf
  2026-05-05 12:52             ` Ahmad Fatoum
@ 2026-05-05 13:01               ` Alexander Shiyan
  2026-05-05 13:04                 ` Ahmad Fatoum
  0 siblings, 1 reply; 11+ messages in thread
From: Alexander Shiyan @ 2026-05-05 13:01 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: barebox

There is another question: is it necessary to call
globalvar_remove("linux.bootargs.dyn.bootentries")
in extlinux_entry_free()?
We can run bootm multiple times in dry-run mode, and the variable may
become invalid...

вт, 5 мая 2026 г. в 15:52, Ahmad Fatoum <a.fatoum@pengutronix.de>:
>
> Hi,
>
> On 5/5/26 2:44 PM, Alexander Shiyan wrote:
> > barebox@Diasom DS-RK3568-SOM-EVB:/ global
>
> > Loading ARM aarch64 Linux/EFI image '/mnt/mmc1.2/boot/extlinux/../vmlinuz'
> > Camera IMX662 detected.
> > commandline: console=ttyS2,1500000n8 root=LABEL=ROOT ro
> > systemd.unit=setup.target quiet splash  root=/dev/mmcblk1p3
> > systemd.machine_id=181af2816b4c6b0aef77068e0ccc69ad
> > Loaded kernel to 0x0a400000, devicetree at 0x000000000fb49000
> > nv variables modified, saving them
> > I/TC: Secondary CPU 1 initializing
> > I/TC: Secondary CPU 1 switching to normal world boot
> > I/TC: Secondary CPU 2 initializing
> > I/TC: Secondary CPU 2 switching to normal world boot
> > I/TC: Secondary CPU 3 initializing
> > I/TC: Secondary CPU 3 switching to normal world boot
> >
> > Now it works!
>
> Great. I think with the rest of my feedback integrated, the v3 should be
> good to go.
>
> Thanks,
> Ahmad
>
> >
> > вт, 5 мая 2026 г. в 15:22, Ahmad Fatoum <a.fatoum@pengutronix.de>:
> >>
> >> Hello Alexander,
> >>
> >> On 5/5/26 2:19 PM, Alexander Shiyan wrote:
> >>> barebox@Diasom DS-RK3568-SOM-EVB:/ global
> >>> * bootm.~appendroot: true
> >>
> >> This should be bootm.appendroot: 1.
> >>
> >>> bootm.~appendroot: true, but now is ever not added to the cmdline.
> >>
> >> The tilde is just an implementation detail in common/bootm.c. You should
> >> just global.bootm.appendroot as before.
> >>
> >> Thanks,
> >> Ahmad
> >>
> >>>
> >>> вт, 5 мая 2026 г. в 13:49, Ahmad Fatoum <a.fatoum@pengutronix.de>:
> >>>>
> >>>> Hello Alexander,
> >>>>
> >>>> On 5/5/26 12:47 PM, Alexander Shiyan wrote:
> >>>>> Hello Ahmad.
> >>>>>
> >>>>> ...
> >>>>>>> +     if (e->append) {
> >>>>>>> +             char *append;
> >>>>>>> +
> >>>>>>> +             /*
> >>>>>>> +              * The same rootfs image may be launched from eMMC or SD card.
> >>>>>>> +              * Remove any hardcoded root= parameter from "append" to avoid
> >>>>>>> +              * conflicts, then let barebox automatically add the correct
> >>>>>>> +              * root= (via global.bootm.appendroot) based on the boot device.
> >>>>>>> +              */
> >>>>>>> +             if (data.appendroot)
> >>>>>>> +                     append = remove_param(e->append, "ROOT=");
> >>>>> ...
> >>>>>> I thus have a question to you: What happens if you drop remove_param()
> >>>>>> completely? Sure we will have two root=, but the later gets precedence,
> >>>>>> so your use case would continue to work without giving users a wrong
> >>>>>> expectation.
> >>>>>
> >>>>> Yes, the second one takes priority.
> >>>>> The second one is the one added via extlinux.conf APPEND option.
> >>>>> In our case we need the first parameter, i.e. which comes from barebox
> >>>>> when global.bootm.appendroot is toggled on.
> >>>>
> >>>> Ack. Please check the series I Cc'd you on, which ensures that
> >>>> global.bootm.appendroot applies _after_ extlinux.conf APPEND.
> >>>>
> >>>> Thanks,
> >>>> Ahmad
> >>>>
> >>>>>
> >>>>> Thanks!
> >>>>>
> >>>>
> >>>> --
> >>>> 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 |
> >>>>
> >>>
> >>
> >> --
> >> 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 |
> >>
> >
>
> --
> 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] 11+ messages in thread

* Re: [PATCH v2 1/2] Add support for extlinux.conf
  2026-05-05 13:01               ` Alexander Shiyan
@ 2026-05-05 13:04                 ` Ahmad Fatoum
  0 siblings, 0 replies; 11+ messages in thread
From: Ahmad Fatoum @ 2026-05-05 13:04 UTC (permalink / raw)
  To: Alexander Shiyan; +Cc: barebox

Hello Alexander,

On 5/5/26 3:01 PM, Alexander Shiyan wrote:
> There is another question: is it necessary to call
> globalvar_remove("linux.bootargs.dyn.bootentries")
> in extlinux_entry_free()?
> We can run bootm multiple times in dry-run mode, and the variable may
> become invalid...

The boot_entry() function takes care to set all
global.linux.bootargs.dyn.* variables to the empty string:

	globalvar_set_match("linux.bootargs.dyn.", "");

So you should not need to explicitly remove it.

Cheers,
Ahmad

> 
> вт, 5 мая 2026 г. в 15:52, Ahmad Fatoum <a.fatoum@pengutronix.de>:
>>
>> Hi,
>>
>> On 5/5/26 2:44 PM, Alexander Shiyan wrote:
>>> barebox@Diasom DS-RK3568-SOM-EVB:/ global
>>
>>> Loading ARM aarch64 Linux/EFI image '/mnt/mmc1.2/boot/extlinux/../vmlinuz'
>>> Camera IMX662 detected.
>>> commandline: console=ttyS2,1500000n8 root=LABEL=ROOT ro
>>> systemd.unit=setup.target quiet splash  root=/dev/mmcblk1p3
>>> systemd.machine_id=181af2816b4c6b0aef77068e0ccc69ad
>>> Loaded kernel to 0x0a400000, devicetree at 0x000000000fb49000
>>> nv variables modified, saving them
>>> I/TC: Secondary CPU 1 initializing
>>> I/TC: Secondary CPU 1 switching to normal world boot
>>> I/TC: Secondary CPU 2 initializing
>>> I/TC: Secondary CPU 2 switching to normal world boot
>>> I/TC: Secondary CPU 3 initializing
>>> I/TC: Secondary CPU 3 switching to normal world boot
>>>
>>> Now it works!
>>
>> Great. I think with the rest of my feedback integrated, the v3 should be
>> good to go.
>>
>> Thanks,
>> Ahmad
>>
>>>
>>> вт, 5 мая 2026 г. в 15:22, Ahmad Fatoum <a.fatoum@pengutronix.de>:
>>>>
>>>> Hello Alexander,
>>>>
>>>> On 5/5/26 2:19 PM, Alexander Shiyan wrote:
>>>>> barebox@Diasom DS-RK3568-SOM-EVB:/ global
>>>>> * bootm.~appendroot: true
>>>>
>>>> This should be bootm.appendroot: 1.
>>>>
>>>>> bootm.~appendroot: true, but now is ever not added to the cmdline.
>>>>
>>>> The tilde is just an implementation detail in common/bootm.c. You should
>>>> just global.bootm.appendroot as before.
>>>>
>>>> Thanks,
>>>> Ahmad
>>>>
>>>>>
>>>>> вт, 5 мая 2026 г. в 13:49, Ahmad Fatoum <a.fatoum@pengutronix.de>:
>>>>>>
>>>>>> Hello Alexander,
>>>>>>
>>>>>> On 5/5/26 12:47 PM, Alexander Shiyan wrote:
>>>>>>> Hello Ahmad.
>>>>>>>
>>>>>>> ...
>>>>>>>>> +     if (e->append) {
>>>>>>>>> +             char *append;
>>>>>>>>> +
>>>>>>>>> +             /*
>>>>>>>>> +              * The same rootfs image may be launched from eMMC or SD card.
>>>>>>>>> +              * Remove any hardcoded root= parameter from "append" to avoid
>>>>>>>>> +              * conflicts, then let barebox automatically add the correct
>>>>>>>>> +              * root= (via global.bootm.appendroot) based on the boot device.
>>>>>>>>> +              */
>>>>>>>>> +             if (data.appendroot)
>>>>>>>>> +                     append = remove_param(e->append, "ROOT=");
>>>>>>> ...
>>>>>>>> I thus have a question to you: What happens if you drop remove_param()
>>>>>>>> completely? Sure we will have two root=, but the later gets precedence,
>>>>>>>> so your use case would continue to work without giving users a wrong
>>>>>>>> expectation.
>>>>>>>
>>>>>>> Yes, the second one takes priority.
>>>>>>> The second one is the one added via extlinux.conf APPEND option.
>>>>>>> In our case we need the first parameter, i.e. which comes from barebox
>>>>>>> when global.bootm.appendroot is toggled on.
>>>>>>
>>>>>> Ack. Please check the series I Cc'd you on, which ensures that
>>>>>> global.bootm.appendroot applies _after_ extlinux.conf APPEND.
>>>>>>
>>>>>> Thanks,
>>>>>> Ahmad
>>>>>>
>>>>>>>
>>>>>>> Thanks!
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> 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 |
>>>>>>
>>>>>
>>>>
>>>> --
>>>> 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 |
>>>>
>>>
>>
>> --
>> 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 |
>>
> 

-- 
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] 11+ messages in thread

end of thread, other threads:[~2026-05-05 13:05 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-04-28 13:28 [PATCH v2 1/2] Add support for extlinux.conf Alexander Shiyan
2026-04-28 13:28 ` [PATCH v2 2/2] Documentation: add extlinux.conf support description Alexander Shiyan
2026-05-05  9:56 ` [PATCH v2 1/2] Add support for extlinux.conf Ahmad Fatoum
2026-05-05 10:47   ` Alexander Shiyan
2026-05-05 10:49     ` Ahmad Fatoum
2026-05-05 12:19       ` Alexander Shiyan
2026-05-05 12:22         ` Ahmad Fatoum
2026-05-05 12:44           ` Alexander Shiyan
2026-05-05 12:52             ` Ahmad Fatoum
2026-05-05 13:01               ` Alexander Shiyan
2026-05-05 13:04                 ` Ahmad Fatoum

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox