summaryrefslogtreecommitdiffstats
path: root/scripts/build_nvidia_openrm.sh
blob: 89e058bdbd5be4af3d565a3148fab51fc751f128 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/bin/bash
# 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 open-iov-vfio.ko has been built (provides Module.symvers)
if [ ! -f "$SYMVERS_FILE" ]; then
    echo "ERROR: $SYMVERS_FILE not found!"
    echo "Please build open-iov-vfio.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/open-iov-vfio.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"