All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alper Nebi Yasak <alpernebiyasak@gmail.com>
To: Jan Kiszka <jan.kiszka@siemens.com>, u-boot@lists.denx.de
Cc: Heiko Thiery <heiko.thiery@gmail.com>, Simon Glass <sjg@chromium.org>
Subject: Re: [PATCH v2 4/5] binman: Convert FIT entry type to a subclass of Section entry type
Date: Fri, 18 Feb 2022 20:34:37 +0300	[thread overview]
Message-ID: <c16e99d6-df8f-f991-6aae-4ce37742c72b@gmail.com> (raw)
In-Reply-To: <10793ff6-12b6-7b3b-840b-c6f49f9185da@siemens.com>

On 18/02/2022 19:50, Jan Kiszka wrote:
> On 15.02.22 18:06, Jan Kiszka wrote:
>> On 15.02.22 17:50, Jan Kiszka wrote:
>>> On 15.02.22 13:27, Alper Nebi Yasak wrote:
>>>> The AddMissingProperties() and SetCalculatedProperties() methods were
>>>> disabled for FIT as a fixup to this patch, that's why image-pos etc.
>>>> aren't available. See comments at [1] for some context.
>>>>
>>>> Hopefully my two patches [2][3] fix things, can you test with them?
>>>>
>>>> [1] "binman: Correct the error message for a bad hash algorithm"
>>>> https://patchwork.ozlabs.org/project/uboot/patch/20220208105941.1.I8f212a1150defebaf8b7b15a79f7a2fc62c276b2@changeid/
>>>>
>>>> [2] "binman: Skip processing "hash" subnodes of FIT subsections"
>>>> https://patchwork.ozlabs.org/project/uboot/patch/20220209190236.26479-1-alpernebiyasak@gmail.com/
>>>>
>>>
>>> This one helped, indeed.
>>>
>>
>> ...not completely:
>>
>> $ source/tools/binman/binman replace -i flash.bin -f fit@0x380000.fit
>> fit@0x380000binman: [Errno 13] Permission denied: '/.fit@0x380000.itb'
>>
> 
> Ping.
> 
> $ source/tools/binman/binman -D replace -i flash.bin -f fit@0x380000.fit fit@0x380000
> binman: [Errno 13] Permission denied: '/.fit@0x380000.itb'
> 
> Traceback (most recent call last):
>   File "source/tools/binman/binman", line 141, in RunBinman
>     ret_code = control.Binman(args)
>   File "u-boot/tools/binman/control.py", line 644, in Binman
>     allow_resize=not args.fix_size, write_map=args.map)
>   File "u-boot/tools/binman/control.py", line 404, in ReplaceEntries
>     allow_resize=allow_resize, write_map=write_map)
>   File "u-boot/tools/binman/control.py", line 341, in WriteEntryToImage
>     AfterReplace(image, allow_resize=allow_resize, write_map=write_map)
>   File "u-boot/tools/binman/control.py", line 333, in AfterReplace
>     get_contents=False, allow_resize=allow_resize)
>   File "u-boot/tools/binman/control.py", line 560, in ProcessImage
>     image.PackEntries()
>   File "u-boot/tools/binman/image.py", line 155, in PackEntries
>     super().Pack(0)
>   File "u-boot/tools/binman/etype/section.py", line 385, in Pack
>     self._PackEntries()
>   File "u-boot/tools/binman/etype/section.py", line 403, in _PackEntries
>     offset = entry.Pack(offset)
>   File "u-boot/tools/binman/etype/section.py", line 390, in Pack
>     data = self.BuildSectionData(True)
>   File "u-boot/tools/binman/etype/fit.py", line 265, in BuildSectionData
>     tools.write_file(input_fname, data)
>   File "u-boot/tools/patman/tools.py", line 482, in write_file
>     with open(filename(fname), binary and 'wb' or 'w') as fd:
> PermissionError: [Errno 13] Permission denied: '/.fit@0x380000.itb'
> 
> Something seems fairly broken here. That '/.' does not come from the 
> output directory name, it's generated by Entry.GetUniqueName. Looks like 
> this path should not been taken under these conditions.

I can reproduce this and tried a few things, but more issues just kept
popping up (outside u-boot as well). I got it to a point where the
command re-packs the FIT and the image but quite wrongly. The offset and
image-pos properties get added in the FIT, and the image main-section
just concatenates all entries without regard to set offsets. I'll
need more time to work those out, then to add tests and send patches.

Here's the diff I got so far in case it helps:

