summaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-09-13 18:36:21 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-09-13 18:36:21 -0400
commit00e54c13c7c9030c4d5f7151467f2d85a3730e29 (patch)
tree17a45239df8d2e4912ff3697ed06e85a10b969de /Makefile
downloadopen-iov-00e54c13c7c9030c4d5f7151467f2d85a3730e29.tar.gz
open-iov-00e54c13c7c9030c4d5f7151467f2d85a3730e29.zip
Initial commit: Open-IOV vGPU-IO complete stack
- Firmware decompilation: GSP 570.144W (28.5MB ELF, RV64IMAC), 132 decompiled C files - Kernel modules: nvidia.ko (34MB, OpenRM), open-iov-vfio.ko (2.8MB, VFIO mdev), gsp-vgpu.ko (1.8MB, guest driver) - Userspace: libiov.so/libvgpu.so (76KB), example_vgpu (28KB), rpc_emulator.c - PCI config space emulation (256B with PM, MSI, MSI-X, PCIe caps) - 12 RPC types fully mapped from firmware decompilation - BAR trap, WPR, scheduling, notification, migration emulation - Helper scripts: load_vgpu_stack, create_mdev, launch_qemu_vgpu, test_vgpu_stack, setup_guest_driver, unload_vgpu_stack - Architecture documentation - Wiki: 10 technical documents - Git LFS for large binaries (.ko, .bin, .iso, .img, .o, ghidra repos) - nvidia-open-gpu-kernel-modules as submodule
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile129
1 files changed, 129 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..75becc8
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,129 @@
+# Open-IOV Top-Level Build System
+# Builds: kernel module (open-iov-vfio.ko), userspace lib (open-iov.so), examples, tests
+
+SHELL := /bin/bash
+
+# Directories
+KERNEL_DIR := kernel
+DRIVER_DIR := driver
+USERSPACE_DIR := userspace
+FIRMWARE_DIR := firmware/570-GSP
+
+# Kernel module
+KERNEL_MODULE := open-iov-vfio.ko
+KERNEL_MODULE_SRC := $(KERNEL_DIR)/$(KERNEL_MODULE)
+
+# Userspace library
+USERSPACE_LIB := libiov.so
+USERSPACE_LIB_SRC := $(USERSPACE_DIR)/lib/$(USERSPACE_LIB)
+USERSPACE_LIB_LINK := $(USERSPACE_DIR)/lib/libvgpu.so # compat symlink
+
+# Examples
+EXAMPLES := example_vgpu
+
+# Default target
+.PHONY: all kernel userspace examples tests clean install firmware-check help
+
+all: kernel userspace examples
+
+help:
+ @echo "Open-IOV Build System"
+ @echo ""
+ @echo "Targets:"
+ @echo " all - Build kernel module, userspace library, examples"
+ @echo " kernel - Build open-iov-vfio.ko"
+ @echo " userspace - Build open-iov.so and libvgpu.so compat link"
+ @echo " examples - Build example applications"
+ @echo " tests - Build kernel and userspace tests"
+ @echo " clean - Clean all build artifacts"
+ @echo " install - Install kernel module and userspace library"
+ @echo " firmware-check - Verify GSP firmware exists"
+ @echo ""
+
+# Kernel module build
+kernel: $(KERNEL_MODULE_SRC)
+
+$(KERNEL_MODULE_SRC): firmware-check
+ $(MAKE) -C $(KERNEL_DIR)
+
+# Userspace library build
+userspace: $(USERSPACE_LIB_SRC) $(USERSPACE_LIB_LINK)
+
+$(USERSPACE_LIB_SRC):
+ $(MAKE) -C $(USERSPACE_DIR)/lib
+
+$(USERSPACE_LIB_LINK): $(USERSPACE_LIB_SRC)
+ @ln -sf $(USERSPACE_LIB) $(USERSPACE_DIR)/lib/libvgpu.so
+ @ln -sf $(USERSPACE_LIB) $(USERSPACE_DIR)/lib/libvgpu.so.1
+ @ln -sf $(USERSPACE_LIB) $(USERSPACE_DIR)/lib/libvgpu.so.1.0.0
+
+# Examples build
+examples: userspace
+ $(MAKE) -C $(USERSPACE_DIR)/examples
+
+# Tests build
+tests: kernel userspace
+ $(MAKE) -C $(KERNEL_DIR)/tests
+ $(MAKE) -C $(USERSPACE_DIR)/tests
+
+# Firmware check
+firmware-check:
+ @if [ ! -f $(FIRMWARE_DIR)/gsp-570.144.fwimage.bin ]; then \
+ echo "ERROR: GSP firmware not found at $(FIRMWARE_DIR)/gsp-570.144.fwimage.bin"; \
+ exit 1; \
+ fi
+ @echo "Firmware OK: $(FIRMWARE_DIR)/gsp-570.144.fwimage.bin"
+
+# Clean
+clean:
+ $(MAKE) -C $(KERNEL_DIR) clean
+ $(MAKE) -C $(DRIVER_DIR) clean
+ $(MAKE) -C $(USERSPACE_DIR)/lib clean
+ $(MAKE) -C $(USERSPACE_DIR)/examples clean
+ $(MAKE) -C $(USERSPACE_DIR)/tests clean
+ $(MAKE) -C $(KERNEL_DIR)/tests clean
+ @rm -f $(USERSPACE_DIR)/lib/libvgpu.so*
+
+# Install
+install: kernel userspace
+ # Install kernel module
+ $(MAKE) -C $(KERNEL_DIR) install
+ # Install userspace library
+ install -D -m 755 $(USERSPACE_DIR)/lib/$(USERSPACE_LIB) /usr/local/lib/$(USERSPACE_LIB)
+ ldconfig
+ # Install headers
+ install -D -m 644 $(USERSPACE_DIR)/include/libvgpu.h /usr/local/include/libvgpu.h
+ # Create compat symlinks
+ ln -sf $(USERSPACE_LIB) /usr/local/lib/libvgpu.so
+ ln -sf $(USERSPACE_LIB) /usr/local/lib/libvgpu.so.1
+ ln -sf $(USERSPACE_LIB) /usr/local/lib/libvgpu.so.1.0.0
+ # Install pkg-config files
+ install -D -m 644 $(USERSPACE_DIR)/lib/libvgpu.pc /usr/local/lib/pkgconfig/libvgpu.pc
+ install -D -m 644 $(USERSPACE_DIR)/lib/libiov.pc /usr/local/lib/pkgconfig/libiov.pc
+
+# Load kernel module (requires root)
+load: kernel firmware-check
+ sudo cp $(FIRMWARE_DIR)/gsp-570.144.fwimage.bin /lib/firmware/
+ sudo insmod $(KERNEL_MODULE_SRC)
+
+# Unload kernel module
+unload:
+ -sudo rmmod open-iov-vfio
+
+# Reload kernel module
+reload: unload load
+
+# Run example
+run-example: examples load
+ sudo LD_LIBRARY_PATH=$(USERSPACE_DIR)/lib ./$(USERSPACE_DIR)/examples/example_vgpu /dev/open-iov
+
+# Debug kernel module
+debug-kernel:
+ @echo "Kernel module info:"
+ @modinfo $(KERNEL_MODULE_SRC)
+
+# Check kernel module symbols
+check-symbols: kernel
+ @nm $(KERNEL_MODULE_SRC) | grep -E "(vgpu|gsp|bar|wpr|migration)" | head -50
+
+.PHONY: load unload reload run-example debug-kernel check-symbols \ No newline at end of file