[PATCH] tools: mkenvimage: Add pure shell implementation of mkenvimage
Marek Vasut
marex at denx.de
Sat Feb 8 22:16:37 CET 2025
On 2/7/25 11:31 AM, Rasmus Villemoes wrote:
> On Wed, Feb 05 2025, Marek Vasut <marex at denx.de> wrote:
>
>> Add implementation of mkenvimage written purely in bourne shell.
>>
>> This is not a replacement for mkenvimage tool, but rather a simple
>> implementation which can be used in environments where mkenvimage
>> itself cannot be deployed due to various constraints, like hardware
>> manufacturing plants, but where bourne shell and basic tool are
>> already available.
>>
>> The external dependencies which are not shell built-ins are gzip
>> and grep.
>>
>
> Eh, and cat, sort, dd, tr, mktemp, head, tail, mv and rm ?
A lot of which are shell builtins .
>> All mkenvimage parameters are implemented and compatible with the
>> C implementation of mkenvimage.
>>
>> Signed-off-by: Marek Vasut <marex at denx.de>
>> ---
>> Cc: Joe Hershberger <joe.hershberger at ni.com>
>> Cc: Tom Rini <trini at konsulko.com>
>> ---
>> tools/mkenvimage.sh | 126 ++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 126 insertions(+)
>> create mode 100755 tools/mkenvimage.sh
>>
>> diff --git a/tools/mkenvimage.sh b/tools/mkenvimage.sh
>> new file mode 100755
>> index 00000000000..f83fac92e5d
>> --- /dev/null
>> +++ b/tools/mkenvimage.sh
>> @@ -0,0 +1,126 @@
>> +#!/bin/sh
>> +
>> +print_help() {
>> + echo "mkenvimage [-h] [-V] [-r] [-b] [-p <byte>] -s <environment partition size> -o <output> <input file>"
>
> Nit: you included a .sh extension in the filename, probably this output
> should reflect that.
$0 is even better.
>> +
>> +(
>> +# Read input environment file, make sure there is a trailing newline,
>> +# sort the result and remove empty and commented out lines.
>> +( cat "${INFILE}" ; echo ) | sort -u "${INFILE}" | grep -v '^#' | grep -v '^[ \t]*$' | tr '\n' '\0'
>
> Doesn't sort ignore stdin when given file(s) via argv? Also, the newline
> added by that echo would probably by removed by the grep, and you
> manually insert a \0 right after, so probably the first cat;echo should
> just be removed.
Good point
> I'm also wondering why you even do that sort; AFAIK, mkenvimage doesn't
> do that. And it would make a difference if the input fx had two
> definitions for the same variable
>
> foo=Y
> foo=X
>
> because when loaded on target, the last occurring value takes
> precedence.
Indeed
> Are you handling escaping of newlines, in order to allow values to
> contain newline characters?
Uh, no, I don't think so. I don't think I even used something like that
with plain C mkenvimage either. Do you have an example input env for me?
More information about the U-Boot
mailing list