diff --git a/tools/binman/control.py b/tools/binman/control.py
index a179f7812988..24ec89b26302 100644
--- a/tools/binman/control.py
+++ b/tools/binman/control.py
@@ -390,6 +390,7 @@ def ReplaceEntries(image_fname, input_fname, indir,
entry_paths,
     """
     image_fname = os.path.abspath(image_fname)
     image = Image.FromFile(image_fname)
+    image.CollectBintools()

     # Replace an entry from a single file, as a special case
     if input_fname:
diff --git a/tools/binman/entry.py b/tools/binman/entry.py
index 631215dfc88a..8173e91af96a 100644
--- a/tools/binman/entry.py
+++ b/tools/binman/entry.py
@@ -767,7 +767,7 @@ def GetUniqueName(self):
         node = self._node
         while node.parent:
             node = node.parent
-            if node.name == 'binman':
+            if node.name == 'binman' or node.name == '/':
                 break
             name = '%s.%s' % (node.name, name)
         return name
diff --git a/tools/binman/etype/fit.py b/tools/binman/etype/fit.py
index 1e957023f354..9b2c33bc2b34 100644
--- a/tools/binman/etype/fit.py
+++ b/tools/binman/etype/fit.py
@@ -137,10 +137,6 @@ def __init__(self, section, etype, node):
                                                                   str)])[0]
         self.mkimage = None

-    def ReadNode(self):
-        self.ReadEntries()
-        super().ReadNode()
-
     def ReadEntries(self):
         def _AddNode(base_node, depth, node):
             """Add a node to the FIT
@@ -184,11 +180,12 @@ def _AddNode(base_node, depth, node):
                 # section entries for them here to merge the content
subnodes
                 # together and put the merged contents in the subimage
node's
                 # 'data' property later.
-                entry = Entry.Create(self.section, node, etype='section')
+                entry = Entry.Create(self, node, etype='section')
                 entry.ReadNode()
                 # The hash subnodes here are for mkimage, not binman.
                 entry.SetUpdateHash(False)
-                self._entries[rel_path] = entry
+                image_name = rel_path[len('/images/'):]
+                self._entries[image_name] = entry

             for subnode in node.subnodes:
                 if has_images and not (subnode.name.startswith('hash') or
@@ -284,7 +281,8 @@ def _BuildInput(self, fdt):
         Returns:
             New fdt contents (bytes)
         """
-        for path, section in self._entries.items():
+        for image_name, section in self._entries.items():
+            path = f"/images/{image_name}"
             node = fdt.GetNode(path)
             data = section.GetData()
             node.AddData('data', data)
@@ -312,7 +310,8 @@ def SetImagePos(self, image_pos):
         fdt = Fdt.FromData(self.GetData())
         fdt.Scan()

-        for path, section in self._entries.items():
+        for image_name, section in self._entries.items():
+            path = f"/images/{image_name}"
             node = fdt.GetNode(path)

             data_prop = node.props.get("data")

  reply	other threads:[~2022-02-18 17:34 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-07 22:08 [PATCH v2 0/5] binman: Improvements to FIT entry type Alper Nebi Yasak
2022-02-07 22:08 ` [PATCH v2 1/5] binman: Fix subentry expansion for " Alper Nebi Yasak
2022-02-08 15:05   ` Simon Glass
2022-02-08 20:39   ` Simon Glass
2022-02-07 22:08 ` [PATCH v2 2/5] binman: Register and check bintools from FIT subentries Alper Nebi Yasak
2022-02-07 22:08 ` [PATCH v2 3/5] binman: Check missing bintools of Section subclasses Alper Nebi Yasak
2022-02-07 22:08 ` [PATCH v2 4/5] binman: Convert FIT entry type to a subclass of Section entry type Alper Nebi Yasak
2022-02-14  9:09   ` Jan Kiszka
2022-02-15 12:27     ` Alper Nebi Yasak
2022-02-15 16:50       ` Jan Kiszka
2022-02-15 17:06         ` Jan Kiszka
2022-02-18 16:50           ` Jan Kiszka
2022-02-18 17:34             ` Alper Nebi Yasak [this message]
2022-02-19 15:53               ` Simon Glass
2022-02-21  4:40                 ` Simon Glass
2022-02-22 18:58                   ` Alper Nebi Yasak
2022-02-23 22:59                     ` Simon Glass
2022-02-28 11:48                       ` Jan Kiszka
2022-02-28 13:51                         ` Alper Nebi Yasak
2022-02-28 13:56                         ` Simon Glass
2022-02-28 14:14                           ` Jan Kiszka
2022-02-07 22:08 ` [PATCH v2 5/5] binman: Update image positions of FIT subentries Alper Nebi Yasak
2022-02-08 20:43   ` Simon Glass
2022-02-23  2:35   ` Simon Glass
2022-02-08 20:39 ` [PATCH v2 4/5] binman: Convert FIT entry type to a subclass of Section entry type Simon Glass
2022-02-08 20:39 ` [PATCH v2 3/5] binman: Check missing bintools of Section subclasses Simon Glass
2022-02-08 20:39 ` [PATCH v2 2/5] binman: Register and check bintools from FIT subentries Simon Glass

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=c16e99d6-df8f-f991-6aae-4ce37742c72b@gmail.com \
    --to=alpernebiyasak@gmail.com \
    --cc=heiko.thiery@gmail.com \
    --cc=jan.kiszka@siemens.com \
    --cc=sjg@chromium.org \
    --cc=u-boot@lists.denx.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.