Files
rpi-eeprom/test/test-rpi-eeprom-config
Tim Gover 1ba58068ea Set unused data to zero if size of config is reduced
If the size of bootconf.txt is reduced then set the unused data
to all ones instead of leaving garbage at the end. The EEPROM
header contains the actual file but this makes it easier to
verify the image and makes overreads more obvious.
2019-09-24 13:39:42 +01:00

121 lines
3.4 KiB
Bash
Executable File

#!/bin/sh
set -e
script_dir="$(cd "$(dirname "$0")" && pwd)"
die() {
echo "ERROR"
echo "$@" >&2
exit 1
}
TMP_CONFIG=""
TMP_EEPROM=""
TMP_EEPROM2=""
cleanup() {
rm -f "${TMP_CONFIG}" -f "${TMP_EEPROM}" "${TMP_EEPROM2}"
TMP_CONFIG=""
TMP_EEPROM=""
TMP_EEPROM2=""
}
trap cleanup EXIT
check_reduce_size()
{
# Verify that unused bytes are set to 0xff if the size of the config file is reduced.
echo "check_update $1 $2"
image="${script_dir}/$1"
conf="${script_dir}/$2"
# Check that the production config file can be read correctly
image_md5="$(md5sum "${image}" | awk '{print $1}')"
TMP_CONFIG="$(mktemp)"
# Generate a new EEPROM with larger config file
cp -f "${conf}" "${TMP_CONFIG}"
echo "Add some random text to the config file" >> "${TMP_CONFIG}"
TMP_EEPROM="$(mktemp)"
"${script_dir}/../rpi-eeprom-config" \
"${image}" \
--config "${TMP_CONFIG}" \
--out "${TMP_EEPROM}"
# Check that the new image is different
actual_md5="$(md5sum "${TMP_EEPROM}" | awk '{print $1}')"
[ "${image_md5}" != "${actual_md5}" ] || die "EEPROM images should be different"
# Re-apply the original configuration and make sure the image is the same
TMP_EEPROM2="$(mktemp)"
"${script_dir}/../rpi-eeprom-config" \
"${TMP_EEPROM}" \
--config "${conf}" \
--out "${TMP_EEPROM2}"
# Check that applying the EEPROM config file again gets back to the original image
actual_md5="$(md5sum "${TMP_EEPROM2}" | awk '{print $1}')"
[ "${image_md5}" = "${actual_md5}" ] || die "Image should be the same as original"
}
check_loopback()
{
echo "check_update $1 $2"
image="${script_dir}/$1"
conf="${script_dir}/$2"
# Check that the production config file can be read correctly
expected_md5="$(md5sum "${conf}" | awk '{print $1}')"
actual_md5="$("${script_dir}/../rpi-eeprom-config" "${image}" | md5sum | awk '{print $1}')"
[ "${actual_md5}" = "${expected_md5}" ] || die "Config-read: checksum mismatch"
# Check that overwriting the config section produces an identical binary
TMP_EEPROM="$(mktemp)"
"${script_dir}/../rpi-eeprom-config" \
"${image}" \
--config "${conf}" \
--out "${TMP_EEPROM}"
expected_md5="$(md5sum "${image}" | awk '{print $1}')"
actual_md5="$(md5sum "${TMP_EEPROM}" | awk '{print $1}')"
[ "${actual_md5}" = "${expected_md5}" ] || die "EEPROM loopback: checksum mismatch"
}
# Update the EEPROM with a new config and check the expected image is produced
check_update()
{
echo "check_update $1 $2 $3"
image="${script_dir}/$1"
ref_image="${script_dir}/$2"
conf="${script_dir}/$3"
expected_md5="$(md5sum "${ref_image}" | awk '{print $1}')"
TMP_EEPROM="$(mktemp)"
"${script_dir}/../rpi-eeprom-config" \
"${image}" \
--config "${conf}" \
--out "${TMP_EEPROM}"
actual_md5="$(md5sum "${TMP_EEPROM}" | awk '{print $1}')"
if [ "${actual_md5}" != "${expected_md5}" ]; then
hexdump -C "${TMP_EEPROM}" > "tmp.hex"
die "EEPROM update: checksum mismatch"
fi
}
check_loopback "../firmware/critical/pieeprom-2019-05-10.bin" "bootconf-2019-05-10.txt"
cleanup
check_loopback "../firmware/critical/pieeprom-2019-07-15.bin" "bootconf-2019-07-15.txt"
cleanup
check_update "../firmware/critical/pieeprom-2019-07-15.bin" "pieeprom-2019-07-15-freeze.bin" "bootconf-2019-07-15-freeze.txt"
cleanup
check_reduce_size "../firmware/critical/pieeprom-2019-05-10.bin" "bootconf-2019-05-10.txt"
cleanup