[U-Boot] [PATCH v4 00/11] binman: A tool for creating firmware images

Marcel Ziswiler marcel.ziswiler at toradex.com
Tue Nov 1 23:19:26 CET 2016


Hi Simon

That sounds somewhat similar to the new OpenEmbedded Image Creator tool
called WIC (e.g. see slide 27ff here https://www.yoctoproject.org/sites
/default/files/yocto_devday_advanced_class_berlin_1.pdf).

Cheers

Marcel

On Thu, 2016-10-06 at 14:59 -0600, Simon Glass wrote:
> This series introduces binman, a tool designed to create firmware
> images.
> It provides a way to bring together various binaries and place them
> in an
> image, at particular positions and with configurable alignment.
> 
> Packaging of firmware is quite a different task from building the
> various
> parts. In many cases the various binaries which go into the image
> come from
> separate build systems. For example, ARM Trusted Firmware is used on
> ARMv8
> devices but is not built in the U-Boot tree. If a Linux kernel is
> included
> in the firmware image, it is built elsewhere.
> 
> It is of course possible to add more and more build rules to the U-
> Boot
> build system to cover these cases. It can shell out to other
> Makefiles and
> build scripts. But it seems better to create a clear divide between
> building
> software and packaging it.
> 
> U-Boot supports a very large number of boards. Many of these have
> their own
> specific rules for how an image should be put together so that it
> boots
> correctly. At present these rules are described by manual
> instructions,
> different for each board. By turning these instructions into a
> standard
> format, we can support making valid images for any board without
> manual
> effort, lots of READMEs, etc.
> 
> Images consist of a number of entries which are combined to make up
> the
> final image. The image is described in the device tree for the board,
> meaning
> that it can be accessed at run-time if desired.
> 
> Binman is an extensible tool. A set of standard entries is provides,
> but
> new entries can be created fairly easily. Entries can be as simple as
> providing the name of a file to include. They can also handle more
> complex
> requirements, such as adjusting the input file or reading header
> information
> from one entry to control the position of another.
> 
> U-Boot's mkimage builds FIT images and various other binaries. Binman
> augments this by allowing these binaries to be packed together. While
> FIT
> should be used where possible, it cannot be used everywhere. For
> example,
> many devices require executable code at a particular offset in the
> image.
> X86 machines require lots of binary blobs at particular places, and a
> microcode collection easily accessible at boot.
> 
> So far binman has enough functionality to be useful, so sunxi and x86
> boards
> are switched over to use it, as examples.
> 
> The series is available at u-boot-dm/binman-working
> 
> Future work and missing features are documented in the README.
> 
> Changes in v4:
> - Add an option to bring in an soc .dtsi file also
> - Add new patch to support building x86 images with FSP/CMC
> - Fix incorrect comments at the top of intel_*.py
> - Fix up rule to #include on "/ {" rather than "/dts-v1/;"
> - Remove RFC tag
> - Rename binman_dtsi variable to u-boot-dtsi
> - Update sunxi rule to depend on u-boot.dtb
> - Use binman for all sunxi boards
> - Use binman for all x86 boards
> 
> Changes in v3:
> - Add a new patch to automatically include a U-Boot .dtsi file
> - Put the binman definition in u-boot.dtsi
> - Use a <dts>-u-boot.dtsi file for the binman changes
> 
> Changes in v2:
> - Add automated test coverage
> - Add test for code coverage
> - Fix the -b option
> - Put the binman definition in a common file for x86
> - Various changes and improvements based on using this tool for a
> while
> - drop the unused __len__() method
> 
> Simon Glass (11):
>   binman: Introduce binman, a tool for building binary images
>   binman: Add basic entry types for U-Boot
>   binman: Add support for building x86 ROMs
>   binman: Add support for u-boot.img as an input binary
>   binman: Add support for building x86 ROMs with SPL
>   binman: Add support for building x86 images with FSP/CMC
>   binman: Add a build rule for binman
>   binman: Allow configuration options to be used in .dts files
>   binman: Automatically include a U-Boot .dtsi file
>   sunxi: Use binman for sunxi boards
>   x86: Use binman all x86 boards
> 
>  Makefile                                           |  57 +-
>  arch/arm/dts/sunxi-u-boot.dtsi                     |  14 +
>  arch/x86/dts/u-boot.dtsi                           |  62 ++
>  scripts/Makefile.lib                               |  22 +-
>  tools/binman/.gitignore                            |   1 +
>  tools/binman/README                                | 491
> +++++++++++++
>  tools/binman/binman                                |   1 +
>  tools/binman/binman.py                             | 116 +++
>  tools/binman/cmdline.py                            |  53 ++
>  tools/binman/control.py                            | 118 ++++
>  tools/binman/entry_test.py                         |  27 +
>  tools/binman/etype/_testing.py                     |  26 +
>  tools/binman/etype/blob.py                         |  37 +
>  tools/binman/etype/entry.py                        | 190 +++++
>  tools/binman/etype/intel_cmc.py                    |  17 +
>  tools/binman/etype/intel_descriptor.py             |  55 ++
>  tools/binman/etype/intel_fsp.py                    |  17 +
>  tools/binman/etype/intel_me.py                     |  17 +
>  tools/binman/etype/intel_mrc.py                    |  17 +
>  tools/binman/etype/intel_vga.py                    |  17 +
>  tools/binman/etype/u_boot.py                       |  17 +
>  tools/binman/etype/u_boot_dtb.py                   |  17 +
>  tools/binman/etype/u_boot_dtb_with_ucode.py        |  72 ++
>  tools/binman/etype/u_boot_img.py                   |  17 +
>  tools/binman/etype/u_boot_nodtb.py                 |  17 +
>  tools/binman/etype/u_boot_spl.py                   |  17 +
>  tools/binman/etype/u_boot_spl_bss_pad.py           |  26 +
>  tools/binman/etype/u_boot_spl_with_ucode_ptr.py    |  28 +
>  tools/binman/etype/u_boot_ucode.py                 |  77 ++
>  tools/binman/etype/u_boot_with_ucode_ptr.py        |  73 ++
>  tools/binman/etype/x86_start16.py                  |  17 +
>  tools/binman/etype/x86_start16_spl.py              |  17 +
>  tools/binman/fdt_test.py                           |  48 ++
>  tools/binman/func_test.py                          | 777
> +++++++++++++++++++++
>  tools/binman/image.py                              | 229 ++++++
>  tools/binman/test/01_invalid.dts                   |   5 +
>  tools/binman/test/02_missing_node.dts              |   6 +
>  tools/binman/test/03_empty.dts                     |   9 +
>  tools/binman/test/04_invalid_entry.dts             |  11 +
>  tools/binman/test/05_simple.dts                    |  11 +
>  tools/binman/test/06_dual_image.dts                |  22 +
>  tools/binman/test/07_bad_align.dts                 |  12 +
>  tools/binman/test/08_pack.dts                      |  30 +
>  tools/binman/test/09_pack_extra.dts                |  35 +
>  tools/binman/test/10_pack_align_power2.dts         |  12 +
>  tools/binman/test/11_pack_align_size_power2.dts    |  12 +
>  tools/binman/test/12_pack_inv_align.dts            |  13 +
>  tools/binman/test/13_pack_inv_size_align.dts       |  13 +
>  tools/binman/test/14_pack_overlap.dts              |  16 +
>  tools/binman/test/15_pack_overflow.dts             |  12 +
>  tools/binman/test/16_pack_image_overflow.dts       |  13 +
>  tools/binman/test/17_pack_image_size.dts           |  13 +
>  tools/binman/test/18_pack_image_align.dts          |  13 +
>  tools/binman/test/19_pack_inv_image_align.dts      |  14 +
>  .../binman/test/20_pack_inv_image_align_power2.dts |  13 +
>  tools/binman/test/21_image_pad.dts                 |  16 +
>  tools/binman/test/22_image_name.dts                |  21 +
>  tools/binman/test/23_blob.dts                      |  12 +
>  tools/binman/test/24_sorted.dts                    |  17 +
>  tools/binman/test/25_pack_zero_size.dts            |  15 +
>  tools/binman/test/26_pack_u_boot_dtb.dts           |  14 +
>  tools/binman/test/27_pack_4gb_no_size.dts          |  18 +
>  tools/binman/test/28_pack_4gb_outside.dts          |  19 +
>  tools/binman/test/29_x86-rom.dts                   |  19 +
>  tools/binman/test/30_x86-rom-me-no-desc.dts        |  15 +
>  tools/binman/test/31_x86-rom-me.dts                |  18 +
>  tools/binman/test/32_intel-vga.dts                 |  13 +
>  tools/binman/test/33_x86-start16.dts               |  13 +
>  tools/binman/test/34_x86_ucode.dts                 |  29 +
>  tools/binman/test/35_x86_single_ucode.dts          |  26 +
>  tools/binman/test/36_u_boot_img.dts                |  11 +
>  tools/binman/test/37_x86_no_ucode.dts              |  20 +
>  tools/binman/test/38_x86_ucode_missing_node.dts    |  26 +
>  tools/binman/test/39_x86_ucode_missing_node2.dts   |  23 +
>  tools/binman/test/40_x86_ucode_not_in_image.dts    |  28 +
>  tools/binman/test/41_unknown_pos_size.dts          |  11 +
>  tools/binman/test/42_intel-fsp.dts                 |  13 +
>  tools/binman/test/43_intel-cmc.dts                 |  13 +
>  tools/binman/test/u_boot_no_ucode_ptr              | Bin 0 -> 4182
> bytes
>  tools/binman/test/u_boot_no_ucode_ptr.c            |  15 +
>  tools/binman/test/u_boot_ucode_ptr                 | Bin 0 -> 4175
> bytes
>  tools/binman/test/u_boot_ucode_ptr.c               |  15 +
>  tools/binman/test/u_boot_ucode_ptr.lds             |  18 +
>  83 files changed, 3500 insertions(+), 47 deletions(-)
>  create mode 100644 arch/arm/dts/sunxi-u-boot.dtsi
>  create mode 100644 arch/x86/dts/u-boot.dtsi
>  create mode 100644 tools/binman/.gitignore
>  create mode 100644 tools/binman/README
>  create mode 120000 tools/binman/binman
>  create mode 100755 tools/binman/binman.py
>  create mode 100644 tools/binman/cmdline.py
>  create mode 100644 tools/binman/control.py
>  create mode 100644 tools/binman/entry_test.py
>  create mode 100644 tools/binman/etype/_testing.py
>  create mode 100644 tools/binman/etype/blob.py
>  create mode 100644 tools/binman/etype/entry.py
>  create mode 100644 tools/binman/etype/intel_cmc.py
>  create mode 100644 tools/binman/etype/intel_descriptor.py
>  create mode 100644 tools/binman/etype/intel_fsp.py
>  create mode 100644 tools/binman/etype/intel_me.py
>  create mode 100644 tools/binman/etype/intel_mrc.py
>  create mode 100644 tools/binman/etype/intel_vga.py
>  create mode 100644 tools/binman/etype/u_boot.py
>  create mode 100644 tools/binman/etype/u_boot_dtb.py
>  create mode 100644 tools/binman/etype/u_boot_dtb_with_ucode.py
>  create mode 100644 tools/binman/etype/u_boot_img.py
>  create mode 100644 tools/binman/etype/u_boot_nodtb.py
>  create mode 100644 tools/binman/etype/u_boot_spl.py
>  create mode 100644 tools/binman/etype/u_boot_spl_bss_pad.py
>  create mode 100644 tools/binman/etype/u_boot_spl_with_ucode_ptr.py
>  create mode 100644 tools/binman/etype/u_boot_ucode.py
>  create mode 100644 tools/binman/etype/u_boot_with_ucode_ptr.py
>  create mode 100644 tools/binman/etype/x86_start16.py
>  create mode 100644 tools/binman/etype/x86_start16_spl.py
>  create mode 100644 tools/binman/fdt_test.py
>  create mode 100644 tools/binman/func_test.py
>  create mode 100644 tools/binman/image.py
>  create mode 100644 tools/binman/test/01_invalid.dts
>  create mode 100644 tools/binman/test/02_missing_node.dts
>  create mode 100644 tools/binman/test/03_empty.dts
>  create mode 100644 tools/binman/test/04_invalid_entry.dts
>  create mode 100644 tools/binman/test/05_simple.dts
>  create mode 100644 tools/binman/test/06_dual_image.dts
>  create mode 100644 tools/binman/test/07_bad_align.dts
>  create mode 100644 tools/binman/test/08_pack.dts
>  create mode 100644 tools/binman/test/09_pack_extra.dts
>  create mode 100644 tools/binman/test/10_pack_align_power2.dts
>  create mode 100644 tools/binman/test/11_pack_align_size_power2.dts
>  create mode 100644 tools/binman/test/12_pack_inv_align.dts
>  create mode 100644 tools/binman/test/13_pack_inv_size_align.dts
>  create mode 100644 tools/binman/test/14_pack_overlap.dts
>  create mode 100644 tools/binman/test/15_pack_overflow.dts
>  create mode 100644 tools/binman/test/16_pack_image_overflow.dts
>  create mode 100644 tools/binman/test/17_pack_image_size.dts
>  create mode 100644 tools/binman/test/18_pack_image_align.dts
>  create mode 100644 tools/binman/test/19_pack_inv_image_align.dts
>  create mode 100644
> tools/binman/test/20_pack_inv_image_align_power2.dts
>  create mode 100644 tools/binman/test/21_image_pad.dts
>  create mode 100644 tools/binman/test/22_image_name.dts
>  create mode 100644 tools/binman/test/23_blob.dts
>  create mode 100644 tools/binman/test/24_sorted.dts
>  create mode 100644 tools/binman/test/25_pack_zero_size.dts
>  create mode 100644 tools/binman/test/26_pack_u_boot_dtb.dts
>  create mode 100644 tools/binman/test/27_pack_4gb_no_size.dts
>  create mode 100644 tools/binman/test/28_pack_4gb_outside.dts
>  create mode 100644 tools/binman/test/29_x86-rom.dts
>  create mode 100644 tools/binman/test/30_x86-rom-me-no-desc.dts
>  create mode 100644 tools/binman/test/31_x86-rom-me.dts
>  create mode 100644 tools/binman/test/32_intel-vga.dts
>  create mode 100644 tools/binman/test/33_x86-start16.dts
>  create mode 100644 tools/binman/test/34_x86_ucode.dts
>  create mode 100644 tools/binman/test/35_x86_single_ucode.dts
>  create mode 100644 tools/binman/test/36_u_boot_img.dts
>  create mode 100644 tools/binman/test/37_x86_no_ucode.dts
>  create mode 100644 tools/binman/test/38_x86_ucode_missing_node.dts
>  create mode 100644 tools/binman/test/39_x86_ucode_missing_node2.dts
>  create mode 100644 tools/binman/test/40_x86_ucode_not_in_image.dts
>  create mode 100644 tools/binman/test/41_unknown_pos_size.dts
>  create mode 100644 tools/binman/test/42_intel-fsp.dts
>  create mode 100644 tools/binman/test/43_intel-cmc.dts
>  create mode 100755 tools/binman/test/u_boot_no_ucode_ptr
>  create mode 100644 tools/binman/test/u_boot_no_ucode_ptr.c
>  create mode 100755 tools/binman/test/u_boot_ucode_ptr
>  create mode 100644 tools/binman/test/u_boot_ucode_ptr.c
>  create mode 100644 tools/binman/test/u_boot_ucode_ptr.lds


More information about the U-Boot mailing list