diff options
author | Leah Rowe <leah@libreboot.org> | 2023-05-12 21:53:06 +0100 |
---|---|---|
committer | Leah Rowe <leah@libreboot.org> | 2023-05-12 23:09:39 +0100 |
commit | 9eee0fb483e2abf9698ffc3a946304166ec9b1e9 (patch) | |
tree | 25087a1ee243c4481e45c3b4545fc5d8cc5724e5 /resources/scripts | |
parent | bceb5f2eb47c9b00d8c0be52adca621588f180d0 (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-x | resources/scripts/build/boot/roms_helper | 504 |
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 } |