#!/bin/bash # SPDX-License-Identifier: BSD-3-Clause # Copyright (c) 2026 Open-IOV contributors # Build NVIDIA OpenRM kernel modules with Open-IOV vGPU VFIO symbols # This script ensures KBUILD_EXTRA_SYMBOLS is correctly passed to the build set -e OPEN_IOV_ROOT="${OPEN_IOV_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}" NVIDIA_OPENRM_DIR="$OPEN_IOV_ROOT/nvidia-open-gpu-kernel-modules" KERNEL_DIR="$OPEN_IOV_ROOT/kernel" SYMVERS_FILE="$KERNEL_DIR/Module.symvers" echo "=== Building NVIDIA OpenRM with Open-IOV vGPU VFIO symbols ===" echo "Open-IOV root: $OPEN_IOV_ROOT" echo "NVIDIA OpenRM dir: $NVIDIA_OPENRM_DIR" echo "Kernel Module.symvers: $SYMVERS_FILE" # Check if vgsp.ko has been built (provides Module.symvers) if [ ! -f "$SYMVERS_FILE" ]; then echo "ERROR: $SYMVERS_FILE not found!" echo "Please build vgsp.ko first: cd $OPEN_IOV_ROOT && make kernel" exit 1 fi echo "Found Module.symvers with $(wc -l < "$SYMVERS_FILE") exported symbols" echo "Key vGPU symbols:" grep -i vgpu "$SYMVERS_FILE" | head -5 # Build NVIDIA OpenRM kernel modules cd "$NVIDIA_OPENRM_DIR/kernel-open" # Clean previous build to ensure fresh symbol resolution echo "Cleaning previous build..." make clean echo "Building NVIDIA OpenRM modules with KBUILD_EXTRA_SYMBOLS..." KBUILD_EXTRA_SYMBOLS="$SYMVERS_FILE" make -j$(nproc) modules # Verify the symbols are resolved echo "" echo "=== Verification ===" echo "Checking nvidia.ko for vGPU VFIO symbols..." if modinfo nvidia.ko 2>/dev/null | grep -q "nvidia_vgpu_vfio"; then echo "✓ nvidia.ko has vGPU VFIO symbols" else echo "⚠ nvidia.ko may not have vGPU VFIO symbols (check modpost output above)" fi echo "" echo "Checking Module.symvers for vGPU symbols..." grep -i vgpu Module.symvers | head -5 echo "" echo "=== Build Complete ===" echo "nvidia.ko location: $NVIDIA_OPENRM_DIR/kernel-open/nvidia.ko" echo "" echo "To load the stack:" echo " sudo insmod $NVIDIA_OPENRM_DIR/kernel-open/nvidia.ko" echo " sudo insmod $KERNEL_DIR/vgsp.ko" echo " sudo cp $OPEN_IOV_ROOT/firmware/57X-GSP/570.144/gsp-570.144.fwimage.bin /lib/firmware/" echo " ./scripts/create_mdev.sh" echo " ./scripts/launch_qemu_vgpu.sh"