diff --git a/include/dts-environment.sh b/include/dts-environment.sh index a750fa5..d41dfa4 100644 --- a/include/dts-environment.sh +++ b/include/dts-environment.sh @@ -5,6 +5,8 @@ # SPDX-License-Identifier: Apache-2.0 # shellcheck disable=SC2034 +# shellcheck source=../include/hal/dts-hal.sh +source $DTS_HAL # Text colors: NORMAL='\033[0m' @@ -50,15 +52,14 @@ VERBOSE_OPT="V" VERBOSE_OPT_LOW="$(echo $VERBOSE_OPT | awk '{print tolower($0)}')" # Hardware variables: -SYSTEM_VENDOR="${SYSTEM_VENDOR:-$(dmidecode -s system-manufacturer)}" -SYSTEM_MODEL="${SYSTEM_MODEL:-$(dmidecode -s system-product-name)}" -BOARD_VENDOR="${BOARD_VENDOR:-$(dmidecode -s system-manufacturer)}" -BOARD_MODEL="${BOARD_MODEL:-$(dmidecode -s baseboard-product-name)}" -CPU_VERSION="$(dmidecode -s processor-version)" +SYSTEM_VENDOR="$($DMIDECODE dump_var_mock -s system-manufacturer)" +SYSTEM_MODEL="$($DMIDECODE dump_var_mock -s system-product-name)" +BOARD_MODEL="$($DMIDECODE dump_var_mock -s baseboard-product-name)" +CPU_VERSION="$($DMIDECODE dump_var_mock -s processor-version)" # Firmware variables -BIOS_VENDOR="${BIOS_VENDOR:-$(dmidecode -s bios-vendor)}" -BIOS_VERSION="${BIOS_VERSION:-$(dmidecode -s bios-version)}" +BIOS_VENDOR="$($DMIDECODE dump_var_mock -s bios-vendor)" +BIOS_VERSION="$($DMIDECODE dump_var_mock -s bios-version)" DASHARO_VERSION="$(echo $BIOS_VERSION | cut -d ' ' -f 3 | tr -d 'v')" DASHARO_FLAVOR="$(echo $BIOS_VERSION | cut -d ' ' -f 1,2)" @@ -66,6 +67,7 @@ DASHARO_FLAVOR="$(echo $BIOS_VERSION | cut -d ' ' -f 1,2)" # firmware, are used globally for both: updating via binaries and via UEFI # Capsule Update. BIOS_UPDATE_FILE="/tmp/biosupdate" +BIOS_DUMP_FILE="/tmp/bios.bin" EC_UPDATE_FILE="/tmp/ecupdate" BIOS_HASH_FILE="/tmp/bioshash.sha256" EC_HASH_FILE="/tmp/echash.sha256" @@ -91,17 +93,15 @@ FLASH_INFO_FILE="/tmp/flash_info" OS_VERSION_FILE="/etc/os-release" KEYS_DIR="/tmp/devkeys" -# Paths to system commands -CMD_POWEROFF="/sbin/poweroff" -CMD_REBOOT="/sbin/reboot" -CMD_SHELL="/bin/bash" +# Paths to system commands: +SHELL="bash" + +# Paths to DTS commands: CMD_DASHARO_HCL_REPORT="/usr/sbin/dasharo-hcl-report" CMD_NCMENU="/usr/sbin/novacustom_menu" CMD_DASHARO_DEPLOY="/usr/sbin/dasharo-deploy" CMD_CLOUD_LIST="/usr/sbin/cloud_list" CMD_EC_TRANSITION="/usr/sbin/ec_transition" -DASHARO_ECTOOL="${DASHARO_ECTOOL:-dasharo_ectool}" -FLASHROM="${FLASHROM:-flashrom}" # Configuration variables declaration and default values (see dts-functions.sh/ # board_config function for more inf.): diff --git a/include/dts-functions.sh b/include/dts-functions.sh index eda8a16..81c2bd8 100644 --- a/include/dts-functions.sh +++ b/include/dts-functions.sh @@ -9,6 +9,8 @@ source $DTS_ENV # shellcheck source=../include/dts-subscription.sh source $DTS_SUBS +# shellcheck source=../include/hal/dts-hal.sh +source $DTS_HAL ### Color functions: function echo_green() { @@ -53,7 +55,7 @@ check_if_ac() { fi while true; do - ac_status=$(cat ${_ac_file}) + ac_status=$($FSREAD_TOOL check_if_ac_mock cat ${_ac_file}) if [ "$ac_status" -eq 1 ]; then echo "AC adapter is connected. Continuing with firmware update." @@ -121,28 +123,28 @@ it5570_i2ec() { # TODO: Use /dev/port instead of iotools # Address high byte - iotools io_write8 0x2e 0x2e - iotools io_write8 0x2f 0x11 - iotools io_write8 0x2e 0x2f - iotools io_write8 0x2f $(($2>>8 & 0xff)) + $IOTOOLS io_write8 0x2e 0x2e + $IOTOOLS io_write8 0x2f 0x11 + $IOTOOLS io_write8 0x2e 0x2f + $IOTOOLS io_write8 0x2f $(($2>>8 & 0xff)) # Address low byte - iotools io_write8 0x2e 0x2e - iotools io_write8 0x2f 0x10 - iotools io_write8 0x2e 0x2f - iotools io_write8 0x2f $(($2 & 0xff)) + $IOTOOLS io_write8 0x2e 0x2e + $IOTOOLS io_write8 0x2f 0x10 + $IOTOOLS io_write8 0x2e 0x2f + $IOTOOLS io_write8 0x2f $(($2 & 0xff)) # Data - iotools io_write8 0x2e 0x2e - iotools io_write8 0x2f 0x12 - iotools io_write8 0x2e 0x2f + $IOTOOLS io_write8 0x2e 0x2e + $IOTOOLS io_write8 0x2f 0x12 + $IOTOOLS io_write8 0x2e 0x2f case $1 in "r") - iotools io_read8 0x2f + $IOTOOLS io_read8 0x2f ;; "w") - iotools io_write8 0x2f "$3" + $IOTOOLS io_write8 0x2f "$3" ;; esac } @@ -350,11 +352,11 @@ board_config() { "V54x_6x_TU") # Dasharo 0.9.0-rc10 and higher have board model in baseboard-version if check_if_dasharo && compare_versions "$DASHARO_VERSION" 0.9.0-rc10; then - BOARD_MODEL="$(dmidecode -s baseboard-version)" - elif ! dasharo_ectool info 2>/dev/null; then + BOARD_MODEL="$($DMIDECODE dump_var_mock -s baseboard-version)" + elif ! $DASHARO_ECTOOL check_for_opensource_firm_mock info 2>/dev/null; then ask_for_model V540TU V560TU else - BOARD_MODEL=$(dasharo_ectool info | grep "board:" | + BOARD_MODEL=$($DASHARO_ECTOOL novacustom_check_sys_model_mock info | grep "board:" | sed -r 's|.*novacustom/(.*)|\1|' | awk '{print toupper($1)}') fi @@ -387,7 +389,7 @@ board_config() { ;; "V5xTNC_TND_TNE") if check_if_dasharo; then - BOARD_MODEL="$(dmidecode -s baseboard-version)" + BOARD_MODEL="$($DMIDECODE dump_var_mock -s baseboard-version)" else ask_for_model V540TNx V560TNx fi @@ -708,7 +710,7 @@ board_config() { } check_flash_lock() { - $FLASHROM -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} > /tmp/check_flash_lock 2> /tmp/check_flash_lock.err + $FLASHROM check_flash_lock_mock -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} > /tmp/check_flash_lock 2> /tmp/check_flash_lock.err # Check in flashrom output if lock is enabled grep -q 'PR0: Warning:.* is read-only\|SMM protection is enabled' /tmp/check_flash_lock.err if [ $? -eq 0 ]; then @@ -721,22 +723,22 @@ check_flash_lock() { check_flash_chip() { echo "Gathering flash chip and chipset information..." - $FLASHROM -p "$PROGRAMMER_BIOS" --flash-name >> "$FLASH_INFO_FILE" 2>> "$ERR_LOG_FILE" + $FLASHROM flash_chip_name_mock -p "$PROGRAMMER_BIOS" --flash-name >> "$FLASH_INFO_FILE" 2>> "$ERR_LOG_FILE" if [ $? -eq 0 ]; then echo -n "Flash information: " tail -n1 "$FLASH_INFO_FILE" - FLASH_CHIP_SIZE=$(($($FLASHROM -p "$PROGRAMMER_BIOS" --flash-size 2>> /dev/null | tail -n1) / 1024 / 1024)) + FLASH_CHIP_SIZE=$(($($FLASHROM flash_chip_size_mock -p "$PROGRAMMER_BIOS" --flash-size 2>> /dev/null | tail -n1) / 1024 / 1024)) echo -n "Flash size: " echo ${FLASH_CHIP_SIZE}M else for flash_name in $FLASH_CHIP_LIST do - $FLASHROM -p "$PROGRAMMER_BIOS" -c "$flash_name" --flash-name >> "$FLASH_INFO_FILE" 2>> "$ERR_LOG_FILE" + $FLASHROM flash_chip_name_mock -p "$PROGRAMMER_BIOS" -c "$flash_name" --flash-name >> "$FLASH_INFO_FILE" 2>> "$ERR_LOG_FILE" if [ $? -eq 0 ]; then echo "Chipset found" tail -n1 "$FLASH_INFO_FILE" FLASH_CHIP_SELECT="-c ${flash_name}" - FLASH_CHIP_SIZE=$(($($FLASHROM -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} --flash-size 2>> /dev/null | tail -n1) / 1024 / 1024)) + FLASH_CHIP_SIZE=$(($($FLASHROM flash_chip_size_mock -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} --flash-size 2>> /dev/null | tail -n1) / 1024 / 1024)) echo "Chipset size" echo ${FLASH_CHIP_SIZE}M break @@ -918,7 +920,7 @@ verify_artifacts() { check_intel_regions() { - FLASH_REGIONS=$($FLASHROM -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} 2>&1) + FLASH_REGIONS=$($FLASHROM check_intel_regions_mock -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} 2>&1) BOARD_HAS_FD_REGION=0 BOARD_FD_REGION_RW=0 BOARD_HAS_ME_REGION=0 @@ -946,7 +948,7 @@ check_blobs_in_binary() { # If there is no descriptor, there is no ME as well, so skip the check if [ $BOARD_HAS_FD_REGION -ne 0 ]; then - ME_OFFSET=$(ifdtool -d $1 2> /dev/null | grep "Flash Region 2 (Intel ME):" | sed 's/Flash Region 2 (Intel ME)\://' |awk '{print $1;}') + ME_OFFSET=$($IFDTOOL check_blobs_in_binary_mock -d $1 2> /dev/null | grep "Flash Region 2 (Intel ME):" | sed 's/Flash Region 2 (Intel ME)\://' | awk '{print $1;}') # Check for IFD signature at offset 0 (old descriptors) if [ "$(tail -c +0 $1|head -c 4|xxd -ps)" == "5aa5f00f" ]; then BINARY_HAS_FD=1 @@ -976,11 +978,8 @@ check_if_me_disabled() { return fi - # Check if HECI present - # FIXME: what if HECI is not device 16.0? - if [ -d /sys/class/pci_bus/0000:00/device/0000:00:16.0 ]; then - # Check ME Current Operation Mode at offset 0x40 bits 19:16 - ME_OPMODE="$(setpci -s 00:16.0 42.B 2> /dev/null | cut -c2-)" + if check_if_heci_present; then + ME_OPMODE="$(check_me_op_mode)" if [ $ME_OPMODE == "0" ]; then echo "ME is not disabled" >> $ERR_LOG_FILE return @@ -1015,8 +1014,8 @@ check_if_me_disabled() { fi else # If we are running coreboot, check for status in logs - cbmem -1 | grep -q "ME is disabled" && ME_DISABLED=1 && return # HECI (soft) disabled - cbmem -1 | grep -q "ME is HAP disabled" && ME_DISABLED=1 && return # HAP disabled + $CBMEM check_if_me_disabled_mock -1 | grep -q "ME is disabled" && ME_DISABLED=1 && return # HECI (soft) disabled + $CBMEM check_if_me_disabled_mock -1 | grep -q "ME is HAP disabled" && ME_DISABLED=1 && return # HAP disabled # TODO: If proprietary BIOS, then also try to check SMBIOS for ME FWSTS # BTW we could do the same in coreboot, expose FWSTS in SMBIOS before it # gets disabled @@ -1061,10 +1060,10 @@ set_flashrom_update_params() { # We need to read whole binary (or BIOS region), otherwise cbfstool will # return different attributes for CBFS regions echo "Checking flash layout." - $FLASHROM -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} ${FLASHROM_ADD_OPT_UPDATE} -r /tmp/bios.bin > /dev/null 2>&1 - if [ $? -eq 0 ] && [ -f "/tmp/bios.bin" ]; then - BOARD_FMAP_LAYOUT=$(cbfstool /tmp/bios.bin layout -w 2> /dev/null) - BINARY_FMAP_LAYOUT=$(cbfstool $1 layout -w 2> /dev/null) + $FLASHROM read_flash_layout_mock -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} ${FLASHROM_ADD_OPT_UPDATE} -r $BIOS_DUMP_FILE > /dev/null 2>&1 + if [ $? -eq 0 ] && [ -f "$BIOS_DUMP_FILE" ]; then + BOARD_FMAP_LAYOUT=$($CBFSTOOL layout_mock $BIOS_DUMP_FILE layout -w 2> /dev/null) + BINARY_FMAP_LAYOUT=$($CBFSTOOL layout_mock $1 layout -w 2> /dev/null) diff <(echo "$BOARD_FMAP_LAYOUT") <(echo "$BINARY_FMAP_LAYOUT") > /dev/null 2>&1 # If layout is identical, perform standard update using FMAP only if [ $? -eq 0 ]; then @@ -1269,7 +1268,7 @@ You can find more info about HCL in docs.dasharo.com/glossary\r" show_ram_inf() { # Get the data: local data="" - data=$(dmidecode) + data=$($DMIDECODE) # Initialize an empty array to store the extracted values: local -a memory_devices_array @@ -1325,7 +1324,7 @@ show_hardsoft_inf() { echo -e "${BLUE}**${NORMAL} HARDWARE INFORMATION ${NORMAL}" echo -e "${BLUE}*********************************************************${NORMAL}" echo -e "${BLUE}**${YELLOW} System Inf.: ${NORMAL}${SYSTEM_VENDOR} ${SYSTEM_MODEL}" - echo -e "${BLUE}**${YELLOW} Baseboard Inf.: ${NORMAL}${BOARD_VENDOR} ${BOARD_MODEL}" + echo -e "${BLUE}**${YELLOW} Baseboard Inf.: ${NORMAL}${SYSTEM_VENDOR} ${BOARD_MODEL}" echo -e "${BLUE}**${YELLOW} CPU Inf.: ${NORMAL}${CPU_VERSION}" show_ram_inf echo -e "${BLUE}*********************************************************${NORMAL}" @@ -1564,11 +1563,11 @@ footer_options(){ ;; "${POWEROFF_OPT_UP}" | "${POWEROFF_OPT_LOW}") send_dts_logs - ${CMD_POWEROFF} + ${POWEROFF} ;; "${REBOOT_OPT_UP}" | "${REBOOT_OPT_LOW}") send_dts_logs - ${CMD_REBOOT} + ${REBOOT} ;; "${SEND_LOGS_OPT}" | "${SEND_LOGS_OPT_LOW}") if [ "${SEND_LOGS_ACTIVE}" == "true" ]; then diff --git a/reports/dasharo-hcl-report b/reports/dasharo-hcl-report index 9187be9..d412175 100644 --- a/reports/dasharo-hcl-report +++ b/reports/dasharo-hcl-report @@ -8,6 +8,8 @@ source $DTS_ENV # shellcheck source=../include/dts-functions.sh source $DTS_FUNCS +# shellcheck source=../include/hal/dts-hal.sh +source $DTS_HAL update_result() { TOOL=$1 @@ -68,32 +70,32 @@ if [ $DEPLOY_REPORT = "false" ]; then echo "Getting hardware information. It will take a few minutes..." fi # echo "Dumping PCI configuration space and topology..." -lspci -nnvvvxxxx > logs/lspci.log 2> logs/lspci.err.log +$LSPCI -nnvvvxxxx > logs/lspci.log 2> logs/lspci.err.log update_result "PCI configuration space and topology" logs/lspci.err.log printf '## |\r' # echo "Dumping USB devices and topology..." -lsusb -vvv > logs/lsusb.log 2> logs/lsusb.err.log +$LSUSB -vvv > logs/lsusb.log 2> logs/lsusb.err.log update_result "USB devices and topology" logs/lsusb.err.log printf '#### |\r' # echo "Dumping Super I/O configuration..." -superiotool -deV > logs/superiotool.log 2> logs/superiotool.err.log +$SUPERIOTOOL -deV > logs/superiotool.log 2> logs/superiotool.err.log update_result "Super I/O configuration" logs/superiotool.err.log printf '###### |\r' # echo "Dumping Embedded Controller configuration (this may take a while if EC is not present)..." -ectool -ip > logs/ectool.log 2> logs/ectool.err.log +$ECTOOL -ip > logs/ectool.log 2> logs/ectool.err.log update_result "EC configuration" logs/ectool.err.log printf '######## |\r' # echo "Dumping MSRs..." -msrtool > logs/msrtool.log 2> logs/msrtool.err.log +$MSRTOOL > logs/msrtool.log 2> logs/msrtool.err.log update_result "MSRs" logs/msrtool.err.log printf '########## |\r' # echo "Dumping SMBIOS tables..." -dmidecode > logs/dmidecode.log 2> logs/dmidecode.err.log +$DMIDECODE > logs/dmidecode.log 2> logs/dmidecode.err.log update_result "SMBIOS tables" logs/dmidecode.err.log printf '############ |\r' @@ -121,12 +123,12 @@ update_result "GPIO configuration C header files" logs/intelp2m.err.log printf '#################### |\r' # echo "Dumping kernel dmesg..." -dmesg > logs/dmesg.log 2> logs/dmesg.err.log +$DMESG > logs/dmesg.log 2> logs/dmesg.err.log update_result "kernel dmesg" logs/dmesg.err.log printf '###################### |\r' # echo "Dumping ACPI tables..." -acpidump > logs/acpidump.log 2> logs/acpidump.err.log +$ACPIDUMP > logs/acpidump.log 2> logs/acpidump.err.log update_result "ACPI tables" logs/acpidump.err.log printf '######################## |\r' @@ -190,9 +192,9 @@ if [ $BOARD_HAS_FD_REGION -eq 1 ]; then # GBE region is present and not locked, read it as well FLASHROM_ADD_OPT_READ+=" -i gbe" fi - else - # No descriptor, probably safe to read everything - FLASHROM_ADD_OPT_READ="" +else + # No descriptor, probably safe to read everything + FLASHROM_ADD_OPT_READ="" fi $FLASHROM -V -p internal:laptop=force_I_want_a_brick ${FLASH_CHIP_SELECT} -r logs/rom.bin ${FLASHROM_ADD_OPT_READ} > logs/flashrom_read.log 2> logs/flashrom_read.err.log @@ -233,12 +235,12 @@ update_result "DIMMs information" logs/decode-dimms.err.log printf '########################################## |\r' # echo "Getting CBMEM table..." -cbmem > logs/cbmem.log 2> logs/cbmem.err.log +$CBMEM > logs/cbmem.log 2> logs/cbmem.err.log update_result "CBMEM table information" logs/cbmem.err.log printf '############################################ |\r' # echo "Getting CBMEM console..." -cbmem -1 > logs/cbmem_console.log 2> logs/cbmem_console.err.log +$CBMEM -1 > logs/cbmem_console.log 2> logs/cbmem_console.err.log update_result "CBMEM console" logs/cbmem_console.err.log printf '############################################## |\r' @@ -248,12 +250,12 @@ update_result "TPM information" logs/tpm_version.err.log printf '################################################ |\r' # echo "Checking AMT..." -mei-amt-check > logs/amt-check.log 2> logs/amt-check.err.log +$MEI_AMT_CHECK > logs/amt-check.log 2> logs/amt-check.err.log update_result "AMT information" logs/amt-check.err.log printf '################################################## |\r' # echo "Checking ME..." -intelmetool -m > logs/intelmetool.log 2> logs/intelmetool.err.log +$INTELMETOOL -m > logs/intelmetool.log 2> logs/intelmetool.err.log update_result "ME information" logs/intelmetool.err.log printf '##################################################### |\r' @@ -287,9 +289,9 @@ if [ $DEPLOY_REPORT = "false" ]; then fi # Create name for generated report -filename="$(dmidecode -s system-manufacturer)" -filename+=" $(dmidecode -s system-product-name)" -filename+=" $(dmidecode -s bios-version)" +filename="$($DMIDECODE dump_var_mock -s system-manufacturer)" +filename+=" $($DMIDECODE dump_var_mock -s system-product-name)" +filename+=" $($DMIDECODE dump_var_mock -s bios-version)" # MAC address of device that is used to connect the internet # it could return none only when there is no internet connection but @@ -299,8 +301,8 @@ filename+=" $(dmidecode -s bios-version)" # shellcheck disable=SC2046 uuid_string="$(cat /sys/class/net/$(ip route show default | head -1 | awk '/default/ {print $5}')/address)" # next two values are hardware related so they will be always the same -uuid_string+="_$(dmidecode -s system-product-name)" -uuid_string+="_$(dmidecode -s system-manufacturer)" +uuid_string+="_$($DMIDECODE dump_var_mock -s system-product-name)" +uuid_string+="_$($DMIDECODE dump_var_mock -s system-manufacturer)" # using values from above should generate the same uuid all the time if only # the MAC address will not change. @@ -371,7 +373,7 @@ order to participate)\r read -p "[N/y] " case ${REPLY} in yes|y|Y|Yes|YES) - /usr/bin/hw-probe -all -upload + $HW_PROBE -all -upload if [ $? -eq 0 ]; then echo "Thank you for contributing to the \"Hardware for Linux\" project!" else diff --git a/reports/touchpad-info b/reports/touchpad-info index 00ddabd..e14492d 100644 --- a/reports/touchpad-info +++ b/reports/touchpad-info @@ -7,14 +7,17 @@ # A script to get information on the touchpad devices. Currently supports only # Clevo devices. -if ! dmesg | grep hid-multitouch | grep "I2C HID" > /dev/null; then +# shellcheck source=../include/hal/dts-hal.sh +source $DTS_HAL + +if ! $DMESG i2c_hid_detect_mock | grep hid-multitouch | grep "I2C HID" > /dev/null; then echo "No I2C touchpads detected. Exiting" exit 2 fi -devname=$(dmesg | grep hid-multitouch | awk 'NF>1{print $NF}') -hid=$(cat "/sys/bus/i2c/devices/$devname/firmware_node/hid") -path=$(cat "/sys/bus/i2c/devices/$devname/firmware_node/path") +devname=$($DMESG i2c_hid_detect_mock | grep hid-multitouch | awk 'NF>1{print $NF}') +hid=$($FSREAD_TOOL cat "/sys/bus/i2c/devices/$devname/firmware_node/hid") +path=$($FSREAD_TOOL cat "/sys/bus/i2c/devices/$devname/firmware_node/path") ACPI_CALL_PATH="/proc/acpi/call" diff --git a/scripts/dasharo-deploy b/scripts/dasharo-deploy index a3c32fb..c70bc10 100644 --- a/scripts/dasharo-deploy +++ b/scripts/dasharo-deploy @@ -13,6 +13,8 @@ source $DTS_ENV # shellcheck source=../include/dts-functions.sh source $DTS_FUNCS +# shellcheck source=../include/hal/dts-hal.sh +source $DTS_HAL [ -z "$SYSTEM_VENDOR" ] && error_exit "SYSTEM_VENDOR not given" [ -z "$SYSTEM_MODEL" ] && error_exit "SYSTEM_MODEL not given" @@ -447,17 +449,15 @@ backup() { # No descriptor, probably safe to read everything FLASHROM_ADD_OPT_READ="" fi - $FLASHROM -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} -r "${FW_BACKUP_DIR}"/rom.bin ${FLASHROM_ADD_OPT_READ} >> $FLASHROM_LOG_FILE 2>> $ERR_LOG_FILE + $FLASHROM read_firm_mock -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} -r "${FW_BACKUP_DIR}"/rom.bin ${FLASHROM_ADD_OPT_READ} >> $FLASHROM_LOG_FILE 2>> $ERR_LOG_FILE error_check "Failed to read BIOS firmware backup" if [ "$HAVE_EC" == "true" ]; then - echo "Checking for Open Source Embedded Controller firmware" - $DASHARO_ECTOOL info >> $ERR_LOG_FILE 2>&1 - if [ $? -eq 0 ]; then + if check_for_opensource_firmware; then echo "Device has already Open Source Embedded Controller firmware, do not backup EC..." else echo "Backing up EC firmware..." - $FLASHROM -p "$PROGRAMMER_EC" ${FLASH_CHIP_SELECT} -r "${FW_BACKUP_DIR}"/ec.bin >> $FLASHROM_LOG_FILE 2>> $ERR_LOG_FILE + $FLASHROM read_firm_mock -p "$PROGRAMMER_EC" ${FLASH_CHIP_SELECT} -r "${FW_BACKUP_DIR}"/ec.bin >> $FLASHROM_LOG_FILE 2>> $ERR_LOG_FILE error_check "Failed to read EC firmware backup" fi fi @@ -471,14 +471,14 @@ backup() { } romhole_migration() { - cbfstool $BIOS_UPDATE_FILE layout -w | grep -q "ROMHOLE" || return + $CBFSTOOL layout_mock $BIOS_UPDATE_FILE layout -w | grep -q "ROMHOLE" || return - $FLASHROM -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} -r /tmp/rom.bin --ifd -i bios >> $FLASHROM_LOG_FILE 2>> $ERR_LOG_FILE + $FLASHROM read_firm_mock -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} -r /tmp/rom.bin --ifd -i bios >> $FLASHROM_LOG_FILE 2>> $ERR_LOG_FILE error_check "Failed to read current firmware to migrate MSI ROMHOLE" if check_if_dasharo; then - cbfstool /tmp/rom.bin layout -w | grep -q "ROMHOLE" || return + $CBFSTOOL layout_mock /tmp/rom.bin layout -w | grep -q "ROMHOLE" || return # This one is rather unlikely to fail, but just in case print a warning - cbfstool /tmp/rom.bin read -r ROMHOLE -f /tmp/romhole.bin 2> /dev/null + $CBFSTOOL read_romhole_mock /tmp/rom.bin read -r ROMHOLE -f /tmp/romhole.bin 2> /dev/null if [ $? -ne 0 ]; then print_warning "Failed to migrate MSI ROMHOLE, your platform's unique SMBIOS/DMI data may be lost" return @@ -487,59 +487,59 @@ romhole_migration() { dd if=/tmp/rom.bin of=/tmp/romhole.bin skip=$((0x17C0000)) bs=128K count=1 iflag=skip_bytes > /dev/null 2>&1 fi - cbfstool "$BIOS_UPDATE_FILE" write -r ROMHOLE -f /tmp/romhole.bin -u 2> /dev/null + $CBFSTOOL "$BIOS_UPDATE_FILE" write -r ROMHOLE -f /tmp/romhole.bin -u 2> /dev/null } smbios_migration() { - echo -n "$(dmidecode -s system-uuid)" > $SYSTEM_UUID_FILE - echo -n "$(dmidecode -s baseboard-serial-number)" > $SERIAL_NUMBER_FILE + echo -n "$($DMIDECODE dump_var_mock -s system-uuid)" > $SYSTEM_UUID_FILE + echo -n "$($DMIDECODE dump_var_mock -s baseboard-serial-number)" > $SERIAL_NUMBER_FILE - COREBOOT_SEC=$(cbfstool $BIOS_UPDATE_FILE layout -w | grep "COREBOOT") - FW_MAIN_A_SEC=$(cbfstool $BIOS_UPDATE_FILE layout -w | grep "FW_MAIN_A") - FW_MAIN_B_SEC=$(cbfstool $BIOS_UPDATE_FILE layout -w | grep "FW_MAIN_B") + COREBOOT_SEC=$($CBFSTOOL layout_mock $BIOS_UPDATE_FILE layout -w | grep "COREBOOT") + FW_MAIN_A_SEC=$($CBFSTOOL layout_mock $BIOS_UPDATE_FILE layout -w | grep "FW_MAIN_A") + FW_MAIN_B_SEC=$($CBFSTOOL layout_mock $BIOS_UPDATE_FILE layout -w | grep "FW_MAIN_B") if [ -n "$COREBOOT_SEC" ]; then # if the migration can be done there for sure will be COREBOOT section echo "Beginning SMBIOS migration process..." echo "Migrate to COREBOOT section." - cbfstool $BIOS_UPDATE_FILE add -f $SERIAL_NUMBER_FILE -n serial_number -t raw -r COREBOOT - cbfstool $BIOS_UPDATE_FILE add -f $SYSTEM_UUID_FILE -n system_uuid -t raw -r COREBOOT + $CBFSTOOL $BIOS_UPDATE_FILE add -f $SERIAL_NUMBER_FILE -n serial_number -t raw -r COREBOOT + $CBFSTOOL $BIOS_UPDATE_FILE add -f $SYSTEM_UUID_FILE -n system_uuid -t raw -r COREBOOT fi if [ -n "$FW_MAIN_A_SEC" ]; then echo "Migrate to FW_MAIN_A section." - cbfstool $BIOS_UPDATE_FILE expand -r FW_MAIN_A - cbfstool $BIOS_UPDATE_FILE add -f $SERIAL_NUMBER_FILE -n serial_number -t raw -r FW_MAIN_A - cbfstool $BIOS_UPDATE_FILE add -f $SYSTEM_UUID_FILE -n system_uuid -t raw -r FW_MAIN_A - cbfstool $BIOS_UPDATE_FILE truncate -r FW_MAIN_A + $CBFSTOOL $BIOS_UPDATE_FILE expand -r FW_MAIN_A + $CBFSTOOL $BIOS_UPDATE_FILE add -f $SERIAL_NUMBER_FILE -n serial_number -t raw -r FW_MAIN_A + $CBFSTOOL $BIOS_UPDATE_FILE add -f $SYSTEM_UUID_FILE -n system_uuid -t raw -r FW_MAIN_A + $CBFSTOOL $BIOS_UPDATE_FILE truncate -r FW_MAIN_A fi if [ -n "$FW_MAIN_B_SEC" ]; then echo "Migrate to FW_MAIN_B section." - cbfstool $BIOS_UPDATE_FILE expand -r FW_MAIN_B - cbfstool $BIOS_UPDATE_FILE add -f $SERIAL_NUMBER_FILE -n serial_number -t raw -r FW_MAIN_B - cbfstool $BIOS_UPDATE_FILE add -f $SYSTEM_UUID_FILE -n system_uuid -t raw -r FW_MAIN_B - cbfstool $BIOS_UPDATE_FILE truncate -r FW_MAIN_B + $CBFSTOOL $BIOS_UPDATE_FILE expand -r FW_MAIN_B + $CBFSTOOL $BIOS_UPDATE_FILE add -f $SERIAL_NUMBER_FILE -n serial_number -t raw -r FW_MAIN_B + $CBFSTOOL $BIOS_UPDATE_FILE add -f $SYSTEM_UUID_FILE -n system_uuid -t raw -r FW_MAIN_B + $CBFSTOOL $BIOS_UPDATE_FILE truncate -r FW_MAIN_B fi } smmstore_migration() { echo -n "Backing up firmware configuration... " - $FLASHROM -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} -r /tmp/dasharo_dump.rom ${FLASHROM_ADD_OPT_READ} --fmap -i FMAP -i SMMSTORE >> $FLASHROM_LOG_FILE 2>> $ERR_LOG_FILE - cbfstool /tmp/dasharo_dump.rom read -r SMMSTORE -f /tmp/smmstore.bin >> $ERR_LOG_FILE 2>&1 || \ + $FLASHROM read_firm_mock -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} -r /tmp/dasharo_dump.rom ${FLASHROM_ADD_OPT_READ} --fmap -i FMAP -i SMMSTORE >> $FLASHROM_LOG_FILE 2>> $ERR_LOG_FILE + $CBFSTOOL read_smmstore_mock /tmp/dasharo_dump.rom read -r SMMSTORE -f /tmp/smmstore.bin >> $ERR_LOG_FILE 2>&1 || \ print_warning "Failed! Default settings will be used." - cbfstool "$BIOS_UPDATE_FILE" write -r SMMSTORE -f /tmp/smmstore.bin -u >> $ERR_LOG_FILE 2>&1 || \ + $CBFSTOOL "$BIOS_UPDATE_FILE" write -r SMMSTORE -f /tmp/smmstore.bin -u >> $ERR_LOG_FILE 2>&1 || \ print_warning "Failed! Default settings will be used." print_ok Done. } bootsplash_migration() { - $FLASHROM -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} -r /tmp/dasharo_dump.rom ${FLASHROM_ADD_OPT_READ} --fmap -i FMAP -i BOOTSPLASH >> $FLASHROM_LOG_FILE 2>> $ERR_LOG_FILE + $FLASHROM read_firm_mock -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} -r /tmp/dasharo_dump.rom ${FLASHROM_ADD_OPT_READ} --fmap -i FMAP -i BOOTSPLASH >> $FLASHROM_LOG_FILE 2>> $ERR_LOG_FILE # If no custom logo, return from bootsplash_migration early and don't show # unnecessary messages - cbfstool /tmp/dasharo_dump.rom extract -r BOOTSPLASH -n logo.bmp -f /tmp/logo.bmp >> $ERR_LOG_FILE 2>&1 || return 1 + $CBFSTOOL /tmp/dasharo_dump.rom extract -r BOOTSPLASH -n logo.bmp -f /tmp/logo.bmp >> $ERR_LOG_FILE 2>&1 || return 1 echo -n "Backing up custom boot logo... " - dcu logo $BIOS_UPDATE_FILE -l /tmp/logo.bmp >> $ERR_LOG_FILE 2>&1 || \ + $DCU logo $BIOS_UPDATE_FILE -l /tmp/logo.bmp >> $ERR_LOG_FILE 2>&1 || \ print_warning "Failed! Default boot splash will be used." || return 1 print_ok Done. } @@ -560,7 +560,7 @@ check_vboot_keys() { # No FMAP flashing? Also skip grep -q "\--fmap" <<< "$FLASHROM_ADD_OPT_UPDATE" || return - BINARY_KEYS=$(CBFSTOOL=$(which cbfstool) futility show $BIOS_UPDATE_FILE| grep -i 'key sha1sum') + BINARY_KEYS=$(CBFSTOOL=$(which cbfstool) $FUTILITY dump_vboot_keys show $BIOS_UPDATE_FILE| grep -i 'key sha1sum') if [ $BOARD_HAS_FD_REGION -eq 0 ]; then FLASHROM_ADD_OPT_READ="" @@ -568,9 +568,9 @@ check_vboot_keys() { FLASHROM_ADD_OPT_READ="--ifd -i bios" fi echo "Checking vboot keys." - $FLASHROM -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} ${FLASHROM_ADD_OPT_READ} -r /tmp/bios.bin > /dev/null 2>/dev/null - if [ $? -eq 0 ] && [ -f "/tmp/bios.bin" ]; then - FLASH_KEYS=$(CBFSTOOL=$(which cbfstool) futility show /tmp/bios.bin | grep -i 'key sha1sum') + $FLASHROM read_firm_mock -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} ${FLASHROM_ADD_OPT_READ} -r $BIOS_DUMP_FILE > /dev/null 2>/dev/null + if [ $? -eq 0 ] && [ -f $BIOS_DUMP_FILE ]; then + FLASH_KEYS=$(CBFSTOOL=$(which cbfstool) $FUTILITY dump_vboot_keys show $BIOS_DUMP_FILE | grep -i 'key sha1sum') diff <(echo "$BINARY_KEYS") <(echo "$FLASH_KEYS") > /dev/null 2>&1 # If keys are different we must additionally flash at least GBB region as well if [ $? -ne 0 ]; then @@ -611,21 +611,21 @@ blob_transmission() { if [ -n "$SCH5545_FW" ]; then error_file_check "$SCH5545_FW" "Failed to find SCH5545 EC firmware binary." echo -n "Adding SCH5545 EC firmware..." - cbfstool "$BIOS_UPDATE_FILE" add -f "$SCH5545_FW" -n sch5545_ecfw.bin -t raw + $CBFSTOOL "$BIOS_UPDATE_FILE" add -f "$SCH5545_FW" -n sch5545_ecfw.bin -t raw print_ok "Done" fi if [ -n "$ACM_BIN" ]; then error_file_check "$ACM_BIN" "Failed to find BIOS ACM binary." echo -n "Adding BIOS ACM..." - cbfstool "$BIOS_UPDATE_FILE" add -f "$ACM_BIN" -n txt_bios_acm.bin -t raw + $CBFSTOOL "$BIOS_UPDATE_FILE" add -f "$ACM_BIN" -n txt_bios_acm.bin -t raw print_ok "Done" fi if [ -n "$SINIT_ACM" ]; then error_file_check "$SINIT_ACM" "Failed to find Intel SINIT ACM binary." echo -n "Adding SINIT ACM..." - cbfstool "$BIOS_UPDATE_FILE" add -f "$SINIT_ACM" -n txt_sinit_acm.bin -t raw + $CBFSTOOL "$BIOS_UPDATE_FILE" add -f "$SINIT_ACM" -n txt_sinit_acm.bin -t raw print_ok "Done" fi } @@ -650,7 +650,7 @@ deploy_ec_firmware() { if [ "$FIRMWARE_VERSION" == "community_cap" ] || [ "$FIRMWARE_VERSION" == "dpp_cap" ]; then # Linux Kernel driver is responsible for handling UEFI Capsule Updates, so # the capsule should be fed to a specific device: - cat "$EC_UPDATE_FILE" > "$CAP_UPD_DEVICE" + $CAP_UPD_TOOL "$EC_UPDATE_FILE" # Return after updating. The below code is for flashrom updates (using # binaries) only return 0 @@ -662,13 +662,11 @@ deploy_ec_firmware() { return 0 elif [ "$_mode" == "install" ]; then - echo "Checking for Open Source Embedded Controller firmware" - $DASHARO_ECTOOL info >> $ERR_LOG_FILE 2>&1 - if [ $? -eq 0 ]; then + if check_for_opensource_firmware; then echo "Device has already Open Source Embedded Controller firmware, do not flash EC..." else - _ec_fw_version=$($FLASHROM -p "$PROGRAMMER_EC" ${FLASH_CHIP_SELECT} | grep "Mainboard EC Version" | tr -d ' ' | cut -d ':' -f 2) + _ec_fw_version=$($FLASHROM get_ec_firm_version_mock check -p "$PROGRAMMER_EC" ${FLASH_CHIP_SELECT} | grep "Mainboard EC Version" | tr -d ' ' | cut -d ':' -f 2) if [ "$_ec_fw_version" != "$COMPATIBLE_EC_FW_VERSION" ]; then echo "Installing EC..." @@ -692,7 +690,7 @@ firmware_pre_updating_routine(){ check_flash_lock if [ "$HAVE_EC" == "true" ]; then - $DASHARO_ECTOOL info >> $ERR_LOG_FILE 2>&1 + check_for_opensource_firmware error_check "Device does not have Dasharo EC firmware - cannot continue update!" fi @@ -704,7 +702,7 @@ firmware_pre_updating_routine(){ bootsplash_migration fi - cbfstool "$BIOS_UPDATE_FILE" extract -r COREBOOT -n config -f "$BIOS_UPDATE_CONFIG_FILE" + $CBFSTOOL read_bios_conffile_mock "$BIOS_UPDATE_FILE" extract -r COREBOOT -n config -f "$BIOS_UPDATE_CONFIG_FILE" grep -q "CONFIG_VBOOT=y" "$BIOS_UPDATE_CONFIG_FILE" HAVE_VBOOT="$?" @@ -728,7 +726,7 @@ firmware_pre_installation_routine(){ check_if_me_disabled set_intel_regions_update_params "-N --ifd -i bios" - cbfstool "$BIOS_UPDATE_FILE" extract -r COREBOOT -n config -f "$BIOS_UPDATE_CONFIG_FILE" + $CBFSTOOL read_bios_conffile_mock "$BIOS_UPDATE_FILE" extract -r COREBOOT -n config -f "$BIOS_UPDATE_CONFIG_FILE" grep "CONFIG_VBOOT=y" "$BIOS_UPDATE_CONFIG_FILE" HAVE_VBOOT="$?" @@ -774,7 +772,7 @@ deploy_firmware(){ if [ "$FIRMWARE_VERSION" == "community_cap" ] || [ "$FIRMWARE_VERSION" == "dpp_cap" ]; then # Linux Kernel driver is responsible for handling UEFI Capsule Updates, so # the capsule should be fed to a specific device: - cat "$BIOS_UPDATE_FILE" > "$CAP_UPD_DEVICE" + $CAP_UPD_TOOL "$BIOS_UPDATE_FILE" # Return after updating. The below code is for flashrom updates (using # binaries) only. return 0 @@ -924,7 +922,7 @@ install_workflow() { it5570_shutdown else send_dts_logs - ${CMD_REBOOT} + ${REBOOT} fi } @@ -961,7 +959,7 @@ update_workflow() { "$BOARD_MODEL" == "PRO Z690-A (MS-7D25)" || \ "$BOARD_MODEL" == "PRO Z690-A WIFI (MS-7D25)" ) ]]; then - cpu_gen_check=$(lscpu | grep -F "Model name" | grep -E "\-(13|14)[0-9]{3}" | wc -l) + cpu_gen_check=$($LSCPU | grep -F "Model name" | grep -E "\-(13|14)[0-9]{3}" | wc -l) if [ $cpu_gen_check -ne 0 ]; then echo "You have a 13th gen or above CPU and are trying to flash Dasharo v1.1.1 on a MSI PRO Z690-A DDR4 or DDR5 board" @@ -1025,7 +1023,7 @@ update_workflow() { echo "Rebooting" sleep 1 send_dts_logs - ${CMD_REBOOT} + ${REBOOT} fi } @@ -1060,8 +1058,8 @@ restore() { if [ ! $? -eq 0 ]; then uuid_string="" fi - uuid_string="${mac_addr}_$(dmidecode -s system-product-name)" - uuid_string+="_$(dmidecode -s system-manufacturer)" + uuid_string="${mac_addr}_$($DMIDECODE dump_var_mock -s system-product-name)" + uuid_string+="_$($DMIDECODE dump_var_mock -s system-manufacturer)" uuid="$(uuidgen -n @x500 -N $uuid_string -s)" case ${OPTION} in @@ -1127,7 +1125,7 @@ restore() { check_blobs_in_binary /tmp/logs/rom.bin check_if_me_disabled set_intel_regions_update_params "-N --ifd -i bios" - flashrom -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} ${FLASHROM_ADD_OPT_REGIONS} -w "/tmp/logs/rom.bin" >> $FLASHROM_LOG_FILE 2>> $ERR_LOG_FILE + $FLASHROM -p "$PROGRAMMER_BIOS" ${FLASH_CHIP_SELECT} ${FLASHROM_ADD_OPT_REGIONS} -w "/tmp/logs/rom.bin" >> $FLASHROM_LOG_FILE 2>> $ERR_LOG_FILE error_check "Failed to restore BIOS firmware! You can try one more time." print_ok "Successfully restored firmware" else @@ -1165,6 +1163,7 @@ fi board_config check_flash_chip + if [ -n "$PLATFORM_SIGN_KEY" ]; then get_signing_keys fi diff --git a/scripts/dts-boot b/scripts/dts-boot index 7d71f34..03b9ff0 100644 --- a/scripts/dts-boot +++ b/scripts/dts-boot @@ -11,8 +11,13 @@ FUM_EFIVAR="/sys/firmware/efi/efivars/FirmwareUpdateMode-d15b327e-ff2d-4fc1-abf6 export DTS_FUNCS="$SBIN_DIR/dts-functions.sh" export DTS_ENV="$SBIN_DIR/dts-environment.sh" export DTS_SUBS="$SBIN_DIR/dts-subscription.sh" +export DTS_HAL="$SBIN_DIR/dts-hal.sh" +export DTS_MOCK_COMMON="$SBIN_DIR/common-mock-func.sh" export DTS_LOG_FILE="/tmp/dts.log" +# shellcheck source=../include/hal/dts-hal.sh +source $DTS_HAL + if [ -f $FUM_EFIVAR ]; then $SBIN_DIR/dasharo-deploy update fum else diff --git a/scripts/ec_transition b/scripts/ec_transition index e556bee..ef199c3 100644 --- a/scripts/ec_transition +++ b/scripts/ec_transition @@ -8,6 +8,8 @@ source $DTS_ENV # shellcheck source=../include/dts-functions.sh source $DTS_FUNCS +# shellcheck source=../include/hal/dts-hal.sh +source $DTS_HAL board_config() { case "$SYSTEM_VENDOR" in @@ -46,15 +48,6 @@ board_config() { esac } -check_for_opensource_firmware() -{ - echo "Checking for opensource firmware" - $DASHARO_ECTOOL info >> /dev/null 2>&1 - if [ $? -eq 0 ]; then - error_exit "Device has already Open Source Embedded Controller firmware, aborting..." - fi -} - download_files() { wait_for_network_connection @@ -81,7 +74,7 @@ install() { error_check "Failed to verify Dasharo firmware" if [ "$HAVE_EC" == "true" ]; then - _ec_fw_version=$($FLASHROM -p ${PROGRAMMER_EC} | grep "Mainboard EC Version" | tr -d ' ' | cut -d ':' -f 2) + _ec_fw_version=$($FLASHROM get_ec_firm_version_mock -p ${PROGRAMMER_EC} | grep "Mainboard EC Version" | tr -d ' ' | cut -d ':' -f 2) if [ "$_ec_fw_version" != "$COMPATIBLE_EC_FW_VERSION" ]; then echo "EC version: $_ec_fw_version is not supported, update required" @@ -100,7 +93,7 @@ install() { if [ "$NEED_EC_RESET" = "true" ]; then it5570_shutdown else - ${CMD_POWEROFF} + ${POWEROFF} fi } @@ -115,7 +108,9 @@ ROOT_DIR="/" [ -z "$SYSTEM_VENDOR" ] && error_exit "SYSTEM_VENDOR not given" [ -z "$SYSTEM_MODEL" ] && error_exit "SYSTEM_MODEL not given" -check_for_opensource_firmware +if check_for_opensource_firmware; then + error_exit "Device has already Open Source Embedded Controller firmware, aborting..." +fi board_config download_files install