mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Alexander Shiyan <eagle.alexander923@gmail.com>
To: Ahmad Fatoum <a.fatoum@pengutronix.de>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH 3/3] bootm: append automatic parameters after all other linux.bootargs
Date: Tue, 5 May 2026 15:45:06 +0300	[thread overview]
Message-ID: <CAP1tNvTAV4Mu5QR3y3ZvF+-fT8Q41Ea1BphOo==4qK7ks2zSGA@mail.gmail.com> (raw)
In-Reply-To: <20260505095137.1123867-4-a.fatoum@pengutronix.de>

Tested-by: Alexander Shiyan <eagle.alexander923@gmail.com>

вт, 5 мая 2026 г. в 12:51, Ahmad Fatoum <a.fatoum@pengutronix.de>:
>
> bootm can be configured to determine suitable values for a number of
> kernel command line options that will automatically be fixed up.
>
> Currently, these options are concatenated into the kernel command line
> interleaved with all other options in the lexicographical order of the
> linux.bootargs. parameter name.
>
> For the root= option, this means that any root= in a blspec file for
> example will override barebox' own root=, because:
>
>   global.linux.bootargs.bootm.root < global.linux.bootargs.dyn.bootentries
>
> The other way makes more sense however, especially as there is always a
> device parameter or Kconfig option to control whether the fixup should
> happen at all.
>
> With the new order, it's now possible to set global.bootm.appendroot=1
> and have barebox append a new root= and have it take precedence over a
> bootloader spec provided root=. To reflect that this has occurred, the
> kernel command-line will continue to list two root='s, which greatly
> simplifies debugging if issues happen (e.g. because there was a
> rootfstype that is no longer accurate).
>
> This commit doesn't add any LINUX_BOOTARGS_BOOTM_EARLY as it's not yet
> needed. Still it lays out how it could look like in future.
>
> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
> ---
>  .../migration-guides/migration-master.rst     |  9 +++++++
>  Documentation/user/booting-linux.rst          | 24 +++++++++++++++--
>  common/bootm.c                                | 26 ++++++++++++++-----
>  3 files changed, 50 insertions(+), 9 deletions(-)
>
> diff --git a/Documentation/migration-guides/migration-master.rst b/Documentation/migration-guides/migration-master.rst
> index 5be4659d5b3d..f6d193417f1d 100644
> --- a/Documentation/migration-guides/migration-master.rst
> +++ b/Documentation/migration-guides/migration-master.rst
> @@ -31,3 +31,12 @@ Scripts that **read** the parameter will now receive ``"disabled"`` or
>  ``"enabled"`` instead of ``"0"`` or ``"1"``.
>
>  Scripts that **write** ``"0"`` or ``"1"`` continue to work.
> +
> +global.linux.bootargs.* appending order
> +---------------------------------------
> +
> +If barebox was configured to automatically generate any of the ``root``,
> +``rootwait``, ``earlycon``, ``systemd.machine_id``, ``systemd.hostname``
> +or ``barebox.security.policy`` kernel command line options, they will be
> +appended onto the final kernel command line
> +:ref:`**after** all other options <bootargs_concat_order>`.
> diff --git a/Documentation/user/booting-linux.rst b/Documentation/user/booting-linux.rst
> index cc0bdb4661ca..7bbb79ecdfc2 100644
> --- a/Documentation/user/booting-linux.rst
> +++ b/Documentation/user/booting-linux.rst
> @@ -89,14 +89,34 @@ with ``global.linux.bootargs.`` will be concatenated to the bootargs:
>
>  .. code-block:: sh
>
> +  global linux.bootargs.Loglevel="ignore_loglevel"
>    global linux.bootargs.base="console=ttyO0,115200"
> -  global linux.bootargs.debug="earlyprintk ignore_loglevel"
> +  global linux.bootargs.debug="earlyprintk"
>
>    bootm zImage
>
>    ...
>
> -  Kernel command line: console=ttymxc0,115200n8 earlyprintk ignore_loglevel
> +  Kernel command line: ignore_loglevel console=ttyO0,115200 earlyprintk
> +
> +.. _bootargs_concat_order:
> +
> +Concatenation order
> +"""""""""""""""""""
> +
> +The kernel command line arguments are concatenated in lexicographical order of
> +their ``linux.bootargs.``-prefixed parameter names.
> +
> +Kernel command line arguments that barebox generates internally are not
> +interleaved with externally provided command-line arguments:
> +
> +* Following arguments will be concatenated **after** all other options:
> +  * ``root=`` and ``rootwait=`` controlled by :ref:`global.bootm.appendroot <magicvar_global_bootm_appendroot>`
> +    :ref:`global.linux.rootwait <magicvar_global_linux_rootwait>`
> +  * ``earlycon=`` controlled by :ref:`global.bootm.earlycon <magicvar_global_bootm_earlycon>`
> +  * ``systemd.machine_id=`` controlled by :ref:`global.bootm.provide_machine_id <magicvar_global_bootm_provide_machine_id>`
> +  * ``systemd.hostname=`` controlled by :ref:`global.bootm.provide_hostname <magicvar_global_bootm_provide_hostname>`
> +  * ``barebox.security.policy=`` controlled by :ref:`global.bootm.provide_policy <magicvar_global_bootm_provide_policy>`
>
>  Creating root= options for the Kernel
>  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> diff --git a/common/bootm.c b/common/bootm.c
> index c7bf414effa4..26465875ad94 100644
> --- a/common/bootm.c
> +++ b/common/bootm.c
> @@ -22,6 +22,19 @@
>  #include <security/config.h>
>  #include <security/policy.h>
>
> +/*
> + * All device parameter iteration happens in lexicographical order.
> + * To ensure that bootm options are consistently applied before or after
> + * other options from the environment or boot configuration files, we
> + * employ following convention for the prefix:
> + *
> + *   !         0x21 is less than any non-space printable character
> + *   ~         0x7e is greater than any printable character
> + *
> + * Users will never see those as bootm_boot_cleanup() will delete them again.
> + */
> +#define LINUX_BOOTARGS_BOOTM_LATE      "linux.bootargs.~bootm."
> +
>  static LIST_HEAD(handler_list);
>  static struct sconfig_notifier_block sconfig_notifier;
>
> @@ -650,7 +663,7 @@ struct image_data *bootm_boot_prep(const struct bootm_data *bootm_data)
>
>                         rootarg = format_root_bootarg(bootm_data->root_param, root, rootopts);
>                         pr_info("Adding \"%s\" to Kernel commandline\n", rootarg);
> -                       globalvar_add_simple("linux.bootargs.bootm.appendroot",
> +                       globalvar_add_simple(LINUX_BOOTARGS_BOOTM_LATE "appendroot",
>                                              rootarg);
>                         free(rootarg);
>                 }
> @@ -672,7 +685,7 @@ struct image_data *bootm_boot_prep(const struct bootm_data *bootm_data)
>                         earlycon = "earlycon";
>
>                 pr_info("Adding \"%s\" to Kernel commandline\n", earlycon);
> -               globalvar_add_simple("linux.bootargs.bootm.earlycon", earlycon);
> +               globalvar_add_simple(LINUX_BOOTARGS_BOOTM_LATE "earlycon", earlycon);
>         }
>
>         if (bootm_data->provide_machine_id) {
> @@ -686,7 +699,7 @@ struct image_data *bootm_boot_prep(const struct bootm_data *bootm_data)
>                 }
>
>                 machine_id_bootarg = basprintf("systemd.machine_id=%s", machine_id);
> -               globalvar_add_simple("linux.bootargs.machine_id", machine_id_bootarg);
> +               globalvar_add_simple(LINUX_BOOTARGS_BOOTM_LATE "machine_id", machine_id_bootarg);
>                 free(machine_id_bootarg);
>         }
>
> @@ -714,7 +727,7 @@ struct image_data *bootm_boot_prep(const struct bootm_data *bootm_data)
>                                              hostname, suffix ? "-" : "",
>                                              suffix ?: "");
>
> -               globalvar_add_simple("linux.bootargs.hostname", hostname_bootarg);
> +               globalvar_add_simple(LINUX_BOOTARGS_BOOTM_LATE "hostname", hostname_bootarg);
>                 free(hostname_bootarg);
>         }
>
> @@ -729,7 +742,7 @@ struct image_data *bootm_boot_prep(const struct bootm_data *bootm_data)
>                 }
>
>                 policy_bootargs = basprintf("barebox.security.policy=%s", active_policy->name);
> -               globalvar_add_simple("linux.bootargs.dyn.policy", policy_bootargs);
> +               globalvar_add_simple(LINUX_BOOTARGS_BOOTM_LATE "policy", policy_bootargs);
>                 free(policy_bootargs);
>         }
>
> @@ -792,8 +805,7 @@ void bootm_boot_cleanup(struct image_data *data)
>         if (data->of_root_node)
>                 of_delete_node(data->of_root_node);
>
> -       globalvar_remove("linux.bootargs.bootm.earlycon");
> -       globalvar_remove("linux.bootargs.bootm.appendroot");
> +       globalvar_remove(LINUX_BOOTARGS_BOOTM_LATE  "*");
>         free(data->os_header);
>         free(data->os_file);
>         free(data->oftree_file);
> --
> 2.47.3
>



  reply	other threads:[~2026-05-05 12:46 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-05  9:50 [PATCH 0/3] " Ahmad Fatoum
2026-05-05  9:50 ` [PATCH 1/3] common: fix help text reference to internal imagicvars Ahmad Fatoum
2026-05-05  9:50 ` [PATCH 2/3] Documentation: user: booting-linux: split off mtdparts fixup section Ahmad Fatoum
2026-05-05  9:51 ` [PATCH 3/3] bootm: append automatic parameters after all other linux.bootargs Ahmad Fatoum
2026-05-05 12:45   ` Alexander Shiyan [this message]
2026-05-07 11:17   ` (subset) " Sascha Hauer

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='CAP1tNvTAV4Mu5QR3y3ZvF+-fT8Q41Ea1BphOo==4qK7ks2zSGA@mail.gmail.com' \
    --to=eagle.alexander923@gmail.com \
    --cc=a.fatoum@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /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