1. 25 7月, 2019 36 次提交
    • S
      binman: Support reading from CBFS entries · 3a9c2525
      Simon Glass 提交于
      CBFS is a bit like a section but with a custom format. Provide the list of
      entries and the compression type to binman so that it can extract the data
      from the CBFS, just like any other part of the image.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      3a9c2525
    • S
      binman: Allow reading an entry from an image · f667e45b
      Simon Glass 提交于
      It is useful to be able to extract entry contents from an image to see
      what is inside. Add a simple function to read the contents of an entry,
      decompressing it by default.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      f667e45b
    • S
      binman: Allow for logging information to be displayed · eea264ea
      Simon Glass 提交于
      Binman generally operates silently but in some cases it is useful to see
      what Binman is actually doing at each step. Enable some logging output
      with different logging levels selectable via the -v flag.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      eea264ea
    • S
      binman: Support listing an image · 61f564d1
      Simon Glass 提交于
      Add support for listing the entries in an image. This relies on the image
      having an FDT map.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      61f564d1
    • S
      binman: Convert Image to a subclass of Entry · 8beb11ea
      Simon Glass 提交于
      When support for sections (and thus hierarchical images) was added to
      binman, the decision was made to create a new Section class which could
      be used by both Image and an Entry_section class. The decision between
      using inheritance and composition was tricky to make, but in the end it
      was decided that Image was different enough from Entry that it made sense
      to put the implementation of sections in an entirely separate class. It
      also has the advantage that core Image code does have to rely on an entry
      class in the etype directory.
      
      This work was mostly completed in commit:
      
         8f1da50c "binman: Refactor much of the image code into 'section'
      
      As a result of this, the Section class has its own version of things like
      offset and size and these must be kept in sync with the parent
      Entry_section class in some cases.
      
      In the last year it has become apparent that the cost of keeping things in
      sync is larger than expected, since more and more code wants to access
      these properties.
      
      An alternative approach, previously considered and rejected, now seems
      better.
      
      Adjust Image to be a subclass of Entry_section. Move the code from Section
      (in bsection.py) to Entry_section and delete Section. Update all tests
      accordingly.
      
      This requires substantial changes to Image. Overall the changes reduce
      code size by about 240 lines. While much of that is just boilerplate from
      Section, there are quite a few functions in Entry_section which now do not
      need to be overiden from Entry. This suggests the change is beneficial
      even without further functionality being added.
      
      A side benefit is that the properties of sections are now consistent with
      other entries. This fixes a problem in testListCmd() where some properties
      are missing for sections.
      
      Unfortunately this is a very large commit since it is not feasible to do
      the migration piecemeal. Given the substantial tests available and the
      100% code coverage of binman, we should be able to do this safely.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      8beb11ea
    • S
      binman: Support reading an image into an Image object · ffded752
      Simon Glass 提交于
      It is possible to read an Image, locate its FDT map and then read it into
      the binman data structures. This allows full access to the entries that
      were written to the image. Add support for this.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      ffded752
    • S
      binman: Support locating an image header · 2d26003d
      Simon Glass 提交于
      Add support for locating an image header in an image.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      2d26003d
    • S
      binman: Support locating an FDT map · e1925fa5
      Simon Glass 提交于
      Add support for locating an image's Fdt map which is used to determine
      the contents and structure of the image.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      e1925fa5
    • S
      binman: Allow listing the entries in an image · 41b8ba09
      Simon Glass 提交于
      It is useful to be able to summarise all the entries in an image, e.g. to
      display this to this user. Add a new ListEntries() method to Entry, and
      set up a way to call it through the Image class.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      41b8ba09
    • S
      binman: Detect bad CBFS file types · 8a1ad068
      Simon Glass 提交于
      Detect when an unknown or unsupported file type is specified and report
      an error.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      8a1ad068
    • S
      binman: Support FDT update for CBFS · 69f7cb31
      Simon Glass 提交于
      It is useful to add the CBFS file information (offset, size, etc.) into
      the FDT so that the layout is complete. Add support for this.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      69f7cb31
    • S
      binman: Use the cbfs memlen field only for uncompressed length · 52107ee4
      Simon Glass 提交于
      The purpose of this badly named field is a bit ambiguous. Adjust the code
      to use it only to store the uncompressed length of a file, leaving it set
      to None if there is no compression used. This makes it easy to see if the
      value in this field is relevant / useful.
      
      Also set data_len for compressed fields, since it should be the length of
      the compressed data, not the uncompressed data.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      52107ee4
    • S
      binman: Provide the actual data address for cbfs files · 1223db03
      Simon Glass 提交于
      At present a file with no explicit CBFS offset is placed in the next
      available location but there is no way to find out where it ended up.
      Update and rename the get_data() function to provide this information.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      1223db03
    • S
      binman: Allow device-tree entries to be compressed · 6c223fda
      Simon Glass 提交于
      At present the logic skips the blob class' handling of compression, so
      this is not supported with device tree entries. Fix this.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      6c223fda
    • S
      binman: Allow entries to expand after packing · c52c9e7d
      Simon Glass 提交于
      Add support for detecting entries that change size after they have already
      been packed, and re-running packing when it happens.
      
      This removes the limitation that entry size cannot change after
      PackEntries() is called.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      c52c9e7d
    • S
      binman: Add a control for post-pack entry expansion · bf6906ba
      Simon Glass 提交于
      We plan to support changing the size of entries after they have been
      packed. For now it will always be enabled. But to aid testing of both
      cases (in the event that we want to add a command-line flag, for example),
      add a setting to control it.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      bf6906ba
    • S
      binman: Add a return value to ProcessContentsUpdate() · a0dcaf20
      Simon Glass 提交于
      At present if this function tries to update the contents such that the
      size changes, it raises an error. We plan to add the ability to change
      the size of entries after packing is completed, since in some cases it is
      not possible to determine the size in advance.
      
      An example of this is with a compressed device tree, where the values
      of the device tree change in SetCalculatedProperties() or
      ProcessEntryContents(). While the device tree itself does not change size,
      since placeholders for any new properties have already bee added by
      AddMissingProperties(), we cannot predict the size of the device tree
      after compression. If a value changes from 0 to 0x1234 (say), then the
      compressed device tree may expand.
      
      As a first step towards supporting this, make ProcessContentsUpdate()
      return a value indicating whether the content size is OK. For now this is
      always True (since otherwise binman raises an error), but later patches
      will adjust this.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      a0dcaf20
    • S
      binman: Call ProcessUpdateContents() consistently · 7f9e00a2
      Simon Glass 提交于
      SetContents() should only be called to set the contents of an entry from
      within the ObtainContents() call, since it has no guard against increasing
      the size of the contents, thus triggering incorrect operation.
      
      Change all such calls to use ProcessUpdateContents() instead.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      7f9e00a2
    • S
      binman: Fix up ProcessUpdateContents error and comments · 5b463fc2
      Simon Glass 提交于
      This function raises an exception with its arguments around the wrong way
      so the message is incorrect. Fix this as well as a few minor comment
      problems.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      5b463fc2
    • S
      binman: Allow easy importing of entry modules · e4304402
      Simon Glass 提交于
      At present entry modules can only be accessed using Entry.Lookup() or
      Entry.Create(). Most of the time this is fine, but sometimes a module
      needs to provide constants or helper functions useful to other modules.
      It is easier in this case to use 'import'.
      
      Add an __init__ file to permit this.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      e4304402
    • S
      binman: Drop an unused arg in Entry.Lookup() · c073ced7
      Simon Glass 提交于
      The first argument is not used. Remove it.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      c073ced7
    • S
      binman: Move compression into the Entry base class · 8287ee85
      Simon Glass 提交于
      Compression is currently available only with blobs. However we want to
      report the compression algorithm and uncompressed size for all entries,
      so that other entry types can support compression. This will help with
      the forthcoming 'list' feature which lists entries in the image.
      
      Move the compression properties into the base class. Also fix up the docs
      which had the wrong property name.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      8287ee85
    • S
      binman: Convert to use ArgumentParser · 53cd5d92
      Simon Glass 提交于
      This class is the new way to handle arguments in Python. Convert binman
      over to use it. At the same time, introduce commands so that we can
      separate out the different parts of binman functionality.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      53cd5d92
    • S
      binman: Add an image header · cf228943
      Simon Glass 提交于
      It is useful to be able to quickly locate the FDT map in the image. An
      easy way to do this is with a pointer at the start or end of the image.
      
      Add an 'image header' entry, which places a magic number followed by a
      pointer to the FDT map. This can be located at the start or end of the
      image, or at a chosen location.
      
      As part of this, update GetSiblingImagePos() to detect missing siblings.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      cf228943
    • S
      binman: Add an FDT map · 086cec9f
      Simon Glass 提交于
      An FDT map is an entry which holds a full description of the image
      entries, in FDT format. It can be discovered using the magic string at
      its start. Tools can locate and read this entry to find out what entries
      are in the image and where each entry is located.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      086cec9f
    • S
      binman: Add a convenience functions for real-DTB tests · 3c081311
      Simon Glass 提交于
      Quite a few tests will use a real device tree and need it updated with the
      binman metadata. Add a helper function for this.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      3c081311
    • S
      binman: Update help for new features · 57460184
      Simon Glass 提交于
      A few new features have been added. This has rendered part of the README
      obsolete. Update it.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      57460184
    • S
      binman: Update future features · 488b2251
      Simon Glass 提交于
      A few features have been completed and a few items are added.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      488b2251
    • S
      binman: Simplify the entry test · e90fe1b4
      Simon Glass 提交于
      The current test for the 'entry' module is a bit convoluted since it has
      to import the module multiple times. It also relies on ordering, in that
      test1EntryNoImportLib() must run before test2EntryImportLib() if they are
      running in the same Python process.
      
      This is unreliable since neither the ordering of tests nor the process
      that they run in is defined.
      
      Fix this by always reloading the entry in these two tests. Also add a
      check that the expected value of have_importlib is obtained.
      
      This corrects a code-coverage problem in the 'entry' module on some
      systems.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      e90fe1b4
    • S
      binman: Add support for fixed-offset files in CBFS · e073d4e1
      Simon Glass 提交于
      A feature of CBFS is that it allows files to be positioned at particular
      offset (as with binman in general). This is useful to support
      execute-in-place (XIP) code, since this may not be relocatable.
      
      Add a new cbfs-offset property to control this.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      e073d4e1
    • S
      binman: Pad empty areas of the CBFS with files · 7c173ced
      Simon Glass 提交于
      When there is lots of open space in a CBFS it is normally padded with
      'empty' files so that sequentially scanning the CBFS can skip from one to
      the next without a break.
      
      Add support for this.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      7c173ced
    • S
      binman: Add support for Intel IFWI entries · c5ac1388
      Simon Glass 提交于
      An Integrated Firmware Image is used to hold various binaries used for
      booting with Apollolake and some later devices. Add support for this.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      c5ac1388
    • S
      binman: Add support for CBFS entries · ac62fba4
      Simon Glass 提交于
      Add support for putting CBFSs (Coreboot Filesystems) in an image. This
      allows binman to produce firmware images used by coreboot to boot.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      ac62fba4
    • S
      binman: Add a utility library for coreboot CBFS · 4997a7ed
      Simon Glass 提交于
      Coreboot uses a simple flash-based filesystem called Coreboot Filesystem
      (CBFS) to organise files used during boot. This allows files to be named
      and their position in the flash to be set. It has special features for
      dealing with x86 devices which typically memory-map their SPI flash to the
      top of 32-bit address space and need a 'boot block' ending there.
      
      Create a library to help create and read CBFS files. This includes a
      writer class, a reader class and associated other helpers. Only a subset
      of features are currently supported.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      4997a7ed
    • S
      patman: Add a function to write ifwitool · 1cfdfc06
      Simon Glass 提交于
      This tool has quite a few arguments and options, so put the functionality
      in a function so that we call it from one place and hopefully get it
      right.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      1cfdfc06
    • S
      binman: Pass the toolpath to tests · 8acce60b
      Simon Glass 提交于
      Tools like ifwitool may not be available in the PATH, but are available in
      the build. These tools may be needed by tests, so allow tests to use the
      --toolpath flag.
      
      Also use this flag with travis.
      Signed-off-by: NSimon Glass <sjg@chromium.org>
      8acce60b
  2. 24 7月, 2019 4 次提交