From df21321b7794f01da34855ec77c204c146f6687c Mon Sep 17 00:00:00 2001 From: Francis Rowe Date: Fri, 13 Feb 2015 23:50:47 -0500 Subject: Merge all flashing scripts one one. --- diff --git a/docs/install/index.html b/docs/install/index.html index eda8bfa..856a9da 100644 --- a/docs/install/index.html +++ b/docs/install/index.html @@ -179,7 +179,7 @@

Run the script:
- $ sudo ./lenovobios_firstflash bin/YOURBOARD/YOURROM. + $ sudo ./flash i945lenovo_firstflash bin/YOURBOARD/YOURROM.

@@ -214,7 +214,7 @@

When you have booted up again:
- $ sudo ./lenovobios_secondflash bin/YOURBOARD/YOURROM + $ sudo ./flash i945lenovo_secondflash bin/YOURBOARD/YOURROM

@@ -296,13 +296,8 @@

- Flashing is actually easy (compared to X60/T60).
- $ sudo flashrom -p internal:laptop=force_I_want_a_brick -w bin/YOURBOARD/YOURROM -

- -

- Alternatively, a script is provided which does the same thing:
- $ sudo ./macbook21_firstflash bin/YOURBOARD/YOURROM + Use this flashing script, to install libreboot:
+ $ sudo ./flash i945apple_firstflash bin/YOURBOARD/YOURROM

@@ -399,14 +394,14 @@

Flash the ROM:
- $ sudo ./flash bin/YOURBOARD/YOURROM + $ sudo ./flash update bin/YOURBOARD/YOURROM

