[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