#!/bin/bash # # helper script: build ROM images with GRUB and put them in ./bin/ # # Copyright (C) 2014, 2015 Leah Rowe # Copyright (C) 2015 Klemens Nanni # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # This script assumes that the working directory is the root # of git or release archive [ "x${DEBUG+set}" = 'xset' ] && set -v set -u -e printf "Building ROM images with the GRUB payload\n" [ -d bin ] || mkdir "bin/" # Put GRUB payloads and config files # in the coreboot directory, ready for next step ( cd "coreboot/" for romtype in txtmode vesafb; do cd ../resources/utilities/grub-assemble ./gen.sh ${romtype} rm -f "../../../coreboot/grub_${romtype}.elf" mv "grub_${romtype}.elf" "../../../coreboot/" cd "../../../coreboot" # GRUB configuration files for keylayout in ../resources/utilities/grub-assemble/keymap/original/*; do keymap="${keylayout##*/}" cat ../resources/grub/config/extra/{common,"${romtype}"}.cfg > "grub_${keymap}_${romtype}.cfg" printf "keymap %s\n" "${keymap}" >> "grub_${keymap}_${romtype}.cfg" cat ../resources/grub/config/menuentries/{common,"${romtype}"}.cfg >> "grub_${keymap}_${romtype}.cfg" # grubtest.cfg should be able to switch back to grub.cfg sed "s/grubtest.cfg/grub.cfg/" < "grub_${keymap}_${romtype}.cfg" > "grub_${keymap}_${romtype}_test.cfg" done done ) # Build ROM images for supported boards buildrom() { board="$1" if [ -f "resources/libreboot/config/grub/${board}/config" ]; then ./build roms withgrub_helper "${board}" fi } if [ $# -gt 0 ]; then for board in "${@}"; do buildrom "${board}" done else for board in resources/libreboot/config/grub/*; do buildrom "${board##*/}" done fi # Needed on i945 systems for the bucts/dd trick (documented) # This enables the ROM to be flashed over the lenovo bios firmware for i945board in "x60" "t60" do if [ -d "bin/grub/${i945board}/" ]; then cd "bin/grub/${i945board}/" for i945rom in * do dd if="${i945rom}" of=top64k.bin bs=1 skip=$[$(stat -c %s "${i945rom}") - 0x10000] count=64k dd if=top64k.bin of="${i945rom}" bs=1 seek=$[$(stat -c %s "${i945rom}") - 0x20000] count=64k conv=notrunc rm -f top64k.bin done cd "../../../" fi done # TEMPORARY HACK: copy t400* to r500* # (until proper R500 support is added) if [ -d "bin/grub/" ]; then cd "bin/grub/" for board in "t400" do for romsize in "4m" "8m" do if [ -d "${board}_${romsize}b/" ]; then cp -R "${board}_${romsize}b/" "r500_${romsize}b/" fi done done cd ../../ fi # Build the deblobbed descriptor+gbe regions for GM45/ICH9M targets. # Then put them in the ROM images. if [ -d "bin/grub/" ]; then cd "bin/grub/" for board in "x200" "r400" "r500" "t400" "t500" do for romsize in "4m" "8m" do if [ -d "${board}_${romsize}b/" ]; then cd "${board}_${romsize}b/" ../../../resources/utilities/ich9deblob/ich9gen for rom in * do if [ "${board}" = "r500" ]; then dd if="ich9fdnogbe_${romsize}.bin" of="${rom}" bs=1 count=4k conv=notrunc else dd if="ich9fdgbe_${romsize}.bin" of="${rom}" bs=1 count=12k conv=notrunc fi done rm -f "ich9fd"*.bin "mk"*.[ch] cd "../" fi done done cd ../../ fi # The GRUB files are no longer needed rm -f "coreboot/grub"*.{elf,cfg} printf "\n\n"