On 11.12.24 01:46, Simon Glass wrote:
This is a feeble attempt to update the qemu script to run a selection of
UEFI tests. It copies a .seq file into the disk so it can be read by
SCT.

It doesn't seem to work and I am not sure why. I am posting it in case
someone else has ideas or wants to pic it up.

Once Ilias' CI solution is in place, I can perhaps come back to this.

Signed-off-by: Simon Glass <[email protected]>
---

  scripts/build-qemu.sh | 56 +++++++++++++++++++++++++++++++++++--------
  1 file changed, 46 insertions(+), 10 deletions(-)

diff --git a/scripts/build-qemu.sh b/scripts/build-qemu.sh
index 0ff53593cf9..f9ee0072573 100755
--- a/scripts/build-qemu.sh
+++ b/scripts/build-qemu.sh
@@ -21,20 +21,28 @@ usage() {
        fi
        echo "Usage: $0 -aBkrsw"
        echo
-       echo "   -a   - Select architecture (arm, x86)"
-       echo "   -B   - Don't build; assume a build exists"
-       echo "   -k   - Use kvm (kernel-based Virtual Machine)"
-       echo "   -o   - Run Operating System ('ubuntu' only for now)"
-       echo "   -r   - Run QEMU with the image"
-       echo "   -R   - Select OS release (e.g. 24.04)"
-       echo "   -s   - Use serial only (no display)"
-       echo "   -w   - Use word version (32-bit)" ) >&2
+       echo "   -a <arch> - Select architecture (arm, x86)"

How about qemu-riscv64_smode_defconfig for RISC-V?

+       echo "   -B        - Don't build; assume a build exists"
+       echo "   -e        - Run UEFI Self-Certification Test (SCT)"
+       echo "   -k        - Use kvm (kernel-based Virtual Machine)"
+       echo "   -o <name> - Run Operating System ('ubuntu' only for now)"
+       echo "   -r        - Run QEMU with the image"
+       echo "   -R <os>   - Select OS release (e.g. 24.04)"
+       echo "   -s        - Use serial only (no display)"
+       echo "   -S <seq>  - Select SCT sequence-file"
+       echo "   -w        - Use word version (32-bit)" ) >&2


A typical definition of word size is:

Word "size" refers to the amount of data a CPU's internal data registers
can hold and process at one time.

I.e. a word on a 64-bit architecture has 64 bit.

%s/Use word version (32-bit)/Use 32-bit architecture/

Wouldn't it be the best to get rid of this parameter and just use
parameter -a with values

- arm
- arm64
- riscv64
- loongson64
- x86
- x86_64

        exit 1
  }

  # Directory tree for OS images
  imagedir=${imagedir-/vid/software/linux}

+# Directory for UEFI Self-Certification Test (SCT)
+sctdir=${sctdir-/vid/software/devel/uefi/sct}
+
+# Mount point for use when writing to disk images
+mnt=${mnt-/mnt}
+
  # architecture (arm or x86)
  arch=arm

@@ -65,7 +73,7 @@ kvm=
  # We avoid in-tree build because it gets confusing trying different builds
  ubdir=${ubdir-/tmp/b}

-while getopts "a:Bko:rR:sw" opt; do
+while getopts "a:Beko:rR:sS:w" opt; do
        case "${opt}" in
        a)
                arch=$OPTARG
@@ -73,6 +81,17 @@ while getopts "a:Bko:rR:sw" opt; do
        B)
                build=
                ;;
+       e)
+               extra+=" -m 4G -smp 4"
+               extra+=" -display none"
+               extra+=" -device virtio-gpu-pci"
+               extra+=" -device qemu-xhci"
+               extra+=" -device usb-kbd"
+               extra+=" -drive 
file=${sctdir}/sct.img,format=raw,if=none,id=vda"
+               extra+=" -device virtio-blk-device,drive=vda,bootindex=1"
+               extra+=" -device virtio-net-device,netdev=net0"
+               extra+=" -netdev user,id=net0"
+               ;;
        k)
                kvm="-enable-kvm"
                ;;
@@ -91,6 +110,9 @@ while getopts "a:Bko:rR:sw" opt; do
        s)
                serial=1
                ;;
+       S)
+               seq=$OPTARG
+               ;;
        w)
                bitness=32
                ;;
@@ -105,6 +127,19 @@ build_u_boot() {
        buildman -w -o $DIR --board $BOARD -I || exit $?
  }

+# Write the SCT test-sequence file into the SCT image
+update_sct_seq() {
+       if [[ -z "${seq}" ]]; then
+               return
+       fi
+       LOOP=$(sudo losetup --show -f -P "${sctdir}/sct.img")
+       PART="${LOOP}p1"
+       sudo mount -o loop ${PART} ${mnt} -o uid=$(id -u),gid=$(id -g)
+       cp "${seq}" "${mnt}/."

This will not work. The sequence file must be in Sequence directory of
the installed SCT and you must specify the filename when invoking the SCT.

To avoid instance dependent file names you may copy the user provided
sequence file always to the same location mnt/SCT/Sequence/uboot.seq.

Best regards

Heinrich

+       sudo umount ${mnt}
+       sudo losetup -d ${LOOP}
+}
+
  # Run QEMU with U-Boot
  run_qemu() {
        if [[ -n "${os_image}" ]]; then
@@ -129,7 +164,7 @@ arm)
        BOARD="qemu_arm"
        BIOS="u-boot.bin"
        qemu=qemu-system-arm
-       extra+=" -machine virt"
+       extra+=" -machine virt -accel tcg"
        suffix="arm"
        if [[ "${bitness}" == "64" ]]; then
                BOARD="qemu_arm64"
@@ -168,6 +203,7 @@ DIR=${ubdir}/${BOARD}

  if [[ -n "${build}" ]]; then
        build_u_boot
+       update_sct_seq
  fi

  if [[ -n "${run}" ]]; then

Reply via email to