From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcel Ziswiler Date: Tue, 1 Nov 2016 22:19:26 +0000 Subject: [U-Boot] [PATCH v4 00/11] binman: A tool for creating firmware images In-Reply-To: <1475787582-32106-1-git-send-email-sjg@chromium.org> References: <1475787582-32106-1-git-send-email-sjg@chromium.org> Message-ID: <1478038766.30828.10.camel@toradex.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 -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