summaryrefslogtreecommitdiff
path: root/resources/scripts
diff options
context:
space:
mode:
authorLeah Rowe <leah@libreboot.org>2023-05-12 21:53:06 +0100
committerLeah Rowe <leah@libreboot.org>2023-05-12 23:09:39 +0100
commit9eee0fb483e2abf9698ffc3a946304166ec9b1e9 (patch)
tree25087a1ee243c4481e45c3b4545fc5d8cc5724e5 /resources/scripts
parentbceb5f2eb47c9b00d8c0be52adca621588f180d0 (diff)
build/boot/roms: split main() to topdown functions
the logic can now more or less be read chronologically
Diffstat (limited to 'resources/scripts')
-rwxr-xr-xresources/scripts/build/boot/roms_helper504
1 files changed, 283 insertions, 221 deletions
diff --git a/resources/scripts/build/boot/roms_helper b/resources/scripts/build/boot/roms_helper
index c0cf6123..92fc2e4a 100755
--- a/resources/scripts/build/boot/roms_helper
+++ b/resources/scripts/build/boot/roms_helper
@@ -32,6 +32,7 @@ set -u -e
projectname="$(cat projectname)"
cbcfgdir="resources/coreboot"
+boardcfgdir=""
kmapdir="resources/grub/keymap"
displaymodes=""
payloads=""
@@ -46,9 +47,9 @@ arch="undefined"
# Disable all payloads by default.
# board.cfg files have to specifically enable [a] payload(s)
payload_grub="n"
-payload_grub_wseabios="n" # seabios chainloaded from grub
+payload_grub_withseabios="n" # seabios chainloaded from grub
payload_seabios="n"
-payload_seabios_wgrub="n" # i386-coreboot grub from SeaBIOS boot menu
+payload_seabios_withgrub="n" # i386-coreboot grub from SeaBIOS boot menu
payload_memtest="n"
payload_uboot="n"
uboot_config="undefined"
@@ -88,17 +89,37 @@ main()
printf "build/roms: undefined board. Exiting\n"
exit 1
fi
- if [ ! -d "${cbcfgdir}/${board}" ]; then
+
+ load_config
+ build_dependencies
+ build_rom_images
+}
+
+load_config()
+{
+ boardcfgdir="${cbcfgdir}/${board}"
+
+ if [ ! -d "${boardcfgdir}" ]; then
printf "build/roms: Target not defined: %s\n" ${board}
exit 1
fi
- if [ ! -f "${cbcfgdir}/${board}/board.cfg" ]; then
+ if [ ! -f "${boardcfgdir}/board.cfg" ]; then
printf "build/roms %s: Missing board.cfg\n" ${board}
exit 1
fi
- # Override the above defaults using board.cfg
- . "${cbcfgdir}/${board}/board.cfg"
+ . "${boardcfgdir}/board.cfg"
+
+ if [ "${board}" != "${cbtree}" ]; then
+ cbdir="coreboot/${cbtree}"
+ else
+ cbdir="coreboot/${board}"
+ fi
+
+ romdir="bin/${board}"
+ cbfstool="${cbdir}/util/cbfstool/cbfstool"
+ seavgabiosrom="payload/seabios/seavgabios.bin"
+ corebootrom="${cbdir}/build/coreboot.rom"
if [ "${grub_scan_disk}" = "undefined" ]; then
printf "build/roms '%s': grub_scan_disk is undefined. " \
@@ -133,30 +154,16 @@ main()
[ "${payload_memtest}" != "y" ]; then
payload_memtest="n"
fi
- if [ "${payload_grub_wseabios}" = "y" ]; then
+ if [ "${payload_grub_withseabios}" = "y" ]; then
payload_grub="y"
fi
- if [ "${payload_grub_wseabios}" = "y" ]; then
+ if [ "${payload_grub_withseabios}" = "y" ]; then
payload_seabios="y"
- payload_seabios_wgrub="y"
+ payload_seabios_withgrub="y"
fi
- if [ "${payload_seabios_wgrub}" = "y" ]; then
+ if [ "${payload_seabios_withgrub}" = "y" ]; then
payload_seabios="y"
fi
- # NOTE: reverse logic must NOT be applied. If SeaBIOS-with-GRUB works,
- # that doesn't mean GRUB-with-SeaBIOS will. For example, the board
- # might have an external GPU, where SeaBIOS should be booted first
- if [ "${payload_grub}" != "y" ] && [ "${payload_seabios}" != "y" ] \
- && [ "${payload_uboot}" != "y" ]; then
- for configfile in "${cbcfgdir}/${board}/config/"*; do
- if [ ! -e "${configfile}" ]; then
- continue
- fi
- printf "build/roms %s: Payload undefined. Exiting.\n" \
- ${board}
- exit 1
- done
- fi
if [ "${payload_uboot}" != "n" ] && \
[ "${payload_uboot}" != "y" ]; then
payload_uboot="n"
@@ -165,13 +172,20 @@ main()
[ "${uboot_config}" = "undefined" ]; then
uboot_config="default"
fi
+
+ load_config_overrides
+ die_if_cbconfig_and_nopayload
+}
+
+load_config_overrides()
+{
# Override all payload directives with cmdline args
if [ ! -z ${payloads} ]; then
echo "setting payloads $payloads"
payload_grub="n"
- payload_grub_wseabios="n" # seabios chainloaded from grub
+ payload_grub_withseabios="n" # seabios chainloaded from grub
payload_seabios="n"
- payload_seabios_wgrub="n" # grub from SeaBIOS menu
+ payload_seabios_withgrub="n" # grub from SeaBIOS menu
payload_uboot="n"
payload_memtest="n"
@@ -179,21 +193,46 @@ main()
eval "payload_${payload}=y"
done
fi
+}
- romdir="bin/${board}"
- cbdir="coreboot/${board}"
- if [ "${board}" != "${cbtree}" ]; then
- cbdir="coreboot/${cbtree}"
+die_if_cbconfig_and_nopayload()
+{
+ # if a coreboot config exists, and payloads are not
+ # defined in the lbmk config, exit with error
+ # if no configs exist, this won't fail. this way, cbtrees
+ # like "default" can exist which just contain patches
+ if [ "${payload_grub}" != "y" ] && [ "${payload_seabios}" != "y" ] \
+ && [ "${payload_uboot}" != "y" ]; then
+ for configfile in "${boardcfgdir}/config/"*; do
+ if [ ! -e "${configfile}" ]; then
+ continue
+ fi
+ printf "build/roms %s: Payload undefined. Exiting.\n" \
+ ${board}
+ exit 1
+ done
fi
- cbfstool="${cbdir}/util/cbfstool/cbfstool"
- corebootrom="${cbdir}/build/coreboot.rom"
- seavgabiosrom="payload/seabios/seavgabios.bin"
+}
+build_dependencies()
+{
if [ ! -d "${cbdir}" ]; then
./download coreboot ${cbtree}
fi
+ if [ ! -f "${cbfstool}" ]; then
+ ./build module cbutils ${cbtree} || exit 1
+ fi
cat version > "${cbdir}/.coreboot-version"
+ build_dependency_crossgcc
+
+ build_dependency_seabios
+ build_dependency_grub
+ build_dependency_uboot
+}
+
+build_dependency_crossgcc()
+{
if [ "${arch}" = "x86_32" ] || [ "${arch}" = "x86_64" ]; then
if [ ! -d "${cbdir}/util/crossgcc/xgcc/i386-elf/" ]; then
# Even for 64-bit machines, coreboot builds 32-bit ROM
@@ -227,10 +266,10 @@ main()
fi
export PATH="$(pwd)/${cbdir}/util/crossgcc/xgcc/bin:$PATH"
+}
- if [ ! -f "${cbfstool}" ]; then
- ./build module cbutils ${cbtree} || exit 1
- fi
+build_dependency_seabios()
+{
if [ ! -f "${seavgabiosrom}" ] \
|| [ ! -f payload/seabios/seabios_libgfxinit.elf ] \
|| [ ! -f payload/seabios/seabios_vgarom.elf ] \
@@ -238,7 +277,7 @@ main()
if [ "${payload_seabios}" = "y" ]; then
./build payload seabios
elif [ "${payload_grub}" = "y" ] \
- && [ "${payload_grub_wseabios}" = "y" ]
+ && [ "${payload_grub_withseabios}" = "y" ]
then
./build payload seabios
fi
@@ -248,12 +287,13 @@ main()
./build module memtest86plus
fi
fi
+}
- [ -d "${romdir}/" ] || mkdir -p "${romdir}/"
- rm -f "${romdir}"/*
-
+build_dependency_grub()
+{
if [ "${payload_grub}" = "y" ] \
- || [ "${payload_seabios_wgrub}" = "y" ]; then
+ || [ "${payload_seabios_withgrub}" = "y" ]
+ then
if [ -f "payload/grub/grub_usqwerty.cfg" ]; then
sha1cmd="sha1sum resources/grub/config/grub.cfg"
grubrefchecksum="$(${sha1cmd} | awk '{print $1}')"
@@ -287,7 +327,10 @@ main()
fi
done
fi
+}
+build_dependency_uboot()
+{
if [ "${payload_uboot}" = "y" ]; then
ubdir=""
if [ "${uboot_config}" = "default" ]; then
@@ -306,32 +349,38 @@ main()
./build payload u-boot "${board}"
fi
fi
+}
+
+build_rom_images()
+{
+ [ -d "${romdir}/" ] || mkdir -p "${romdir}/"
+ rm -f "${romdir}"/*
if [ -z ${displaymodes} ]; then
initmode="libgfxinit"
for displaymode in corebootfb txtmode; do
- _cbcfg="${cbcfgdir}/${board}/config/${initmode}"
+ _cbcfg="${boardcfgdir}/config/${initmode}"
_cbcfg="${_cbcfg}_${displaymode}"
mkRoms "${_cbcfg}" "${displaymode}" "${initmode}"
done
initmode="vgarom"
for displaymode in vesafb txtmode; do
- _cbcfg="${cbcfgdir}/${board}/config/${initmode}"
+ _cbcfg="${boardcfgdir}/config/${initmode}"
_cbcfg="${_cbcfg}_${displaymode}"
mkRoms "${_cbcfg}" "${displaymode}" "${initmode}"
done
initmode="normal"
displaymode="txtmode"
- _cbcfg="${cbcfgdir}/${board}/config/${initmode}"
+ _cbcfg="${boardcfgdir}/config/${initmode}"
mkRoms "${_cbcfg}" "${displaymode}" "${initmode}"
else
echo "special displaymode defined as $displaymodes"
for initmode in vgarom libgfxinit; do
for displaymode in ${displaymodes}; do
- _cbcfg="${cbcfgdir}/${board}/config/"
+ _cbcfg="${boardcfgdir}/config/"
_cbcfg="${_cbcfg}${initmode}_${displaymode}"
mkRoms "${_cbcfg}" "${displaymode}" \
"${initmode}"
@@ -345,52 +394,76 @@ main()
)
}
-# it is assumed that no other work will be done on the ROM
-# after calling this function. therefore this function is "final"
-moverom()
+# Main ROM building function. This calls all other functions
+mkRoms()
{
- rompath="$1"
- _newrom="$2"
- cuttype="$3"
+ _cbcfg="${1}"
+ displaymode="${2}"
+ initmode="${3}"
- printf "\nCreating new ROM image: %s\n" "${_newrom}"
+ if [ ! -f "${_cbcfg}" ]; then
+ printf "'%s' does not exist. Skipping build for %s %s %s\n" \
+ ${_cbcfg} ${board} \
+ ${displaymode} ${initmode}
+ return 0
+ fi
- if [ "${cuttype}" = "4MiB IFD BIOS region" ]; then
- dd if=${rompath} of=${_newrom} bs=1 \
- skip=$(($(stat -c %s ${rompath}) - 0x400000)) \
- count=4194304
- else
- cp ${rompath} ${_newrom}
+ # make coreboot ROM without a payload in it
+ mkCoreboot "${cbdir}" "${_cbcfg}"
+
+ # now add payloads, per user config:
+
+ if [ "${displaymode}" = "txtmode" ] \
+ && [ "${payload_memtest}" = "y" ]; then
+ "${cbfstool}" "${corebootrom}" add-payload \
+ -f memtest86plus/memtest -n img/memtest \
+ -c lzma || exit 1
fi
- for romsize in 4 8 16; do
- ifdgbe="descriptors/ich9m/ich9fdgbe_${romsize}m.bin"
- if [ "${cuttype}" = "${romsize}MiB ICH9 IFD NOR flash" ]; then
- if [ ! -f "${ifdgbe}" ]; then
- ./build descriptors ich9m
+ if [ "${payload_seabios}" = "y" ]; then
+ if [ "${payload_seabios_withgrub}" = "n" ]; then
+ x=${corebootrom}
+ y=${initmode}
+ t=$(mkSeabiosRom "$x" "fallback/payload" "$y")
+
+ _newrom="${romdir}/seabios_${board}_${initmode}.rom"
+ if [ "${initmode}" != "normal" ]; then
+ _newrom="${_newrom%.rom}_${displaymode}.rom"
fi
- dd if=${ifdgbe} of=${_newrom} bs=1 count=12k \
- conv=notrunc
+
+ # rom image ready to be flashed:
+ moverom "${t}" "${_newrom}" "${romtype}"
+ rm -f "${t}"
+ else
+ tmprom=$(mktemp -t coreboot_rom.XXXXXXXXXX)
+ cp "${corebootrom}" "${tmprom}"
+ mkRomsWithGrub "${tmprom}" "${initmode}" \
+ "${displaymode}" "seabios_withgrub"
+ rm -f "${tmprom}"
fi
- cmpstr="${romsize}MiB ICH9 IFD NOGBE NOR flash"
- ifdgbe="descriptors/ich9m/ich9fdnogbe_${romsize}m.bin"
- if [ "${cuttype}" = "${cmpstr}" ]; then
- if [ ! -f "${ifdgbe}" ]; then
- ./build descriptors ich9m
- fi
- dd if=${ifdgbe} of=${_newrom} bs=1 count=4k \
- conv=notrunc
+ fi
+
+ if [ "${payload_grub}" = "y" ]; then
+ mkRomsWithGrub "${corebootrom}" "${initmode}" \
+ "${displaymode}" "grub"
+ fi
+
+ if [ "${payload_uboot}" = "y" ]; then
+ x=${corebootrom}
+ y=${uboot_config}
+ z=${cbfstool}
+ tmpubootrom="$(mkUbootRom "$x" "fallback/payload" "$y" "$z")"
+ if [ "${initmode}" = "normal" ]; then
+ _newrom="${romdir}/uboot_payload_${board}_"
+ _newrom="${_newrom}${initmode}.rom"
+ else
+ _newrom="${romdir}/uboot_payload_${board}_"
+ _newrom="${_newrom}${initmode}_${displaymode}.rom"
fi
- done
- if [ "${cuttype}" = "i945 laptop" ]; then
- dd if=${_newrom} of=top64k.bin bs=1 \
- skip=$(($(stat -c %s ${_newrom}) - 0x10000)) \
- count=64k
- dd if=top64k.bin of=${_newrom} bs=1 \
- seek=$(($(stat -c %s ${_newrom}) - 0x20000)) \
- count=64k conv=notrunc
- rm -f top64k.bin
+ # rom image ready to be flashed:
+ moverom "${tmpubootrom}" "${_newrom}" "${romtype}"
+ rm -f "${tmpubootrom}"
fi
}
@@ -398,33 +471,37 @@ moverom()
mkCoreboot()
{
cbdir="${1}" # eg. coreboot/default
- _cbcfg="${2}" # eg. ${cbcfgdir}/e6400nvidia_4mb/config/normal
+ _cbcfg="${2}" # eg. resources/coreboot/e6400nvidia_4mb/config/normal
+
if [ ! -f "${_cbcfg}" ]; then
printf "\nmkCoreboot: coreboot config '%s' does not exist. " \
${_cbcfg}
printf "Skipping build.\n"
return 0
fi
+
printf "%s-%s\n" "$(cat projectname)" "$(cat version)" \
> "${cbdir}/.coreboot-version"
- (
- if [ -f "${cbfstool}" ]; then
- mv "${cbfstool}" "${cbdir}/cbfstool"
- fi
- cd "${cbdir}"
- make distclean
- cd -
+ (
+ if [ -f "${cbfstool}" ]; then
+ mv "${cbfstool}" "${cbdir}/cbfstool"
+ fi
+ cd "${cbdir}"
+ make distclean
+ cd -
- if [ -f "${cbdir}/cbfstool" ]; then
- mv "${cbdir}/cbfstool" "${cbfstool}"
- fi
+ if [ -f "${cbdir}/cbfstool" ]; then
+ mv "${cbdir}/cbfstool" "${cbfstool}"
+ fi
)
+
cp "${_cbcfg}" "${cbdir}"/.config
./build module cbutils ${cbdir#coreboot/} || exit 1
+
(
- cd "${cbdir}"
- make -j$(nproc)
+ cd "${cbdir}"
+ make -j$(nproc)
)
}
@@ -468,34 +545,66 @@ mkSeabiosRom()
printf "%s\n" "${tmprom}"
}
-# make a rom in /tmp/ and then print the path of that ROM
-mkUbootRom()
+# Make separate ROM images with GRUB payload, for each supported keymap
+mkRomsWithGrub()
{
- target_cbrom="${1}" # rom to insert u-boot in. it won't be touched
- # (a tmpfile will be made instead)
- target_uboot_cbfs_path="${2}" # e.g. fallback/payload
- target_uboot_config="${3}"
- cbfstool_path="${4}"
+ tmprompath="${1}"
+ initmode="${2}"
+ displaymode="${3}"
+ firstpayloadname="${4}" # allow values: grub, seabios, seabios_withgrub
- if [ "${target_uboot_config}" = "default" ]; then
- target_ubdir="payload/u-boot/${board}"
- else
- target_ubdir="payload/u-boot/${board}/${target_uboot_config}"
+ x=${tmprompath}
+ y=${initmode}
+ if [ "${payload_grub_withseabios}" = "y" ] \
+ && [ "${firstpayloadname}" = "grub" ]; then
+ mv "$(mkSeabiosRom "${x}" "seabios.elf" "${y}")" \
+ "${tmprompath}"
+ elif [ "${payload_seabios_withgrub}" ] \
+ && [ "${firstpayloadname}" != "grub" ]; then
+ mv "$(mkSeabiosRom "${x}" "fallback/payload" "${y}")" \
+ "${tmprompath}"
fi
- if [ -f "${target_ubdir}/u-boot.elf" ]; then
- target_ubootelf="${target_ubdir}/u-boot.elf"
- elif [ -f "${target_ubdir}/u-boot" ]; then
- target_ubootelf="${target_ubdir}/u-boot"
+ keymaps=""
+ if [ -z ${keyboard_layouts} ]; then
+ for kmapfile in "${kmapdir}"/*; do
+ keymaps="${keymaps} ${kmapfile}"
+ done
+ else
+ for keymapname in ${keyboard_layouts}; do
+ keymaps="${keymaps} ${kmapdir}/${keymapname}.gkb"
+ done
fi
+ for keymapfile in ${keymaps}; do
+ if [ ! -f "${keymapfile}" ]; then
+ continue
+ fi
- tmprom=$(mktemp -t coreboot_rom.XXXXXXXXXX)
+ keymap="${keymapfile##*/}"
+ keymap="${keymap%.gkb}"
- cp "${target_cbrom}" "${tmprom}"
- "${cbfstool}" "${tmprom}" add-payload -f "${target_ubootelf}" \
- -n ${target_uboot_cbfs_path} -c lzma || exit 1
+ grub_path_in_cbfs="fallback/payload"
+ if [ "${firstpayloadname}" != "grub" ]; then
+ grub_path_in_cbfs="img/grub2"
+ fi
- printf "%s\n" "${tmprom}"
+ # evil bofh rfc 2646 compliance hack
+ x=${keymap}
+ y=${tmprompath}
+ z=${grub_path_in_cbfs}
+ tmpgrubrom="$(mkGrubRom "${x}" "${y}" "${z}")"
+
+ _newrom="${romdir}/${firstpayloadname}_${board}_${initmode}_"
+ if [ "${initmode}" = "normal" ]; then
+ _newrom="${_newrom}${keymap}.rom"
+ else
+ _newrom="${_newrom}${displaymode}_${keymap}.rom"
+ fi
+
+ # rom image ready to be flashed:
+ moverom "${tmpgrubrom}" "${_newrom}" "${romtype}"
+ rm -f "${tmpgrubrom}"
+ done
}
# make a rom in /tmp/ and then print the path of that ROM
@@ -510,6 +619,7 @@ mkGrubRom()
grubtestcfg="payload/grub/grub_${target_keymap}_test.cfg"
tmprom=$(mktemp -t coreboot_rom.XXXXXXXXXX) || exit 1
+
cp "${target_cbrom}" "${tmprom}" || exit 1
"${cbfstool}" "${tmprom}" add-payload -f "${grubelf}" \
@@ -554,130 +664,82 @@ mkGrubRom()
printf "%s\n" "${tmprom}"
}
-# Make separate ROM images with GRUB payload, for each supported keymap
-mkRomsWithGrub()
+# make a rom in /tmp/ and then print the path of that ROM
+mkUbootRom()
{
- tmprompath="${1}"
- initmode="${2}"
- displaymode="${3}"
- firstpayloadname="${4}" # allow values: grub, seabios, seabios_wgrub
-
- x=${tmprompath}
- y=${initmode}
- if [ "${payload_grub_wseabios}" = "y" ] \
- && [ "${firstpayloadname}" = "grub" ]; then
- mv "$(mkSeabiosRom "${x}" "seabios.elf" "${y}")" \
- "${tmprompath}"
- elif [ "${payload_seabios_wgrub}" ] \
- && [ "${firstpayloadname}" != "grub" ]; then
- mv "$(mkSeabiosRom "${x}" "fallback/payload" "${y}")" \
- "${tmprompath}"
- fi
+ target_cbrom="${1}" # rom to insert u-boot in. it won't be touched
+ # (a tmpfile will be made instead)
+ target_uboot_cbfs_path="${2}" # e.g. fallback/payload
+ target_uboot_config="${3}"
+ cbfstool_path="${4}"
- keymaps=""
- if [ -z ${keyboard_layouts} ]; then
- for kmapfile in "${kmapdir}"/*; do
- keymaps="${keymaps} ${kmapfile}"
- done
+ if [ "${target_uboot_config}" = "default" ]; then
+ target_ubdir="payload/u-boot/${board}"
else
- for keymapname in ${keyboard_layouts}; do
- keymaps="${keymaps} ${kmapdir}/${keymapname}.gkb"
- done
+ target_ubdir="payload/u-boot/${board}/${target_uboot_config}"
fi
- for keymapfile in ${keymaps}; do
- if [ ! -f "${keymapfile}" ]; then
- continue
- fi
- keymap="${keymapfile##*/}"
- keymap="${keymap%.gkb}"
+ if [ -f "${target_ubdir}/u-boot.elf" ]; then
+ target_ubootelf="${target_ubdir}/u-boot.elf"
+ elif [ -f "${target_ubdir}/u-boot" ]; then
+ target_ubootelf="${target_ubdir}/u-boot"
+ fi
- grub_path_in_cbfs="fallback/payload"
- if [ "${firstpayloadname}" != "grub" ]; then
- grub_path_in_cbfs="img/grub2"
- fi
+ tmprom=$(mktemp -t coreboot_rom.XXXXXXXXXX)
- # evil bofh rfc 2646 compliance hack
- x=${keymap}
- y=${tmprompath}
- z=${grub_path_in_cbfs}
- tmpgrubrom="$(mkGrubRom "${x}" "${y}" "${z}")"
+ cp "${target_cbrom}" "${tmprom}"
+ "${cbfstool}" "${tmprom}" add-payload -f "${target_ubootelf}" \
+ -n ${target_uboot_cbfs_path} -c lzma || exit 1
- _newrom="${romdir}/${firstpayloadname}_${board}_${initmode}_"
- if [ "${initmode}" = "normal" ]; then
- _newrom="${_newrom}${keymap}.rom"
- else
- _newrom="${_newrom}${displaymode}_${keymap}.rom"
- fi
- moverom "${tmpgrubrom}" "${_newrom}" "${romtype}"
- rm -f "${tmpgrubrom}"
- done
+ printf "%s\n" "${tmprom}"
}
-# Main ROM building function. This calls all other functions
-mkRoms()
+# it is assumed that no other work will be done on the ROM
+# after calling this function. therefore this function is "final"
+moverom()
{
- _cbcfg="${1}"
- displaymode="${2}"
- initmode="${3}"
-
- if [ ! -f "${_cbcfg}" ]; then
- printf "'%s' does not exist. Skipping build for %s %s %s\n" \
- ${_cbcfg} ${board} \
- ${displaymode} ${initmode}
- return 0
- fi
+ rompath="$1"
+ _newrom="$2"
+ cuttype="$3"
- mkCoreboot "${cbdir}" "${_cbcfg}"
+ printf "\nCreating new ROM image: %s\n" "${_newrom}"
- if [ "${displaymode}" = "txtmode" ] \
- && [ "${payload_memtest}" = "y" ]; then
- "${cbfstool}" "${corebootrom}" add-payload \
- -f memtest86plus/memtest -n img/memtest \
- -c lzma || exit 1
+ if [ "${cuttype}" = "4MiB IFD BIOS region" ]; then
+ dd if=${rompath} of=${_newrom} bs=1 \
+ skip=$(($(stat -c %s ${rompath}) - 0x400000)) \
+ count=4194304
+ else
+ cp ${rompath} ${_newrom}
fi
- if [ "${payload_seabios}" = "y" ]; then
- if [ "${payload_seabios_wgrub}" = "n" ]; then
- x=${corebootrom}
- y=${initmode}
- t=$(mkSeabiosRom "$x" "fallback/payload" "$y")
-
- _newrom="${romdir}/seabios_${board}_${initmode}.rom"
- if [ "${initmode}" != "normal" ]; then
- _newrom="${_newrom%.rom}_${displaymode}.rom"
+ for romsize in 4 8 16; do
+ ifdgbe="descriptors/ich9m/ich9fdgbe_${romsize}m.bin"
+ if [ "${cuttype}" = "${romsize}MiB ICH9 IFD NOR flash" ]; then
+ if [ ! -f "${ifdgbe}" ]; then
+ ./build descriptors ich9m
fi
-
- moverom "${t}" "${_newrom}" "${romtype}"
- rm -f "${t}"
- else
- tmprom=$(mktemp -t coreboot_rom.XXXXXXXXXX)
- cp "${corebootrom}" "${tmprom}"
- mkRomsWithGrub "${tmprom}" "${initmode}" \
- "${displaymode}" "seabios_withgrub"
- rm -f "${tmprom}"
+ dd if=${ifdgbe} of=${_newrom} bs=1 count=12k \
+ conv=notrunc
fi
- fi
-
- if [ "${payload_grub}" = "y" ]; then
- mkRomsWithGrub "${corebootrom}" "${initmode}" \
- "${displaymode}" "grub"
- fi
-
- if [ "${payload_uboot}" = "y" ]; then
- x=${corebootrom}
- y=${uboot_config}
- z=${cbfstool}
- tmpubootrom="$(mkUbootRom "$x" "fallback/payload" "$y" "$z")"
- if [ "${initmode}" = "normal" ]; then
- _newrom="${romdir}/uboot_payload_${board}_"
- _newrom="${_newrom}${initmode}.rom"
- else
- _newrom="${romdir}/uboot_payload_${board}_"
- _newrom="${_newrom}${initmode}_${displaymode}.rom"
+ cmpstr="${romsize}MiB ICH9 IFD NOGBE NOR flash"
+ ifdgbe="descriptors/ich9m/ich9fdnogbe_${romsize}m.bin"
+ if [ "${cuttype}" = "${cmpstr}" ]; then
+ if [ ! -f "${ifdgbe}" ]; then
+ ./build descriptors ich9m
+ fi
+ dd if=${ifdgbe} of=${_newrom} bs=1 count=4k \
+ conv=notrunc
fi
- moverom "${tmpubootrom}" "${_newrom}" "${romtype}"
- rm -f "${tmpubootrom}"
+ done
+
+ if [ "${cuttype}" = "i945 laptop" ]; then
+ dd if=${_newrom} of=top64k.bin bs=1 \
+ skip=$(($(stat -c %s ${_newrom}) - 0x10000)) \
+ count=64k
+ dd if=top64k.bin of=${_newrom} bs=1 \
+ seek=$(($(stat -c %s ${_newrom}) - 0x20000)) \
+ count=64k conv=notrunc
+ rm -f top64k.bin
fi
}