diff options
Diffstat (limited to 'script/build/boot/roms_helper')
-rwxr-xr-x | script/build/boot/roms_helper | 134 |
1 files changed, 51 insertions, 83 deletions
diff --git a/script/build/boot/roms_helper b/script/build/boot/roms_helper index 5dea7fc0..64de5843 100755 --- a/script/build/boot/roms_helper +++ b/script/build/boot/roms_helper @@ -68,6 +68,8 @@ displaymode="" cbcfg="" targetdir="" +grubelf="elf/grub/grub.elf" + main() { while [ $# -gt 0 ]; do @@ -215,34 +217,21 @@ build_dependency_grub() [ "${payload_grub}" != "y" ] && \ [ "${payload_seabios_withgrub}" != "y" ] && return 0 - if [ -f "elf/grub/grub_usqwerty.cfg" ]; then - sha1sumcmd="sha1sum resources/grub/config/grub.cfg" - grubrefchecksum="$(${sha1sumcmd} | awk '{print $1}')" - - sha1sumcmd="sha1sum elf/grub/grub_usqwerty.cfg" - grubbuildchecksum="$(${sha1sumcmd} | awk '{print $1}')" - - [ "${grubrefchecksum}" != "${grubbuildchecksum}" ] && \ - printf "GRUB change detected. Re-building.\n" 1>&2 - else - printf "GRUB not built yet. Building now.\n" 1>&2 - fi - for keymapfile in "${kmapdir}"/*; do + rebuild_grub="n" + [ ! -f "${grubelf}" ] && rebuild_grub="y" + for keymapfile in "${kmapdir}"/*.gkb; do + [ "${rebuild_grub}" = "y" ] || break [ -f "${keymapfile}" ] || continue keymap="${keymapfile##*/}" keymap="${keymap%.gkb}" - - grubelf="elf/grub/grub_${keymap}.elf" - grubcfg="elf/grub/grub_${keymap}.cfg" - grubtestcfg="elf/grub/grub_${keymap}_test.cfg" - - if [ ! -f "${grubelf}" ] || [ ! -f "${grubcfg}" ] || \ - [ ! -f "${grubtestcfg}" ]; then - ./build grub payload || \ - err "cannot build grub payload" - fi + [ ! -f "elf/grub/keymap_${keymap}.cfg" ] && \ + rebuild_grub="y" && break done + if [ "${rebuild_grub}" = "y" ]; then + ./build grub payload || \ + err "build_dependency_grub: cannot build grub payload" + fi } build_dependency_uboot() @@ -324,7 +313,8 @@ build_seabios_roms() { if [ "${payload_seabios_withgrub}" = "y" ]; then tmprom=$(mktemp -t coreboot_rom.XXXXXXXXXX) - cp "${corebootrom}" "${tmprom}" + cp "${corebootrom}" "${tmprom}" || \ + err "build_seabios_roms: cannot copy to tmprom" build_grub_roms "${tmprom}" "${initmode}" \ "${displaymode}" "seabios_withgrub" || \ err "build_roms: cannot build grub roms, seabios w/grub" @@ -356,18 +346,50 @@ build_grub_roms() { displaymode="${3}" firstpayloadname="${4}" # allow values: grub, seabios, seabios_withgrub + grubelf_cbfs="fallback/payload" + x=${tmprompath} y=${initmode} if [ "${payload_grub_withseabios}" = "y" ] && \ [ "${firstpayloadname}" = "grub" ]; then mv "$(mkSeabiosRom "${x}" "seabios.elf" "${y}")" "${tmprompath}" - elif [ "${payload_seabios_withgrub}" ] && \ + elif [ "${payload_seabios_withgrub}" = "y" ] && \ [ "${firstpayloadname}" != "grub" ]; then mv "$(mkSeabiosRom "${x}" "fallback/payload" "$y")" \ "${tmprompath}" || \ err "build_grub_roms: cannot move SeaBIOS ROM to tmprom" + grubelf_cbfs="img/grub2" fi + # we only need insert grub.elf once, for each coreboot config: + "${cbfstool}" "${tmprompath}" add-payload -f "${grubelf}" \ + -n ${grubelf_cbfs} -c lzma || \ + err "build_grub_roms: cannot add grub payload to tmprom" + + # we only need insert background.png once, for each coreboot config: + if [ "${displaymode}" = "vesafb" ] || \ + [ "${displaymode}" = "corebootfb" ]; then + backgroundfile="background1280x800.png" + if [ "${board}" = "x60" ] \ + || [ "${board}" = "t60_intelgpu" ]; then + # TODO: don't hardcode this. do it in target.cfg + backgroundfile="background1024x768.png" + fi + backgroundfile="resources/grub/background/${backgroundfile}" + "${cbfstool}" "${tmprompath}" add -f ${backgroundfile} \ + -n background.png -t raw || \ + err "build_grub_roms: cannot add background.png to tmprom" + + fi + + tmpscancfg=$(mktemp -t coreboot_rom.XXXXXXXXXX) || + err "mkGrubRom: cannot create temporary scan.cfg" + printf "set grub_scan_disk=\"%s\"\n" "${grub_scan_disk}" > \ + "${tmpscancfg}" || \ + err "mkGrubRom: cannot insert into temporary scan.cfg" + "${cbfstool}" "${tmprompath}" add -f "${tmpscancfg}" -n scan.cfg \ + -t raw || err "mkGrubROM: cannot insert scan.cfg into CBFS" + keymaps="" if [ -z ${keyboard_layouts} ]; then for kmapfile in "${kmapdir}"/*; do @@ -386,16 +408,7 @@ build_grub_roms() { keymap="${keymapfile##*/}" keymap="${keymap%.gkb}" - grub_path_in_cbfs="fallback/payload" - [ "${firstpayloadname}" = "grub" ] || \ - grub_path_in_cbfs="img/grub2" - - # evil bofh rfc 2646 compliance hack - x=${keymap} - y=${tmprompath} - z=${grub_path_in_cbfs} - - tmpgrubrom="$(mkGrubRom "${x}" "${y}" "${z}")" + tmpgrubrom="$(mkGrubRom "${keymap}" "${tmprompath}")" if [ "${initmode}" = "normal" ]; then newrompath="${romdir}/${firstpayloadname}_${board}_" @@ -415,61 +428,16 @@ build_grub_roms() { mkGrubRom() { target_keymap="${1}" target_cbrom="${2}" - target_grubelf_cbfs_path="${3}" # e.g. fallback/payload - grubelf="elf/grub/grub_${target_keymap}.elf" - grubcfg="elf/grub/grub_${target_keymap}.cfg" - grubtestcfg="elf/grub/grub_${target_keymap}_test.cfg" + keymapcfg="elf/grub/keymap_${target_keymap}.cfg" tmprom=$(mktemp -t coreboot_rom.XXXXXXXXXX) || \ err "mkGrubRom: cannot create tmprom" cp "${target_cbrom}" "${tmprom}" || \ err "mkGrubRom: cannot copy to tmprom" - "${cbfstool}" "${tmprom}" add-payload -f "${grubelf}" \ - -n ${target_grubelf_cbfs_path} -c lzma || \ - err "mkGrubRom: cannot add grub payload to tmprom" - - tmpgrubcfg=$(mktemp -t grub.cfg.XXXXXXXXXX) - tmpgrubtestcfg=$(mktemp -t grubtest.cfg.XXXXXXXXXX) - if [ "${grub_scan_disk}" = "ahci" ]; then - sed \ - 's/set\ grub_scan_disk=\"both\"/set\ grub_scan_disk=\"ahci\"/' \ - "${grubcfg}" > "${tmpgrubcfg}" || err "mkGrubRom: sed1" - sed \ - 's/set\ grub_scan_disk=\"both\"/set\ grub_scan_disk=\"ahci\"/' \ - "${grubtestcfg}" > "${tmpgrubtestcfg}" || \ - err "mkGrubRom: sed2" - elif [ "${grub_scan_disk}" = "ata" ]; then - sed \ - 's/set\ grub_scan_disk=\"both\"/set\ grub_scan_disk=\"ata\"/' \ - "${grubcfg}" > "${tmpgrubcfg}" || err "mkGrubRom: sed3" - sed \ - 's/set\ grub_scan_disk=\"both\"/set\ grub_scan_disk=\"ata\"/' \ - "${grubtestcfg}" > "${tmpgrubtestcfg}" || \ - err "mkGrubRom: sed4" - else - cp "${grubcfg}" "${tmpgrubcfg}" || err "mkGrubRom: grub.cfg cp" - cp "${grubtestcfg}" "${tmpgrubtestcfg}" || \ - err "mkGrubRom: grubtest.cfg cp" - fi - - "${cbfstool}" "${tmprom}" add -f "${tmpgrubcfg}" -n grub.cfg -t raw || \ - err "mkGrubRom: cannot add grub.cfg to tmprom" - - "${cbfstool}" "${tmprom}" add -f "${tmpgrubtestcfg}" -n grubtest.cfg \ - -t raw || err "mkGrubRom: cannot add grubtest.cfg to tmprom" - rm -f "${tmpgrubcfg}" "${tmpgrubtestcfg}" || \ - err "mkGrubRom: cannot remove tmp grub.cfg / grubtest.cfg" - - backgroundfile="background1280x800.png" - if [ "${board}" = "x60" ] || [ "${board}" = "t60_intelgpu" ]; then - # TODO: don't hardcode this. do it in target.cfg per board - backgroundfile="background1024x768.png" - fi - backgroundfile="resources/grub/background/${backgroundfile}" - "${cbfstool}" "${tmprom}" add -f ${backgroundfile} -n background.png \ - -t raw || err "mkGrubRom: cannot add background.png to tmprom" + "${cbfstool}" "${tmprom}" add -f "${keymapcfg}" -n keymap.cfg -t raw \ + || err "mkGrubRom: cannot add keymap.cfg to tmprom" printf "%s\n" "${tmprom}" } |