[U-Boot] [PATCH v2] Makefile: fix broken pipe error for lcd4_lwmon5 board

Masahiro Yamada yamada.m at jp.panasonic.com
Wed Dec 18 11:00:51 CET 2013


Before this commit, a broken pipe error sometimes happened
when building lcd4_lwmon5 board with Buildman.

This commit re-writes build rules of
u-boot.spr and u-boot-img-spl-at-end.bin
more simply without using a pipe.

Besides fixing a broken pipe error,
this commit gives us other advantages:

  - Do not generate intermidiate files, spl/u-boot-spl.img
    and spl/u-boot-spl-pad.img for creating u-boot.spr

  - Do not generate an intermidiate file, u-boot-pad.img
    for creating u-boot-img-spl-at-end.bin

Such intermidiate files were not deleted by "make clean" or "make mrpropr".
Nor u-boot-pad.img was ignored by git.

Signed-off-by: Masahiro Yamada <yamada.m at jp.panasonic.com>
Acked-by: Stefan Roese <sr at denx.de>
---

Hello Simon.

I noticed a broken pipe error when I was using Buildman.
The error happens here:

  $(obj)u-boot-img-spl-at-end.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.img
		tr "\000" "\377" < /dev/zero | dd ibs=1 count=$(CONFIG_UBOOT_PAD_TO) \
			of=$(obj)u-boot-pad.img 2>/dev/null

I cannot understand why this error happens on Buildman.
(I have never seen it on MAKEALL script.)
Does the same error happen on your machine too?
Do you have any idea why this error happen?

What I did is as follows:

  $ git checkout master

  $ git describe
  v2014.01-rc2

  $ git checkout -b cosmetic

    Add many cosmetic commits. Do not change any source files.
    (For example, changing README files)
    I think about 20 commits are enough.

  $ git branch --set-upstream-to=master

  $ tool/buildman/buildman -b cosmetic lcd4_lwmon5
  No section: 'make-flags'
  Building 21 commits for 1 boards (1 thread, 8 jobs per thread)
  Cloning repo for thread 0
     14    7    0 /21     lcd4_lwmon5

  $ tools/buildman/buildman -se -b cosmetic
  No section: 'make-flags'
  Summary of 21 commits for 1194 boards (8 threads, 1 job per thread)
  01: Prepare v2014.01-rc2
     powerpc: +   lcd4_lwmon5
  +tr: write error: Broken pipe
  +tr: write error
  02: cosmetic1
     powerpc:    lcd4_lwmon5
  -tr: write error: Broken pipe
  -tr: write error
  03: cosmetic2
  04: cosmetic3
  05: cosmetic4
  06: cosmetic5
  07: cosmetic6
  08: cosmetic7
  09: cosmetic8
  10: cosmetic9
  11: cosmetic10
  12: cosmetic11
  13: cosmetic12
  14: cosmetic13
  15: cosmetic14
  16: cosmetic15
     powerpc: +   lcd4_lwmon5
  +tr: write error: Broken pipe
  +tr: write error
  17: cosmetic16
  18: cosmetic17
  19: cosmetic18
  20: cosmetic19
  21: cosmetic20

Here, a broken pipe error occurred at 01 and fixed at 02.
It happend again at 16.

But the result changes every time.
The error happens randomly.


Changes in v2:
  - Delete an unnecessary line
           cp $(obj)u-boot.img $@

 Makefile | 18 +++++++-----------
 1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/Makefile b/Makefile
index f03d116..c9d372b 100644
--- a/Makefile
+++ b/Makefile
@@ -471,12 +471,10 @@ $(obj)u-boot.sb:       $(obj)u-boot.bin $(obj)spl/u-boot-spl.bin
 $(obj)u-boot.spr:	$(obj)u-boot.img $(obj)spl/u-boot-spl.bin
 		$(obj)tools/mkimage -A $(ARCH) -T firmware -C none \
 		-a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE) -n XLOADER \
-		-d $(obj)spl/u-boot-spl.bin $(obj)spl/u-boot-spl.img
-		tr "\000" "\377" < /dev/zero | dd ibs=1 count=$(CONFIG_SPL_PAD_TO) \
-			of=$(obj)spl/u-boot-spl-pad.img 2>/dev/null
-		dd if=$(obj)spl/u-boot-spl.img of=$(obj)spl/u-boot-spl-pad.img \
-			conv=notrunc 2>/dev/null
-		cat $(obj)spl/u-boot-spl-pad.img $(obj)u-boot.img > $@
+		-d $(obj)spl/u-boot-spl.bin $@
+		$(OBJCOPY) -I binary -O binary \
+			--pad-to=$(CONFIG_SPL_PAD_TO) --gap-fill=0xff $@
+		cat $(obj)u-boot.img >> $@
 
 ifneq ($(CONFIG_TEGRA),)
 $(obj)u-boot-nodtb-tegra.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
@@ -499,11 +497,9 @@ $(obj)u-boot-img.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.img
 # at the start padded up to the start of the SPL image. And then concat
 # the SPL image to the end.
 $(obj)u-boot-img-spl-at-end.bin: $(obj)spl/u-boot-spl.bin $(obj)u-boot.img
-		tr "\000" "\377" < /dev/zero | dd ibs=1 count=$(CONFIG_UBOOT_PAD_TO) \
-			of=$(obj)u-boot-pad.img 2>/dev/null
-		dd if=$(obj)u-boot.img of=$(obj)u-boot-pad.img \
-			conv=notrunc 2>/dev/null
-		cat $(obj)u-boot-pad.img $(obj)spl/u-boot-spl.bin > $@
+		$(OBJCOPY) -I binary -O binary --pad-to=$(CONFIG_UBOOT_PAD_TO) \
+			 --gap-fill=0xff $(obj)u-boot.img $@
+		cat $(obj)spl/u-boot-spl.bin >> $@
 
 ifeq ($(CONFIG_SANDBOX),y)
 GEN_UBOOT = \
-- 
1.8.3.2



More information about the U-Boot mailing list