gnuboot-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v1 17/18] packages: images: tests: require essential cbfs files.


From: Denis 'GNUtoo' Carikli
Subject: [PATCH v1 17/18] packages: images: tests: require essential cbfs files.
Date: Fri, 29 Nov 2024 20:14:31 +0100

Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
---
 resources/packages/roms/release | 10 +++-
 resources/packages/roms/test    | 95 +++++++++++++++++++++++++++++++--
 2 files changed, 101 insertions(+), 4 deletions(-)

diff --git a/resources/packages/roms/release b/resources/packages/roms/release
index 571eecbd..0a61c2fd 100755
--- a/resources/packages/roms/release
+++ b/resources/packages/roms/release
@@ -50,6 +50,9 @@ fi
 printf "Building ROM image archives for version %s\n" "${version}"
 
 (
+    # For consistency reasons, the same logic than in
+    # resources/packages/roms/test is being used. If you improve the
+    # code below, don't forget to also improve the test code.
     cd bin/
     for target in *; do
         if [ ! -d "${target}/" ]; then
@@ -62,9 +65,14 @@ printf "Building ROM image archives for version %s\n" 
"${version}"
         printf "%s\n" "${versiondate}" > "${target}/versiondate"
         printf "%s\n" "${projectname}" > "${target}/projectname"
         rm -f ../release/roms/"${projectname}"-"${version}"_"${target##*/}".tar
+
         tar -cf \
             ../release/roms/"${projectname}"-"${version}"_"${target##*/}".tar \
-            "${target}/"
+            "${target}"/*.rom \
+            "${target}"/version \
+            "${target}"/versiondate \
+            "${target}"/projectname
+
         xz -vv -9e -f \
            ../release/roms/"${projectname}"-"${version}"_"${target##*/}".tar
     done
diff --git a/resources/packages/roms/test b/resources/packages/roms/test
index 75cab7e9..8af8d2a4 100755
--- a/resources/packages/roms/test
+++ b/resources/packages/roms/test
@@ -61,7 +61,7 @@ run_qemu_x86_64()
         ${extra_qemu_args}
 }
 
-test_gnuboot_with_lvm()
+check_gnuboot_with_lvm()
 {
     source config.sh
 
@@ -95,19 +95,108 @@ test_gnuboot_with_lvm()
     fi
 }
 
+check_cbfs_image_log()
+{
+    image_name="$1"
+    cbfs_image_log="$2"
+    func="check_cbfs_image_log"
+
+    # All the files below are required for booting.
+    required_files="
+        bootblock \
+        fallback/romstage \
+        fallback/ramstage \
+        fallback/payload"
+
+    # This is the DSDT ACPI table. It may or may not be required for
+    # booting but it's present in all the images, so it's good to
+    # check for it.
+    required_files="${required_files} fallback/dsdt.aml"
+
+    # We also make sure to keep the build configuration and Coreboot
+    # revision used as they can be useful to identify an image or to
+    # rebuild it.
+    required_files="${required_files} config revision"
+
+    # This is required on some computers to make the internal keyboard
+    # work with SeaBIOS: This settings configure how much time SeaBIOS
+    # should wait for the builtin (PS2) keyboard to properly
+    # initialize.
+    required_files="${required_files} etc/ps2-keyboard-spinup"
+
+    # All the supported computers use CMOS for configuration so we
+    # also need the layout to be there.
+    required_files="${required_files} cmos.layout"
+
+    # Currently 16 MiB MacBook images lack cmos.default (bug #66494:
+    # https://savannah.gnu.org/bugs/index.php?66494). However,
+    # accoding to neox who is working on a paper on the KGPE-D16 RAM
+    # initialization, wrong values of the hypertransport_speed_limit
+    # CMOS setting can prevent the boot.  Since we don't know how the
+    # CMOS values can be interpretated if cmos.default is missing we
+    # should uncomment the next line when the bug #66494 is fixed.
+    # required_files="${required_files}
+
+    for file in ${required_files} ; do
+        if ! grep -q "^${file}" "${cbfs_image_log}" ; then
+            printf '[ FAIL ] %s: %s not found in %s.\n' \
+                   "${func}" "${file}" "${image_name}"
+            exit 1
+       fi
+    done
+
+    printf '[ PASS ] %s: found all known required files inside %s.\n' \
+           "${func}" "${image_name}"
+}
+
+check_cbfs_images()
+{
+    current_dir="$(pwd)"
+
+    # cbfstool should have been already built if we have images to
+    # check.
+    cbfstool="$(realpath coreboot/default/util/cbfstool/cbfstool)"
+
+    # For consistency reasons, the same logic than in
+    # resources/packages/roms/release is being used. If you improve
+    # the code below, don't forget to also improve the release code.
+    cd bin/
+    for target in *; do
+        if [ ! -d "${target}/" ]; then
+            continue
+        fi
+
+        # The resulting log files don't go inside the release
+        # tarballs. See the code in resources/packages/roms/release
+        # for more details.
+        for image in "${target}"/*.rom ; do
+            "${cbfstool}" "${image}" print > "${image}".cbfs.log
+            check_cbfs_image_log \
+                "${image}" \
+                "${image}".cbfs.log
+        done
+    done
+
+    cd "${current_dir}"
+}
+
 if [ $# -eq 1 ] && { [ "$1" = "-h" ] || [ "$1" == "--help" ] ;} ; then
     usage "${progname}"
     exit 0
 elif [ $# -eq 0 ] ; then
+
+    # Test that we don't have missing known files inside CBFS.
+    check_cbfs_images
+
     # This test is mainly meant to verify if the grub configuration
     # can boot a Trisquel rootfs with LVM.
-    test_gnuboot_with_lvm \
+    check_gnuboot_with_lvm \
         "Test GRUB images and its grub.cfg with a Trisquel LVM install" \
         "bin/qemu-pc_2mb/grub_qemu-pc_2mb_corebootfb_usqwerty.rom"
 
     # This test is mainly meant to verify if the SeaBIOS payload is
     # broken or not.
-    test_gnuboot_with_lvm \
+    check_gnuboot_with_lvm \
         "Test SeaBIOS images with a Trisquel (LVM) install" \
         "bin/qemu-pc_2mb/seabios_qemu-pc_2mb_txtmode_usqwerty.rom"
 else
-- 
2.46.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]