Milosz Wasilewski | 7a39d55 | 2021-07-29 16:05:01 +0100 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | # SPDX-License-Identifier: GPL-2.0-only |
| 3 | # Copyright (C) 2021 Foundries.io Ltd. |
| 4 | |
| 5 | # shellcheck disable=SC1091 |
Milosz Wasilewski | c5c3faa | 2023-10-30 14:39:15 +0000 | [diff] [blame] | 6 | . ../../lib/sh-test-lib |
Milosz Wasilewski | 7a39d55 | 2021-07-29 16:05:01 +0100 | [diff] [blame] | 7 | OUTPUT="$(pwd)/output" |
| 8 | RESULT_FILE="${OUTPUT}/result.txt" |
| 9 | export RESULT_FILE |
Milosz Wasilewski | 5d0c0c0 | 2021-09-23 12:26:33 +0100 | [diff] [blame] | 10 | TYPE="kernel" |
| 11 | UBOOT_VAR_TOOL=fw_printenv |
| 12 | export UBOOT_VAR_TOOL |
| 13 | UBOOT_VAR_SET_TOOL=fw_setenv |
| 14 | export UBOOT_VAR_SET_TOOL |
Milosz Wasilewski | e7a2746 | 2023-11-16 13:18:11 +0000 | [diff] [blame] | 15 | DEBUG="false" |
Milosz Wasilewski | 7a39d55 | 2021-07-29 16:05:01 +0100 | [diff] [blame] | 16 | |
Milosz Wasilewski | 5d0c0c0 | 2021-09-23 12:26:33 +0100 | [diff] [blame] | 17 | usage() { |
| 18 | echo "\ |
Milosz Wasilewski | e7a2746 | 2023-11-16 13:18:11 +0000 | [diff] [blame] | 19 | Usage: $0 [-type <kernel|uboot>] [-u <u-boot var read>] [-s <u-boot var set>] [-d <true|false>] |
Milosz Wasilewski | 5d0c0c0 | 2021-09-23 12:26:33 +0100 | [diff] [blame] | 20 | |
| 21 | -t <kernel|uboot> |
| 22 | This determines type of corruption test |
| 23 | performed: |
| 24 | kernel: corrupt OTA updated kernel binary |
| 25 | uboot: corrupt OTA updated u-boot binary |
| 26 | -u <u-boot variable read tool> |
| 27 | Set the name of the tool to read u-boot variables |
| 28 | On the unsecured systems it will usually be |
| 29 | fw_printenv. On secured systems it might be |
| 30 | fiovb_printenv |
| 31 | -s <u-boot variable set tool> |
| 32 | Set the name of the tool to set u-boot variables |
| 33 | On the unsecured systems it will usually be |
| 34 | fw_setenv. On secured systems it might be |
| 35 | fiovb_setenv |
Milosz Wasilewski | e7a2746 | 2023-11-16 13:18:11 +0000 | [diff] [blame] | 36 | -d <true|false> Enables more debug messages. Default: false |
Milosz Wasilewski | 5d0c0c0 | 2021-09-23 12:26:33 +0100 | [diff] [blame] | 37 | " |
| 38 | } |
| 39 | |
Milosz Wasilewski | e7a2746 | 2023-11-16 13:18:11 +0000 | [diff] [blame] | 40 | while getopts "t:u:s:d:h" opts; do |
Milosz Wasilewski | 5d0c0c0 | 2021-09-23 12:26:33 +0100 | [diff] [blame] | 41 | case "$opts" in |
| 42 | t) TYPE="${OPTARG}";; |
| 43 | u) UBOOT_VAR_TOOL="${OPTARG}";; |
| 44 | s) UBOOT_VAR_SET_TOOL="${OPTARG}";; |
Milosz Wasilewski | e7a2746 | 2023-11-16 13:18:11 +0000 | [diff] [blame] | 45 | d) DEBUG="${OPTARG}";; |
Milosz Wasilewski | 5d0c0c0 | 2021-09-23 12:26:33 +0100 | [diff] [blame] | 46 | h|*) usage ; exit 1 ;; |
| 47 | esac |
| 48 | done |
Milosz Wasilewski | 7a39d55 | 2021-07-29 16:05:01 +0100 | [diff] [blame] | 49 | |
| 50 | # the script works only on builds with aktualizr-lite |
| 51 | # and lmp-device-auto-register |
| 52 | |
| 53 | ! check_root && error_msg "You need to be root to run this script." |
| 54 | create_out_dir "${OUTPUT}" |
| 55 | |
Milosz Wasilewski | 68e43d1 | 2022-07-19 10:34:18 +0100 | [diff] [blame] | 56 | SECONDARY_BOOT_VAR_NAME="fiovb.is_secondary_boot" |
| 57 | if [ "${UBOOT_VAR_TOOL}" != "fw_printenv" ]; then |
| 58 | SECONDARY_BOOT_VAR_NAME="is_secondary_boot" |
| 59 | fi |
| 60 | |
Milosz Wasilewski | 5d0c0c0 | 2021-09-23 12:26:33 +0100 | [diff] [blame] | 61 | ref_bootcount_after_reboot=4 |
| 62 | ref_rollback_after_reboot=1 |
| 63 | ref_bootupgrade_available_after_reboot=0 |
| 64 | ref_upgrade_available_after_reboot=0 |
| 65 | ref_fiovb_is_secondary_boot_after_reboot=0 |
| 66 | |
Milosz Wasilewski | 7a39d55 | 2021-07-29 16:05:01 +0100 | [diff] [blame] | 67 | # check u-boot variables |
| 68 | bootcount_after_reboot=$(uboot_variable_value bootcount) |
| 69 | echo "Bootcount: ${bootcount_after_reboot}" |
| 70 | # bootcount should be 4 despite the fact there was no boot failures in u-boot |
Milosz Wasilewski | 5d0c0c0 | 2021-09-23 12:26:33 +0100 | [diff] [blame] | 71 | compare_test_value "bootcount_after_reboot" "${ref_bootcount_after_reboot}" "${bootcount_after_reboot}" |
Milosz Wasilewski | 7a39d55 | 2021-07-29 16:05:01 +0100 | [diff] [blame] | 72 | rollback_after_reboot=$(uboot_variable_value rollback) |
| 73 | echo "Rollback: ${rollback_after_reboot}" |
Milosz Wasilewski | 5d0c0c0 | 2021-09-23 12:26:33 +0100 | [diff] [blame] | 74 | compare_test_value "rollback_after_reboot" "${ref_rollback_after_reboot}" "${rollback_after_reboot}" |
Milosz Wasilewski | 7a39d55 | 2021-07-29 16:05:01 +0100 | [diff] [blame] | 75 | upgrade_available_after_reboot=$(uboot_variable_value upgrade_available) |
Milosz Wasilewski | 5d0c0c0 | 2021-09-23 12:26:33 +0100 | [diff] [blame] | 76 | compare_test_value "upgrade_available_after_reboot" "${ref_upgrade_available_after_reboot}" "${upgrade_available_after_reboot}" |
Milosz Wasilewski | 20f2481 | 2022-03-18 16:57:11 +0000 | [diff] [blame] | 77 | if [ -f /usr/lib/firmware/version.txt ]; then |
| 78 | . /usr/lib/firmware/version.txt |
| 79 | bootupgrade_available_after_reboot=$(uboot_variable_value bootupgrade_available) |
| 80 | compare_test_value "bootupgrade_available_after_reboot" "${ref_bootupgrade_available_after_reboot}" "${bootupgrade_available_after_reboot}" |
Milosz Wasilewski | 7a39d55 | 2021-07-29 16:05:01 +0100 | [diff] [blame] | 81 | |
Milosz Wasilewski | 20f2481 | 2022-03-18 16:57:11 +0000 | [diff] [blame] | 82 | # shellcheck disable=SC2154 |
| 83 | ref_bootfirmware_version_after_reboot="${bootfirmware_version}" |
| 84 | if [ "${TYPE}" = "uboot" ]; then |
| 85 | ref_bootfirmware_version_after_reboot=0 |
| 86 | fi |
| 87 | bootfirmware_version_after_reboot=$(uboot_variable_value bootfirmware_version) |
| 88 | # shellcheck disable=SC2154 |
| 89 | compare_test_value "bootfirmware_version_after_reboot" "${ref_bootfirmware_version_after_reboot}" "${bootfirmware_version_after_reboot}" |
Milosz Wasilewski | 68e43d1 | 2022-07-19 10:34:18 +0100 | [diff] [blame] | 90 | fiovb_is_secondary_boot_after_reboot=$(uboot_variable_value "${SECONDARY_BOOT_VAR_NAME}") |
Milosz Wasilewski | 20f2481 | 2022-03-18 16:57:11 +0000 | [diff] [blame] | 91 | compare_test_value "fiovb_is_secondary_boot_after_reboot" "${ref_fiovb_is_secondary_boot_after_reboot}" "${fiovb_is_secondary_boot_after_reboot}" |
| 92 | else |
| 93 | report_skip "bootupgrade_available_after_reboot" |
| 94 | report_skip "bootfirmware_version_after_reboot" |
| 95 | report_skip "fiovb_is_secondary_boot_after_reboot" |
Milosz Wasilewski | 5d0c0c0 | 2021-09-23 12:26:33 +0100 | [diff] [blame] | 96 | fi |
Milosz Wasilewski | e7a2746 | 2023-11-16 13:18:11 +0000 | [diff] [blame] | 97 | |
| 98 | if [ "${DEBUG}" = "true" ]; then |
| 99 | journalctl --no-pager -u aktualizr-lite |
| 100 | fi |