With kernel v5.5, the only change so far is in the behavior of depmod. In earlier versions, it was sufficient to copy the contents of Module.sysmvers from the vboxdrv directory to the current directory to have the exported symbols from vboxdrv be available to another module such as vboxnetflt, etc. With v5.5, that no longer works.

The workaround is to pass the path of Module.sysvers to kbuild (make) in a symbol named KBUILD_EXTRA_SYMBOLS. The patch file, which has an MIT license, is attached. Additional changes were required in the .spec file used to build an openSUSE RPM, and I would expect changes to be needed for the RPM or DEB build of other distros. As these changes do not exist here as a separate patch file, I cannot attach them; however, the meat of the inline builds need to look like this:

       if [ "$module_name" = "vboxdrv" -o \
            "$module_name" = "vboxguest" ] ; then
            SYMBOLS=""
        fi
        # create build directory for specific flavor
        mkdir -p modules_build_dir/$flavor

        # copy sources which will be used to build vbox module in last step
        cp -r $vbox_module/ modules_build_dir/$flavor/

# copy vboxdrv (for host) module symbols which are used by vboxnetflt and vboxnetadp km's:
        if [ "$module_name" = "vboxnetflt" -o \
             "$module_name" = "vboxnetadp" -o \
             "$module_name" = "vboxpci" ] ; then
            cp $PWD/modules_build_dir/$flavor/vboxdrv/Module.symvers    \
                  $PWD/modules_build_dir/$flavor/$module_name
            SYMBOLS="$PWD/modules_build_dir/$flavor/vboxdrv/Module.symvers"
        fi
        # copy vboxguest (for guest) module symbols which are used by vboxsf km:
       if [ "$module_name" = "vboxsf" -o \
            "$module_name" = "vboxvideo" ] ; then
           cp $PWD/modules_build_dir/$flavor/vboxguest/Module.symvers \
                  $PWD/modules_build_dir/$flavor/$module_name
            SYMBOLS="$PWD/modules_build_dir/$flavor/vboxguest/Module.symvers"
        fi
        # build the module for the specific flavor
        make -j2 -C %{_prefix}/src/linux-obj/%{_target_cpu}/$flavor \
         %{?linux_make_arch} \
         modules M=$PWD/modules_build_dir/$flavor/$module_name  \
         KBUILD_EXTRA_SYMBOLS="$SYMBOLS" V=1

Larry
Index: VirtualBox-6.0.14/src/VBox/HostDrivers/linux/Makefile
===================================================================
--- VirtualBox-6.0.14.orig/src/VBox/HostDrivers/linux/Makefile
+++ VirtualBox-6.0.14/src/VBox/HostDrivers/linux/Makefile
@@ -45,6 +45,8 @@ else # ! KERNELRELEASE
 
 KBUILD_VERBOSE ?=
 KERN_VER ?= $(shell uname -r)
+PWD ?= $(shell pwd)
+
 .PHONY: all install clean check unload load vboxdrv vboxnetflt vboxnetadp \
     vboxpci
 
@@ -64,6 +66,7 @@ vboxnetflt: vboxdrv
 	    if [ -f vboxdrv/Module.symvers ]; then \
 	        cp vboxdrv/Module.symvers vboxnetflt; \
 	    fi; \
+	    export KBUILD_EXTRA_SYMBOLS=${PWD}/vboxnetflt/Module.symvers; \
 	    echo "=== Building 'vboxnetflt' module ==="; \
 	    $(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) -C vboxnetflt || exit 1; \
 	    cp vboxnetflt/vboxnetflt.ko .; \
@@ -75,8 +78,9 @@ vboxnetadp: vboxdrv
 	    if [ -f vboxdrv/Module.symvers ]; then \
 	        cp vboxdrv/Module.symvers vboxnetadp; \
 	    fi; \
+	    export KBUILD_EXTRA_SYMBOLS=${PWD}/vboxnetadp/Module.symvers; \
 	    echo "=== Building 'vboxnetadp' module ==="; \
-	    $(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) -C vboxnetadp || exit 1; \
+            $(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) -C vboxnetadp || exit 1; \
 	    cp vboxnetadp/vboxnetadp.ko .; \
 	    echo; \
 	fi
@@ -86,6 +90,7 @@ vboxpci: vboxdrv
 	    if [ -f vboxdrv/Module.symvers ]; then \
 	        cp vboxdrv/Module.symvers vboxpci; \
 	    fi; \
+	    export KBUILD_EXTRA_SYMBOLS=${PWD}/vboxpci/Module.symvers; \
 	    echo "=== Building 'vboxpci' module ==="; \
 	    $(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) -C vboxpci || exit 1; \
 	    cp vboxpci/vboxpci.ko .; \
@@ -95,12 +100,15 @@ vboxpci: vboxdrv
 install:
 	@$(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) -C vboxdrv install
 	@if [ -d vboxnetflt ]; then \
+	    export KBUILD_EXTRA_SYMBOLS=${PWD}/vboxnetflt/Module.symvers; \
 	    $(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) -C vboxnetflt install; \
 	fi
 	@if [ -d vboxnetadp ]; then \
+	    export KBUILD_EXTRA_SYMBOLS=${PWD}/vboxnetadp/Module.symvers; \
 	    $(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) -C vboxnetadp install; \
 	fi
 	@if [ -d vboxpci ]; then \
+	    export KBUILD_EXTRA_SYMBOLS=${PWD}/vboxpci/Module.symvers; \
 	    $(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) -C vboxpci install; \
 	fi
 
_______________________________________________
vbox-dev mailing list
vbox-dev@virtualbox.org
https://www.virtualbox.org/mailman/listinfo/vbox-dev

Reply via email to