#!/bin/bash # buildrom-withgrub script: this generically builds the ROM images. # The ROM images built by this script will use the GRUB payload. # # Copyright (C) 2014 Francis Rowe # # 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 . # # DO NOT RUN THIS DIRECTLY! # Use "build" if (( $# != 1 )); then echo "Usage: ./buildrom-withgrub boardname" echo "Example: ./buildrom-withgrub x60" echo "You need to specify exactly 1 argument" exit fi # Build the ROM images: # ---------------------------------------------------------------------------------------------------------------------- cd coreboot rm -rf .config # cbfstool will be used quite heavily here. [[ -f cbfstool ]] || mv util/cbfstool/cbfstool . # prepare libreboot configuration and build it # it is assumed that these configs use coreboot text-mode # instead of coreboot framebuffer, by default cp ../resources/libreboot/config/$1/config .config # coreboot.rom will appear under ./coreboot/build make # move it out (we'll be cleaning the build) mv build/coreboot.rom libreboot_txtmode.rom # clean the build make clean # Now prepare ROM images that use coreboot vesa framebuffer instead of text mode. mv .config config_txtmode # create .config for vesa framebuffer (instead of text mode) sed 's/# CONFIG_FRAMEBUFFER_KEEP_VESA_MODE is not set/CONFIG_FRAMEBUFFER_KEEP_VESA_MODE=y/' < config_txtmode > .config # build new ROM make mv build/coreboot.rom libreboot_vesafb.rom # clean coreboot (again) make clean # copies no longer needed rm -rf .config config_txtmode # Insert files/configurations and perform operations that are common on all images # --------------------------------------------------------------------------------------------------------------- # for rom in libreboot_vesafb.rom libreboot_txtmode.rom # do # Nothing to do here # done # Insert files/configurations and perform operations that are common on libreboot_vesafb.rom (coreboot framebuffer configuration) # --------------------------------------------------------------------------------------------------------------- # Add background image and font ./cbfstool libreboot_vesafb.rom add -f ../resources/grub/background/background.jpg -n background.jpg -t raw # ./cbfstool libreboot_vesafb.rom add -f ../resources/grub/background/gnulove.jpg -n gnulove.jpg -t raw ./cbfstool libreboot_vesafb.rom add -f ../resources/grub/font/dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw # Insert files/configurations and perform operations that are common on libreboot_txtmode.rom (coreboot text mode) # --------------------------------------------------------------------------------------------------------------- # Add memtest86+ ./cbfstool libreboot_txtmode.rom add -f ../memtest86+-5.01/memtest -n memtest -t raw # Add GRUB Invaders ./cbfstool libreboot_txtmode.rom add -f ../grubinvaders/invaders -n invaders -t raw ./cbfstool libreboot_txtmode.rom add -f ../grubinvaders/invaders.exec -n invaders.exec -t raw # Generate the GRUB configurations and add them to each ROM image as grub.cfg and grubtest.cfg # --------------------------------------------------------------------------------------------------------------- for keymap in $(ls ../resources/utilities/grub-assemble/keymap/original) do for romtype in txtmode vesafb do # copy the images based on the keymap cp libreboot_"$romtype".rom libreboot_"$keymap"_"$romtype".rom # generate the correct grub config touch grub_"$keymap"_"$romtype".cfg # generate contents: cat ../resources/grub/config/extra/common.cfg >> grub_"$keymap"_"$romtype".cfg cat ../resources/grub/config/extra/"$romtype".cfg >> grub_"$keymap"_"$romtype".cfg echo "keymap $keymap" >> grub_"$keymap"_"$romtype".cfg cat ../resources/grub/config/menuentries/common.cfg >> grub_"$keymap"_"$romtype".cfg cat ../resources/grub/config/menuentries/"$romtype".cfg >> grub_"$keymap"_"$romtype".cfg # Insert grub config into the image ./cbfstool libreboot_"$keymap"_"$romtype".rom add -f grub_"$keymap"_"$romtype".cfg -n grub.cfg -t raw # 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 # Insert grub test config into the image (for the user to test modifications to before modifying the main one) ./cbfstool libreboot_"$keymap"_"$romtype".rom add -f grub_"$keymap"_"$romtype"_test.cfg -n grubtest.cfg -t raw done done # we don't need the generic rom images anymore rm -rf libreboot_txtmode.rom rm -rf libreboot_vesafb.rom # we don't need the grub configs anymore rm -rf grub*cfg # Now we clean up and prepare the bin directory containing all the images # ---------------------------------------------------------------------------------------------------------------------------- # prepare directory for new ROM images rm -rf $1 mkdir $1 # move the ROM's into the newly created directory mv libreboot*rom $1 # delete the old ROM's from ../bin rm -rf ../bin/$1 # now put the new ROM's in ./bin mv $1 ../bin # cbfstool no longer needed here, so put it back mv cbfstool util/cbfstool/ # go back to main source directory cd ../