If you are sure that you are flashing the correct image but you get the error This coreboot image (LENOVO:ThinkPad X60) does not appear to be correct for the detected mainboard (Lenovo:ThinkPad X60 / X60s / X60t) or similar (if it's a different board), then do:
- $ sudo ./forceflash bin/YOURBOARD/YOURROM + $ sudo ./flash forceupdate bin/YOURBOARD/YOURROM

diff --git a/flash b/flash index d1f714d..bb3384f 100755 --- a/flash +++ b/flash @@ -1,8 +1,8 @@ #!/bin/bash -# flash script: uses flashrom to flash a new libreboot ROM image onto your machine +# flash script: uses flashrom to flash a libreboot ROM image # -# Copyright (C) 2014 Francis Rowe +# Copyright (C) 2014, 2015 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 @@ -20,33 +20,112 @@ ## Don't add here. errors are expected. # set -u -e -v -set -v if [[ $EUID -ne 0 ]]; then echo "This script must be run as root" exit 1 fi -if (( $# != 1 )); then - echo "Usage: ./flash yourrom.rom" - echo "usage: ./flash path/to/yourrom.rom" - echo "You need to specify exactly 1 file" + +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 + echo "This script must be run on an i686 or x86_64 host. x86_64 is recommended." + 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 (( $# != 2 )); then + echo "$usage" + echo "You need to specify exactly one mode, and one file" + echo "$availablemodes" exit 1 fi -if [ ! -f $1 ]; then + +# User specified an invalid mode of operation +if [ "$1" = "update" ] || [ "$1" = "forceupdate" ] || [ "$1" = "i945lenovo_firstflash" ] || [ "$1" != "i945lenovo_secondflash" ] || [ "$1" != "i945apple_firstflash" ]; then + echo "Mode selected: $1" +else + echo "$usage" + echo "Invalid mode. Modes available: $availablemodes" + exit 1 +fi + +# The specified file does not exist +if [ ! -f "$2" ]; then echo "File not found!" exit 1 fi -path="unknown" +# For easy of readability +mode=$1 +rompath=$2 + +flashrom="unknown" if [ -f "DEBLOB" ]; then - path="./flashrom/flashrom" -elif [ $(uname -i) = "i686" ] || [ $(uname -m) = "i686" ]; then - path="./flashrom/i686/flashrom" -elif [ $(uname -i) = "x86_64" ] || [ $(uname -m) = "x86_64" ]; then - path="./flashrom/x86_64/flashrom" + # git or libreboot_src + flashrom="./flashrom/flashrom" else - echo "This script must be run on an i686 or x86_64 host. x86_64 is recommended." + # libreboot_util + flashrom="./flashrom/$arch/flashrom" +fi +if [ 1 -f "$flashrom" ]; then + echo "flashrom binary not present" exit 1 fi -$(echo $path) -p internal -w $1 +# i945 lenovobios +bucts="unknown" +flashrom_lenovobios_sst="unknown" +flashrom_lenovobios_macronix="unknown" +if [ "$mode" = "i945lenovo_firstflash" ] || [ "$mode" = "i945lenovo_secondflash" ]; then + if [ -f "DEBLOB" ]; then + # git or libreboot_src + bucts="./bucts/bucts" + flashrom_lenovobios_sst="./flashrom/flashrom_lenovobios_sst" + flashrom_lenovobios_macronix="./flashrom/flashrom_lenovobios_sst" + else + # libreboot_util + bucts="./bucts/$arch/bucts" + flashrom_lenovobios_sst="./flashrom/$arch/flashrom_lenovobios_sst" + flashrom_lenovobios_macronix="./flashrom/$arch/flashrom_lenovobios_sst" + fi + + # anti-bricking precaution + if [ ! -f "$bucts" ]; then + echo "bucts binary not present. ABORTING so as to protect against bricking the machine." + exit 1 + fi + + # fail if flashrom is not present + if [ ! -f "$flashrom_lenovobios_sst" ] || [ ! -f "$flashrom_lenovobios_macronix" ]; then + echo "Flashrom binaries not present." + exit 1 + fi +fi + +if [ "$mode" = "update" ]; then + $flashrom -p internal -w "$rompath" +elif [ "$mode" = "forceupdate" ]; then + $flashrom -p internal:boardmismatch=force -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 -w "$rompath" + $bucts 0 +fi + + diff --git a/forceflash b/forceflash deleted file mode 100755 index 64d4d68..0000000 --- a/forceflash +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash - -# forceflash script - be very careful when using this, because it can flash -# the wrong ROM image on the wrong machine if you tell it to. YOU HAVE BEEN WARNED. -# This script is for re-flashing a new image for the same machine when the board name was changed -# -# Copyright (C) 2014, 2015 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 . -# - -## Don't add here. errors are expected. -# set -u -e -v -set -v - -if [[ $EUID -ne 0 ]]; then - echo "This script must be run as root" - exit 1 -fi -if (( $# != 1 )); then - echo "Usage: ./forceflash yourrom.rom" - echo "usage: ./forceflash path/to/yourrom.rom" - echo "You need to specify exactly 1 file" - exit 1 -fi -if [ ! -f $1 ]; then - echo "File not found!" - exit 1 -fi - -path="unknown" -if [ -f "DEBLOB" ]; then - path="./flashrom/flashrom" -elif [ $(uname -i) = "i686" ] || [ $(uname -m) = "i686" ]; then - path="./flashrom/i686/flashrom" -elif [ $(uname -i) = "x86_64" ] || [ $(uname -m) = "x86_64" ]; then - path="./flashrom/x86_64/flashrom" -else - echo "This script must be run on an i686 or x86_64 host. x86_64 is recommended." - exit 1 -fi - -$(echo $path) -p internal:boardmismatch=force -w $1 diff --git a/lenovobios_firstflash b/lenovobios_firstflash deleted file mode 100755 index 4230c3b..0000000 --- a/lenovobios_firstflash +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/bash - -# lenovobios_firstflash: flashes libreboot on an X60/T60 while Lenovo BIOS is running -# -# Copyright (C) 2014, 2015 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 . -# - -## Don't add here. errors are expected. -# set -u -e -v -set -v - -if [[ $EUID -ne 0 ]]; then - echo "This script must be run as root" - exit 1 -fi -if (( $# != 1 )); then - echo "Usage: ./lenovobios_firstflash yourrom.rom" - echo "usage: ./lenovobios_firstflash path/to/yourrom.rom" - echo "You need to specify exactly 1 file" - exit 1 -fi -if [ ! -f $1 ]; then - echo "File not found!" - exit 1 -fi - -bucts="unknown" -flashromsst="unknown" -flashrommacronix="unknown" -if [ -f "DEBLOB" ]; then - bucts="./bucts/bucts" - flashromsst="./flashrom/flashrom_lenovobios_sst" - flashrommacronix="./flashrom/flashrom_lenovobios_macronix" -elif [ $(uname -i) = "i686" ] || [ $(uname -m) = "i686" ]; then - bucts="./bucts/i686/bucts" - flashromsst="./flashrom/i686/flashrom_lenovobios_sst" - flashrommacronix="./flashrom/i686/flashrom_lenovobios_macronix" -elif [ $(uname -i) = "x86_64" ] || [ $(uname -m) = "x86_64" ]; then - bucts="./bucts/x86_64/bucts" - flashromsst="./flashrom/x86_64/flashrom_lenovobios_sst" - flashrommacronix="./flashrom/x86_64/flashrom_lenovobios_macronix" -else - echo "This script must be run on an i686 or x86_64 host. x86_64 is recommended." - exit 1 -fi - -# Set bucts -# this means we are working in src -if [ ! -f "$bucts" ]; then - echo "BUCTS failed. Make sure BUC.TS is 1, or else you will brick your machine. ABORTING so as to protect against bricking the machine." - exit 1 -fi - -$(echo $bucts) 1 - -$(echo $flashromsst) -p internal -w $1 -$(echo $flashrommacronix) -p internal -w $1 - - diff --git a/lenovobios_secondflash b/lenovobios_secondflash deleted file mode 100755 index 8c068c7..0000000 --- a/lenovobios_secondflash +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/bash - -# lenovobios_secondflash: flashes libreboot during 2nd boot, after 1st initial overwrite of the lenovo bios on X60/T60 -# -# Copyright (C) 2014, 2015 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 . -# - -## Don't add here. errors are expected. -# set -u -e -v -set -v - -if [[ $EUID -ne 0 ]]; then - echo "This script must be run as root" - exit 1 -fi -if (( $# != 1 )); then - echo "Usage: ./lenovobios_secondflash yourrom.rom" - echo "usage: ./lenovobios_secondflash path/to/yourrom.rom" - echo "You need to specify exactly 1 file" - exit 1 -fi -if [ ! -f $1 ]; then - echo "File not found!" - exit 1 -fi - -# boardmismatch=force is for people upgrading from libreboot 5th release, where the new ROM's are "ThinkPad X60 / X60s / X60t" -# and the old ones are "ThinkPad X60 / X60s" and flashrom complains otherwise - -bucts="unknown" -flashrom="unknown" -if [ -f "DEBLOB" ]; then - bucts="./bucts/bucts" - flashrom="./flashrom/flashrom" -elif [ $(uname -i) = "i686" ] || [ $(uname -m) = "i686" ]; then - bucts="./bucts/i686/bucts" - flashrom="./flashrom/i686/flashrom" -elif [ $(uname -i) = "x86_64" ] || [ $(uname -m) = "x86_64" ]; then - bucts="./bucts/x86_64/bucts" - flashrom="./flashrom/x86_64/flashrom" -else - echo "This script must be run on an i686 or x86_64 host. x86_64 is recommended." - exit 1 -fi - -$(echo $flashrom) -p internal -w $1 - -# Reset bucts back to zero -# this means we are working in src -if [ ! -f "$bucts" ]; then - echo "WARNING: bucts not found, but if the image was flashed then it's probably safe. A dd'd image (like libreboot's images) flashed with bucts=1 is ok. If the image is not dd'd and bucts=1, then you should run ./bucts 0 now, or remove the yellow cmos/nvram battery for a minute." - exit 1 -fi - -$(echo $bucts) 0 diff --git a/macbook21_firstflash b/macbook21_firstflash deleted file mode 100755 index 31fd813..0000000 --- a/macbook21_firstflash +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash - -# macbook21_firstflash script: initial flashing script for MacBook2,1 -# -# 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 . -# - -## Don't add here. errors are expected. -# set -u -e -v -set -v - -if [[ $EUID -ne 0 ]]; then - echo "This script must be run as root" - exit 1 -fi -if (( $# != 1 )); then - echo "Usage: ./macbook21_firstflash yourrom.rom" - echo "usage: ./macbook21_firstflash path/to/yourrom.rom" - echo "You need to specify exactly 1 file" - exit 1 -fi -if [ ! -f $1 ]; then - echo "File not found!" - exit 1 -fi - -# boardmismatch=force is for people upgrading from libreboot 5th release, where the new ROM's are "ThinkPad X60 / X60s / X60t" -# and the old ones are "ThinkPad X60 / X60s" and flashrom complains otherwise - -path="unknown" -if [ -f "DEBLOB" ]; then - path="./flashrom/flashrom" -elif [ $(uname -i) = "i686" ] || [ $(uname -m) = "i686" ]; then - path="./flashrom/i686/flashrom" -elif [ $(uname -i) = "x86_64" ] || [ $(uname -m) = "x86_64" ]; then - path="./flashrom/x86_64/flashrom" -else - echo "This script must be run on an i686 or x86_64 host. x86_64 is recommended." - exit 1 -fi - -$(echo $path) -p internal:laptop=force_I_want_a_brick -w $1 - -- cgit v0.9.1