[U-Boot] "uEnv.txt" versus "fw_setenv" -- a question about style

Wolfgang Denk wd at denx.de
Fri Jul 22 16:54:54 CEST 2016


Dear "Robert P. J. Day",

In message <alpine.LFD.2.20.1607220912470.30533 at localhost.localdomain> you wrote:
> 
>   curious about peoples' preferences when it comes to customizing
> u-boot on a running system -- using a "uEnv.txt" file that can be
> trivially edited from user space, as opposed to using the u-boot
> firmware tools to change the actual environment variables in
> persistent storage.

IMO these are two totally different things, i. e. not oopsed to each
other, but orthogonal - you can use both on the same system, for
different purposes.

>   obviously, i can certainly combine the two approaches above, but
> because of the upcoming issue regarding robustness, i'm leaning
> towards the uEnv.txt approach, and here's why.

I should add that this is of course also a matter of taste...

>   if i support updating the env vars in persistent storage, and a
> system in the field suddenly stops booting properly, then i might be
> completely in the dark as to what's in the u-boot environment. how do
> i know what the user has been doing, or what variables he might have
> changed? however, if i keep all the changes in uEnv.txt, it's easy to
> get a look at that file and, also, simply removing that file
> effectively sets the machine back to "factory defaults."

"uEnv.txt" is a method that was introduced relatively late in U-Boot's
lifetime, and it reflects largely the thinking and the requirements of
distro makers.

To be honest: I do not really like it; I can live with it, I can see
why some people use it, but I rarely see a need to use it myself.

It has some disadvantages:

You need file system support, and for each boot you need to mount and
read from a file system.  This is not good for any kind of boot time
optimization.  You can do similar things completely without external
files - plain areas in flash are sufficient.  You can still use "env
import" to set variables; it is as easy or even easier to switch "user
profiles" by loading different sets of env settings, or fall back to
factory defaults by loading a default set (or no set at all).

Normally, all such copies of the environment are protected by CRC32
checksums, so U-Boot will protect you from loading corrupted _data_.

No such potrection is done when reading from a text file!

>   in addition, if i have filesystem corruption that wipes out
> uEnv.txt (among other things), then, again, i have effectively reduced
> the system back to factory defaults so it can boot to a known good
> state of some kind.

But it is also pretty easy to load a totally corrupted set of
environment settings, without any safety seat belt.  If I was to
design attacks to a "protected" U-Boot, I would definitely look into
crafting a specialized "uEnv.txt" file ;-)

>   i guess i'm more comfortable with the idea of a system having a
> solid and tested u-boot environment that rarely (if ever) changes,

Well, it is not that solid - it lacks any kind of protection agains
intentional or accidential corruption.  Ease of use was preferred over
using checksum protected images.

> rather than regularly changing things in the persistent storage, but
> i'm open to being persuaded otherwise; i'm just curious about what
> others prefer.

As mentioned, it is also a matter of taste.  If you have a double copy
system which switches to a new boot device to activate a software
update, and to fall back to the alternative one in case of boot
errors, I find it MUCH easier to flip just a single environment
variable using fw_setenv than to edit a text file, or to manage a
number of alternative text files through copies, moves and/or links.

Others may tell you different stories...

I think this is one of the cases of "there is more than one way to do
it".

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
I paid too much for it, but its worth it.


More information about the U-Boot mailing list