diff --git a/Makefile b/Makefile index 2441f1ba..f59ad726 100644 --- a/Makefile +++ b/Makefile @@ -389,6 +389,7 @@ bin_modules-$(CONFIG_FLASHTOOLS) += flashtools bin_modules-$(CONFIG_NEWT) += newt bin_modules-$(CONFIG_CAIRO) += cairo bin_modules-$(CONFIG_FBWHIPTAIL) += fbwhiptail +bin_modules-$(CONFIG_NITROKEY) += nitrokey-hotp-verification $(foreach m, $(bin_modules-y), \ $(call map,initrd_bin_add,$(call bins,$m)) \ @@ -496,11 +497,13 @@ $(initrd_tmp_dir)/etc/config: FORCE -e 's/\\\"//g' \ > $@ \ ) - $(call do,HASH,$(GIT_HASH) $(GIT_STATUS), \ + $(call do,HASH,$(GIT_HASH) $(GIT_STATUS) $(BOARD), \ echo export GIT_HASH=\'$(GIT_HASH)\' \ >> $@ ; \ echo export GIT_STATUS=$(GIT_STATUS) \ >> $@ ; \ + echo export CONFIG_BOARD=$(BOARD) \ + >> $@ ; \ ) # Ensure that the initrd depends on all of the modules that produce diff --git a/boards/librem13v2/librem13v2.config b/boards/librem13v2/librem13v2.config index 697c15de..616a9472 100644 --- a/boards/librem13v2/librem13v2.config +++ b/boards/librem13v2/librem13v2.config @@ -34,4 +34,3 @@ export CONFIG_BOOT_GUI_MENU_NAME="Purism Librem 13v2 Heads Boot Menu" export CONFIG_USB_BOOT_DEV="/dev/sdb1" export CONFIG_WARNING_BG_COLOR="--background-gradient 0 0 0 150 125 0" export CONFIG_ERROR_BG_COLOR="--background-gradient 0 0 0 150 0 0" -export CONFIG_BOARD="librem" diff --git a/boards/librem15v3/librem15v3.config b/boards/librem15v3/librem15v3.config index d51a5247..a9a194be 100644 --- a/boards/librem15v3/librem15v3.config +++ b/boards/librem15v3/librem15v3.config @@ -34,4 +34,3 @@ export CONFIG_BOOT_KERNEL_REMOVE="" export CONFIG_BOOT_DEV="/dev/sda1" export CONFIG_BOOT_GUI_MENU_NAME="Purism Librem 15v3 Heads Boot Menu" export CONFIG_USB_BOOT_DEV="/dev/sdb1" -export CONFIG_BOARD="librem" diff --git a/boards/x230/x230.config b/boards/x230/x230.config index 7572ea9d..e479f5a1 100644 --- a/boards/x230/x230.config +++ b/boards/x230/x230.config @@ -28,7 +28,6 @@ export CONFIG_BOOT_KERNEL_ADD="intel_iommu=on" export CONFIG_BOOT_KERNEL_REMOVE="quiet" export CONFIG_BOOT_DEV="/dev/sda1" export CONFIG_USB_BOOT_DEV="/dev/sdb1" -export CONFIG_BOARD="x230" # This board has two SPI flash chips, an 8 MB that holds the IFD, # the ME image and part of the coreboot image, and a 4 MB one that diff --git a/initrd/bin/flash-gui.sh b/initrd/bin/flash-gui.sh new file mode 100755 index 00000000..015742a7 --- /dev/null +++ b/initrd/bin/flash-gui.sh @@ -0,0 +1,126 @@ +#!/bin/sh +# +# based off of flashrom-x230 and usb-scan +# +set -e -o pipefail +. /etc/functions +. /etc/config + +# Mount the USB boot device +if ! grep -q /media /proc/mounts ; then + mount-usb "$CONFIG_USB_BOOT_DEV" || USB_FAILED=1 + if [ $USB_FAILED -ne 0 ]; then + if [ ! -e "$CONFIG_USB_BOOT_DEV" ]; then + if [ -x /bin/whiptail ]; then + whiptail --title 'USB Drive Missing' \ + --msgbox "Insert the USB drive containing your ROM and press Enter to continue." 16 60 + else + echo "Insert the USB drive containing your ROM and press Enter to continue." + fi + USB_FAILED=0 + mount-usb "$CONFIG_USB_BOOT_DEV" || USB_FAILED=1 + fi + if [ $USB_FAILED -ne 0 ]; then + if [ -x /bin/whiptail ]; then + whiptail $CONFIG_ERROR_BG_COLOR --title 'ERROR: Mounting /media Failed' \ + --msgbox "Unable to mount $CONFIG_USB_BOOT_DEV" 16 60 + else + die "ERROR: Unable to mount $CONFIG_USB_BOOT_DEV" + fi + fi + fi +fi + +get_menu_option() { + if [ -x /bin/whiptail ]; then + MENU_OPTIONS="" + n=0 + while read option + do + n=`expr $n + 1` + option=$(echo $option | tr " " "_") + MENU_OPTIONS="$MENU_OPTIONS $n ${option}" + done < /tmp/rom_menu.txt + + MENU_OPTIONS="$MENU_OPTIONS a abort" + whiptail --clear --title "Select your ROM" \ + --menu "Choose the ROM to flash [1-$n, a to abort]:" 20 120 8 \ + -- $MENU_OPTIONS \ + 2>/tmp/whiptail || die "Aborting flash attempt" + + option_index=$(cat /tmp/whiptail) + else + echo "+++ Select your ROM:" + n=0 + while read option + do + n=`expr $n + 1` + echo "$n. $option" + done < /tmp/rom_menu.txt + + read \ + -p "Choose the ROM to flash [1-$n, a to abort]: " \ + option_index + fi + + if [ "$option_index" = "a" ]; then + die "Aborting flash attempt" + fi + + option=`head -n $option_index /tmp/rom_menu.txt | tail -1` +} + +# create ROM menu options +ls -1r /media/*.rom 2>/dev/null > /tmp/rom_menu.txt || true +if [ `cat /tmp/rom_menu.txt | wc -l` -gt 0 ]; then + option_confirm="" + while [ -z "$option" ] + do + get_menu_option + done + + if [ -n "$option" ]; then + MOUNTED_ROM=$option + ROM=${option:7} # remove /media/ to get device relative path + + if [ -x /bin/whiptail ]; then + if (whiptail --title 'Flash ROM?' \ + --yesno "This will replace your old ROM with $ROM\n\nDo you want to proceed?" 16 90) then + /bin/flash.sh $MOUNTED_ROM + whiptail --title 'ROM Flashed Successfully' \ + --msgbox "$ROM flashed successfully. Press Enter to reboot" 16 60 + /bin/reboot + else + exit 0 + fi + else + echo "+++ Flash ROM $ROM?" + read \ + -n 1 \ + -p "This will replace your old ROM with $ROM, Do you want to proceed? [y/N] " \ + do_flash + echo + if [ "$do_flash" != "y" \ + -a "$do_flash" != "Y" ]; then + exit 0 + fi + + /bin/flash.sh $MOUNTED_ROM + echo "$ROM flashed successfuly. Press Enter to reboot" + read + /bin/reboot + fi + + die "Something failed in ROM flash" + fi +else + if [ -x /bin/whiptail ]; then + whiptail --title 'No ROMs found' \ + --msgbox "No ROMs found on USB disk" 16 60 + else + echo "No ROMs found on USB disk. Press Enter to continue" + read + fi +fi + +exit 0 diff --git a/initrd/bin/flash.sh b/initrd/bin/flash.sh index 54749438..0d2f5ba4 100755 --- a/initrd/bin/flash.sh +++ b/initrd/bin/flash.sh @@ -1,98 +1,29 @@ #!/bin/sh # -# based off of flashrom-x230 and usb-scan +# based off of flashrom-x230 # set -e -o pipefail . /etc/functions . /etc/config case "$CONFIG_BOARD" in - "librem" ) + librem* ) FLASHROM_OPTIONS='-p internal:laptop=force_I_want_a_brick,ich_spi_mode=hwseq' ;; "x230" ) FLASHROM_OPTIONS='--force --noverify-all --programmer internal --ifd --image bios' ;; + "kgpe-d16" ) + FLASHROM_OPTIONS='--force --noverify --programmer internal' + ;; + "kgpe-d16-openbmc" ) + FLASHROM_OPTIONS='--programmer="ast1100:spibus=2,cpu=reset" -c "S25FL128P......0"' + ;; * ) - if [ -x /bin/whiptail ]; then - whiptail $CONFIG_ERROR_BG_COLOR --title 'ERROR: No Board Configured' \ - --msgbox "ERROR: No board has been configured!\n\nEach board requires specific flashrom options and it's unsafe to flash without them.\n\nAborting." 16 60 - else - die "ERROR: No board has been configured!\n\nEach board requires specific flashrom options and it's unsafe to flash without them.\n\nAborting." - fi + die "ERROR: No board has been configured!\n\nEach board requires specific flashrom options and it's unsafe to flash without them.\n\nAborting." ;; esac -if [ "$1" = "-c" ]; then - CLEAN=1 -else - CLEAN=0 -fi - -# Mount the USB boot device -if ! grep -q /media /proc/mounts ; then - mount-usb "$CONFIG_USB_BOOT_DEV" || USB_FAILED=1 - if [ $USB_FAILED -ne 0 ]; then - if [ ! -e "$CONFIG_USB_BOOT_DEV" ]; then - if [ -x /bin/whiptail ]; then - whiptail --title 'USB Drive Missing' \ - --msgbox "Insert the USB drive containing your ROM and press Enter to continue." 16 60 - else - echo "Insert the USB drive containing your ROM and press Enter to continue." - fi - USB_FAILED=0 - mount-usb "$CONFIG_USB_BOOT_DEV" || USB_FAILED=1 - fi - if [ $USB_FAILED -ne 0 ]; then - if [ -x /bin/whiptail ]; then - whiptail $CONFIG_ERROR_BG_COLOR --title 'ERROR: Mounting /media Failed' \ - --msgbox "Unable to mount $CONFIG_USB_BOOT_DEV" 16 60 - else - die "ERROR: Unable to mount $CONFIG_USB_BOOT_DEV" - fi - fi - fi -fi - -get_menu_option() { - if [ -x /bin/whiptail ]; then - MENU_OPTIONS="" - n=0 - while read option - do - n=`expr $n + 1` - option=$(echo $option | tr " " "_") - MENU_OPTIONS="$MENU_OPTIONS $n ${option}" - done < /tmp/rom_menu.txt - - MENU_OPTIONS="$MENU_OPTIONS a abort" - whiptail --clear --title "Select your ROM" \ - --menu "Choose the ROM to flash [1-$n, a to abort]:" 20 120 8 \ - -- $MENU_OPTIONS \ - 2>/tmp/whiptail || die "Aborting flash attempt" - - option_index=$(cat /tmp/whiptail) - else - echo "+++ Select your ROM:" - n=0 - while read option - do - n=`expr $n + 1` - echo "$n. $option" - done < /tmp/rom_menu.txt - - read \ - -p "Choose the ROM to flash [1-$n, a to abort]: " \ - option_index - fi - - if [ "$option_index" = "a" ]; then - die "Aborting flash attempt" - fi - - option=`head -n $option_index /tmp/rom_menu.txt | tail -1` -} - flash_rom() { ROM=$1 cp "$ROM" /tmp/${CONFIG_BOARD}.rom @@ -106,57 +37,17 @@ flash_rom() { || die "$ROM: Flash failed" } -# create ROM menu options -ls -1r /media/*.rom 2>/dev/null > /tmp/rom_menu.txt || true -if [ `cat /tmp/rom_menu.txt | wc -l` -gt 0 ]; then - option_confirm="" - while [ -z "$option" ] - do - get_menu_option - done - - if [ -n "$option" ]; then - MOUNTED_ROM=$option - ROM=${option:7} # remove /media/ to get device relative path - - if [ -x /bin/whiptail ]; then - if (whiptail --title 'Flash ROM?' \ - --yesno "This will replace your old ROM with $ROM\n\nDo you want to proceed?" 16 90) then - flash_rom $MOUNTED_ROM - whiptail --title 'ROM Flashed Successfully' \ - --msgbox "$ROM flashed successfully. Press Enter to reboot" 16 60 - /bin/reboot - else - exit 0 - fi - else - echo "+++ Flash ROM $ROM?" - read \ - -n 1 \ - -p "This will replace your old ROM with $ROM, Do you want to proceed? [y/N] " \ - do_flash - echo - if [ "$do_flash" != "y" \ - -a "$do_flash" != "Y" ]; then - exit 0 - fi - - flash_rom $MOUNTED_ROM - echo "$ROM flashed successfuly. Press Enter to reboot" - read - /bin/reboot - fi - - die "Something failed in ROM flash" - fi +if [ "$1" = "-c" ]; then + CLEAN=1 + ROM="$2" else - if [ -x /bin/whiptail ]; then - whiptail --title 'No ROMs found' \ - --msgbox "No ROMs found on USB disk" 16 60 - else - echo "No ROMs found on USB disk. Press Enter to continue" - read - fi + CLEAN=0 + ROM="$1" fi +if [ ! -e "$ROM" ]; then + die "Usage: $0 [-c] " +fi + +flash_rom $ROM exit 0 diff --git a/initrd/bin/flashrom-kgpe-d16-openbmc.sh b/initrd/bin/flashrom-kgpe-d16-openbmc.sh deleted file mode 100755 index 138ce035..00000000 --- a/initrd/bin/flashrom-kgpe-d16-openbmc.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -. /etc/functions - -ROM="$1" -if [ -z "$1" ]; then - die "Usage: $0 /media/kgpe-d16-openbmc.rom" -fi - -cp "$ROM" /tmp/kgpe-d16-openbmc.rom -sha256sum /tmp/kgpe-d16-openbmc.rom - -flashrom --programmer="ast1100:spibus=2,cpu=reset" -c "S25FL128P......0" -w /tmp/kgpe-d16-openbmc.rom \ -|| die "$ROM: Flash failed" - -warn "Reboot and hopefully it works..." -exit 0 diff --git a/initrd/bin/flashrom-kgpe-d16.sh b/initrd/bin/flashrom-kgpe-d16.sh deleted file mode 100755 index 801c1b83..00000000 --- a/initrd/bin/flashrom-kgpe-d16.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -. /etc/functions - -if [ "$1" = "-c" ]; then - CLEAN=1 - ROM="$2" -else - CLEAN=0 - ROM="$1" -fi - -if [ ! -e "$ROM" ]; then - die "Usage: $0 [-c] /media/kgpe-d16.rom" -fi - -cp "$ROM" /tmp/kgpe-d16.rom -sha256sum /tmp/kgpe-d16.rom -if [ "$CLEAN" -eq 0 ]; then - preserve_rom /tmp/kgpe-d16.rom \ - || die "$ROM: Config preservation failed" -fi - -flashrom \ - --force \ - --noverify \ - --programmer internal \ - -w /tmp/kgpe-d16.rom \ -|| die "$ROM: Flash failed" - -warn "Reboot and hopefully it works..." -exit 0 diff --git a/initrd/bin/flashrom-x230.sh b/initrd/bin/flashrom-x230.sh deleted file mode 100755 index 81150aab..00000000 --- a/initrd/bin/flashrom-x230.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh -. /etc/functions - -if [ "$1" = "-c" ]; then - CLEAN=1 - ROM="$2" -else - CLEAN=0 - ROM="$1" -fi - -if [ ! -e "$ROM" ]; then - die "Usage: $0 [-c] /media/x230.rom" -fi - -cp "$ROM" /tmp/x230.rom -sha256sum /tmp/x230.rom -if [ "$CLEAN" -eq 0 ]; then - preserve_rom /tmp/x230.rom \ - || die "$ROM: Config preservation failed" -fi - -flashrom \ - --force \ - --noverify-all \ - --programmer internal \ - --ifd \ - --image bios \ - -w /tmp/x230.rom \ -|| die "$ROM: Flash failed" - -warn "Reboot and hopefully it works..." -exit 0 diff --git a/initrd/bin/gui-init b/initrd/bin/gui-init index 9fe9a728..81c8f663 100755 --- a/initrd/bin/gui-init +++ b/initrd/bin/gui-init @@ -247,7 +247,7 @@ while true; do fi if [ "$totp_confirm" = "f" ]; then - /bin/flash.sh + flash-gui.sh continue fi