[PATCH] RFC: efi: Attempt to support automatically running SCT

Heinrich Schuchardt xypron.glpk at gmx.de
Wed Dec 18 13:09:06 CET 2024


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 <sjg at chromium.org>
> ---
>
>   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



More information about the U-Boot mailing list