default environment append from kconfig

Hello all, is there any kconfig mechanism in u-boot to append environment variable to the default one?
I am aware of CONFIG_USE_DEFAULT_ENV_FILE, but this will completely replace it, looking into the code I was not able to find anything, but I wonder if something from this https://lore.kernel.org/all/20211022030852.1986718-1-sjg@chromium.org/ can be used.
Francesco

On 09/08/2022 12.47, Francesco Dolcini wrote:
Hello all, is there any kconfig mechanism in u-boot to append environment variable to the default one?
Well, despite the name, CONFIG_EXTRA_ENV_SETTINGS is not settable via kconfig, but only from board header file. And while it works, it's rather cumbersome to maintain that macro expanding to a string with all the embedded \0 and the required \ continuations etc.
I am aware of CONFIG_USE_DEFAULT_ENV_FILE, but this will completely replace it, looking into the code I was not able to find anything,
You could select CONFIG_ENV_IMPORT_FDT, then populate the /config/environment/ devicetree node with the key/value pairs you want.
This can for example be done via the <board>-u-boot.dtsi file, or if you're using an in-tree board with in-tree .dts, and just want to maintain your own .config and environment out of tree, you could additionally set CONFIG_DEVICE_TREE_INCLUDES to point at a .dtsi which just has that
/ { config { environment { foo = "bar"; }; }; };
(that was exactly a use case I had in mind for CONFIG_DEVICE_TREE_INCLUDES, as can be seen in the commit log for a77f468099).
Rasmus

On Tue, Aug 09, 2022 at 01:02:24PM +0200, Rasmus Villemoes wrote:
On 09/08/2022 12.47, Francesco Dolcini wrote:
I am aware of CONFIG_USE_DEFAULT_ENV_FILE, but this will completely replace it, looking into the code I was not able to find anything,
You could select CONFIG_ENV_IMPORT_FDT, then populate the /config/environment/ devicetree node with the key/value pairs you want.
This can for example be done via the <board>-u-boot.dtsi file, or if you're using an in-tree board with in-tree .dts, and just want to maintain your own .config and environment out of tree, you could additionally set CONFIG_DEVICE_TREE_INCLUDES to point at a .dtsi which just has that
/ { config { environment { foo = "bar"; }; }; };
(that was exactly a use case I had in mind for CONFIG_DEVICE_TREE_INCLUDES, as can be seen in the commit log for a77f468099).
Thanks Rasmus, it looks pretty helpful, I'll give it a try.
Francesco

On Tue, Aug 09, 2022 at 01:02:24PM +0200, Rasmus Villemoes wrote:
On 09/08/2022 12.47, Francesco Dolcini wrote:
Hello all, is there any kconfig mechanism in u-boot to append environment variable to the default one?
Well, despite the name, CONFIG_EXTRA_ENV_SETTINGS is not settable via kconfig, but only from board header file. And while it works, it's rather cumbersome to maintain that macro expanding to a string with all the embedded \0 and the required \ continuations etc.
I just want to chime in here to note that the biggest blocker to removing CONFIG_EXTRA_ENV_SETTINGS and migrating it to board.env files is how to handle, exactly, distroboot support. Aside from that, whatever is done in CONFIG_EXTRA_ENV_SETTINGS can be done in the .env file (unless there's some other fancy macro work being done that I've missed).

Hi Tom,
On Wed, 10 Aug 2022 at 08:36, Tom Rini trini@konsulko.com wrote:
On Tue, Aug 09, 2022 at 01:02:24PM +0200, Rasmus Villemoes wrote:
On 09/08/2022 12.47, Francesco Dolcini wrote:
Hello all, is there any kconfig mechanism in u-boot to append environment variable to the default one?
Well, despite the name, CONFIG_EXTRA_ENV_SETTINGS is not settable via kconfig, but only from board header file. And while it works, it's rather cumbersome to maintain that macro expanding to a string with all the embedded \0 and the required \ continuations etc.
I just want to chime in here to note that the biggest blocker to removing CONFIG_EXTRA_ENV_SETTINGS and migrating it to board.env files is how to handle, exactly, distroboot support. Aside from that,
I will get back to that before long.
whatever is done in CONFIG_EXTRA_ENV_SETTINGS can be done in the .env file (unless there's some other fancy macro work being done that I've missed).
-- Tom
Regards, SImon

On Tue, Aug 09, 2022 at 12:47:39PM +0200, Francesco Dolcini wrote:
Hello all, is there any kconfig mechanism in u-boot to append environment variable to the default one?
I am aware of CONFIG_USE_DEFAULT_ENV_FILE, but this will completely replace it, looking into the code I was not able to find anything, but I wonder if something from this https://lore.kernel.org/all/20211022030852.1986718-1-sjg@chromium.org/ can be used.
Yes, you can use the series above, which has been merged for some time, to append to the environment via board/../<board>/<board>.env and you can look at the existing .env files for examples of how it works.

On Wed, Aug 10, 2022 at 10:34:26AM -0400, Tom Rini wrote:
On Tue, Aug 09, 2022 at 12:47:39PM +0200, Francesco Dolcini wrote:
Hello all, is there any kconfig mechanism in u-boot to append environment variable to the default one?
I am aware of CONFIG_USE_DEFAULT_ENV_FILE, but this will completely replace it, looking into the code I was not able to find anything, but I wonder if something from this https://lore.kernel.org/all/20211022030852.1986718-1-sjg@chromium.org/ can be used.
Yes, you can use the series above, which has been merged for some time, to append to the environment via board/../<board>/<board>.env and you can look at the existing .env files for examples of how it works.
Am I wrong or this just override the whole environment? My need here is to just add|override some env variables to the default env to an in-tree u-boot board from an out-of-tree configuration.
Think about a specific network or boot configuration, for example.
Francesco

On Wed, Aug 10, 2022 at 05:09:45PM +0200, Francesco Dolcini wrote:
On Wed, Aug 10, 2022 at 10:34:26AM -0400, Tom Rini wrote:
On Tue, Aug 09, 2022 at 12:47:39PM +0200, Francesco Dolcini wrote:
Hello all, is there any kconfig mechanism in u-boot to append environment variable to the default one?
I am aware of CONFIG_USE_DEFAULT_ENV_FILE, but this will completely replace it, looking into the code I was not able to find anything, but I wonder if something from this https://lore.kernel.org/all/20211022030852.1986718-1-sjg@chromium.org/ can be used.
Yes, you can use the series above, which has been merged for some time, to append to the environment via board/../<board>/<board>.env and you can look at the existing .env files for examples of how it works.
Am I wrong or this just override the whole environment? My need here is to just add|override some env variables to the default env to an in-tree u-boot board from an out-of-tree configuration.
Think about a specific network or boot configuration, for example.
It doesn't override the whole environment. As of the link you posted, it did override all of (or rather, conflicted with) CONFIG_EXTRA_ENV_SETTINGS, but I changed that more recently as it was hindering adoption of the feature overall.
participants (4)
-
Francesco Dolcini
-
Rasmus Villemoes
-
Simon Glass
-
Tom Rini