diff options
author | 4 of 7 (Leah Rowe) info@minifree.org <info@minifree.org> | 2017-01-21 18:14:33 +0000 |
---|---|---|
committer | 4 of 7 (Leah Rowe) info@minifree.org <info@minifree.org> | 2017-01-21 18:18:20 +0000 |
commit | 4b0752e1c264c4ba2a354507ca97bb2e039dda1a (patch) | |
tree | dca24f3d11087443aa9c8b2d823ed1d5b8dad001 /flash | |
parent | 3c17e8d80e5bacacddb8be37b598cd91cf543539 (diff) | |
download | librebootfr-4b0752e1c264c4ba2a354507ca97bb2e039dda1a.tar.gz librebootfr-4b0752e1c264c4ba2a354507ca97bb2e039dda1a.zip |
re-add old build system (for x86 boards/utils)
Everything will be migrated over to the new build system after release.
Diffstat (limited to 'flash')
-rwxr-xr-x | flash | 134 |
1 files changed, 134 insertions, 0 deletions
@@ -0,0 +1,134 @@ +#!/bin/bash + +# flash script: uses flashrom to flash a libreboot ROM image +# +# Copyright (C) 2014, 2015 Leah Rowe <info@minifree.org> +# +# 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 <http://www.gnu.org/licenses/>. +# + +# So that I one day find it again +# http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02 + +## Don't add here. errors are expected. +[ "x${DEBUG+set}" = 'xset' ] && set -v +# set -u -e + +if [ ${EUID} -ne 0 ]; then + printf "This script must be run as root\n" + exit 1 +fi + +arch="unknown" +if [ "$(uname -i)" = "i686" ] || [ "$(uname -m)" = "i686" ]; then + arch="i686" +elif [ "$(uname -i)" = "x86_64" ] || [ "$(uname -m)" = "x86_64" ]; then + arch="x86_64" +else + printf "This script must be run on an i686 or x86_64 host. x86_64 is recommended.\n" + exit 1 +fi + +usage="usage: ./flash mode path/to/yourrom.rom" +availablemodes="update, forceupdate, i945lenovo_firstflash, i945lenovo_secondflash, i945apple_firstflash" + +mode="unknown" +rompath="unknown" + +# User specified no or too few/many parameters +if [ $# -lt 2 ]; then + printf "%s\n" "${usage}" + printf "You need to specify exactly one mode, and one file\n" + printf "%s\n" "${availablemodes}" + exit 1 +fi + +mode="${1}" +rompath="${2}" + +# User specified an invalid mode of operation +if [ "${mode}" != "update" ] && [ "${mode}" != "forceupdate" ] && [ "${mode}" != "i945lenovo_firstflash" ] && [ "${mode}" != "i945lenovo_secondflash" ] && [ "${mode}" != "i945apple_firstflash" ]; then + printf "%s\n" "${usage}" + printf "Invalid mode. Modes available: %s\n" "${availablemodes}" + exit 1 +else + printf "Mode selected: %s\n" "${mode}" +fi + +# The specified file does not exist +if [ ! -f "${rompath}" ]; then + printf "File not found!\n" + exit 1 +fi + +flashrom="unknown" +if [ -f "build" ]; then + # git or libreboot_src + flashrom="./flashrom/flashrom" +else + # libreboot_util + flashrom="./flashrom/${arch}/flashrom" +fi +if [ ! -f "${flashrom}" ]; then + printf "flashrom binary not present\n" + exit 1 +fi + +# i945 lenovobios +bucts="unknown" +flashrom_lenovobios_sst="unknown" +flashrom_lenovobios_macronix="unknown" +if [ "${mode}" = "i945lenovo_firstflash" ] || [ "${mode}" = "i945lenovo_secondflash" ]; then + if [ -f "build" ]; then + # git or libreboot_src + bucts="./bucts/bucts" + flashrom_lenovobios_sst="./flashrom/flashrom_lenovobios_sst" + flashrom_lenovobios_macronix="./flashrom/flashrom_lenovobios_macronix" + else + # libreboot_util + bucts="./bucts/${arch}/bucts" + flashrom_lenovobios_sst="./flashrom/${arch}/flashrom_lenovobios_sst" + flashrom_lenovobios_macronix="./flashrom/${arch}/flashrom_lenovobios_macronix" + fi + + # anti-bricking precaution + if [ ! -f "${bucts}" ]; then + printf "bucts binary not present. ABORTING so as to protect against bricking the system.\n" + exit 1 + fi + + # fail if flashrom is not present + if [ ! -f "${flashrom_lenovobios_sst}" ] || [ ! -f "${flashrom_lenovobios_macronix}" ]; then + printf "Flashrom binaries not present.\n" + exit 1 + fi +fi + +if [ "${mode}" = "update" ]; then + ${flashrom} -p internal -w "${rompath}" +elif [ "${mode}" = "forceupdate" ]; then + ${flashrom} -p internal:boardmismatch=force,laptop=force_I_want_a_brick -w "${rompath}" +elif [ "${mode}" = "i945apple_firstflash" ]; then + ${flashrom} -p internal:laptop=force_I_want_a_brick -w "${rompath}" +elif [ "${mode}" = "i945lenovo_firstflash" ]; then + ${bucts} 1 # needed to prevent bricks. + # One will fail (this is harmless), and the other will succeed. + ${flashrom_lenovobios_sst} -p internal -w "${rompath}" + ${flashrom_lenovobios_macronix} -p internal -w "${rompath}" +elif [ "${mode}" = "i945lenovo_secondflash" ]; then + ${flashrom} -p internal:laptop=force_I_want_a_brick -w "${rompath}" + ${bucts} 0 +fi + + |