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

Simon Glass sjg at chromium.org
Thu Dec 19 16:07:04 CET 2024


Hi Heinrich,

On Wed, 18 Dec 2024 at 05:09, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>
> 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

Yes, that might be better. My intent was to try to default to 64-bit,
since that is what we normally want, but it isn't a very good flag.
The efi script has the same thing.

On the other hand, it is annoying to say '64' when that is almost
always what we mean. Perhaps a --32 flag?

>
> >       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.

OK, thanks, I'll take another look. It would be nice to get this
working, although I believe Ilias will have a patch for CI before
long.

Regards,
Simon


More information about the U-Boot mailing list