diff options
-rw-r--r-- | config/data/coreboot/build.list | 1 | ||||
-rw-r--r-- | config/data/coreboot/mkhelper.cfg | 4 | ||||
-rw-r--r-- | include/lib.sh | 18 | ||||
-rw-r--r-- | include/rom.sh | 25 |
4 files changed, 45 insertions, 3 deletions
diff --git a/config/data/coreboot/build.list b/config/data/coreboot/build.list new file mode 100644 index 00000000..f6535149 --- /dev/null +++ b/config/data/coreboot/build.list @@ -0,0 +1 @@ +build/coreboot.rom diff --git a/config/data/coreboot/mkhelper.cfg b/config/data/coreboot/mkhelper.cfg index 743d7c5b..d4de718e 100644 --- a/config/data/coreboot/mkhelper.cfg +++ b/config/data/coreboot/mkhelper.cfg @@ -12,5 +12,5 @@ eval `setvars "n" $pv` eval `setvars "" $v` premake="corebootpremake" -mkhelper="mkcorebootbin" -postmake="mkcoreboottar" +mkhelper="coreboot_pad_one_byte" +postmake="mkcorebootbin" diff --git a/include/lib.sh b/include/lib.sh index 911d9c4d..6fc3bd1e 100644 --- a/include/lib.sh +++ b/include/lib.sh @@ -95,6 +95,24 @@ findpath() done } +pad_one_byte() +{ + paddedfile="`mktemp`" || err "mktemp pad_one_byte" + x_ cp "$1" "$paddedfile" + cat "$paddedfile" config/data/coreboot/0 > "$1" || err "!pad $1"; : + x_ rm "$paddedfile" +} + +unpad_one_byte() +{ + xromsize="$(expr $(stat -c '%s' "$1") - 1)" || err "!int" + [ $xromsize -lt 524288 ] && err "too small, $xromsize: $1" + + unpaddedfile="`mktemp`" || err "mktemp unpad_one_byte" + x_ dd if="$1" of="$unpaddedfile" bs=$xromsize count=1 + x_ mv "$unpaddedfile" "$1" +} + fx_() { fd="`mktemp`" && x_ rm -f "$fd" && x_ touch "$fd" diff --git a/include/rom.sh b/include/rom.sh index c88d0c69..65149ce5 100644 --- a/include/rom.sh +++ b/include/rom.sh @@ -74,12 +74,28 @@ check_coreboot_util() x_ cp "$utilsrcdir/rmodtool" "$utilelfdir" } +coreboot_pad_one_byte() +{ + $dry pad_one_byte "$srcdir/build/coreboot.rom" +} + mkcorebootbin() { + fx_ check_coreboot_util printf "cbfstool\nifdtool\n" + + for y in "$target_dir/config"/*; do + defconfig="$y" + mkcorebootbin_real + done + + mkcoreboottar +} + +mkcorebootbin_real() +{ [ "$target" = "$tree" ] && return 0 tmprom="$xbtmp/coreboot.rom" - $dry x_ cp "$srcdir/build/coreboot.rom" "$tmprom" initmode="${defconfig##*/}" displaymode="${initmode##*_}" @@ -87,6 +103,13 @@ mkcorebootbin() initmode="${initmode%%_*}" cbfstool="elf/coreboot/$tree/cbfstool" + elfrom="elf/coreboot/$tree/$target/$initmode" + [ -n "$displaymode" ] && elfrom="${elfrom}_$displaymode" + elfrom="$elfrom/coreboot.rom" + + $dry x_ cp "$elfrom" "$tmprom" + $dry unpad_one_byte "$tmprom" + [ -z "$payload_uboot" ] || [ "$payload_uboot" = "amd64" ] || \ [ "$payload_uboot" = "i386" ] || [ "$payload_uboot" = "arm64" ] \ || err "'$target' defines bad u-boot type '$payload_uboot'" |