Skip to content

Instantly share code, notes, and snippets.

@Nislaco
Last active February 6, 2025 21:05
Show Gist options
  • Save Nislaco/c020c565fff05bef05a89647698073b1 to your computer and use it in GitHub Desktop.
Save Nislaco/c020c565fff05bef05a89647698073b1 to your computer and use it in GitHub Desktop.
Working build script for WSL kernel module for 6.12.9+bpo-amd64
#!/bin/bash -e
BRANCH=linux-msft-wsl-6.6.y
if [ "$EUID" -ne 0 ]; then
echo "Swithing to root..."
exec sudo $0 "$@"
fi
apt-get install -y git dkms curl dwarves linux-source-6.12
#This installs resolve_btfids which is needed with vmlinux for proper compilation.
cd /usr/src/
tar xvf linux-source-6.12.tar.xz
cd linux-source-6.12/tools/bpf/resolve_btfids
make
mkdir -p /usr/src/linux-headers-`uname -r`/tools/bpf/resolve_btfids
ln -s /usr/src/linux-source-6.12/tools/bpf/resolve_btfids/resolve_btfids /usr/src/linux-headers-`uname -r`/tools/bpf/resolve_btfids/resolve_btfids
cd /usr/src/linux-source-6.12/tools/objtool/
make
mkdir -p /usr/src/linux-headers-`uname -r`/tools/objtool
ln -s /usr/src/linux-source-6.12/tools/objtool/objtool /usr/src/linux-headers-`uname -r`/tools/objtool/objtool
cd /tmp
git clone -b $BRANCH --no-checkout --depth=1 https://github.com/microsoft/WSL2-Linux-Kernel.git
cd WSL2-Linux-Kernel
git sparse-checkout set --no-cone /drivers/hv/dxgkrnl /include/uapi/misc/d3dkmthk.h /include/linux/hyperv.h /include/linux/eventfd.h
git checkout
BATCH='test'
RUN=$(git rev-parse --short HEAD)
VERSION="${RUN}${BATCH}"
cp -r drivers/hv/dxgkrnl /usr/src/dxgkrnl-$VERSION
mkdir -p /usr/src/dxgkrnl-$VERSION/include/uapi/misc
mkdir -p /usr/src/dxgkrnl-$VERSION/include/linux
mkdir -p /usr/src/dxgkrnl-$VERSION/mm
cp include/uapi/misc/d3dkmthk.h /usr/src/dxgkrnl-$VERSION/include/uapi/misc/d3dkmthk.h
cp include/linux/hyperv.h /usr/src/dxgkrnl-$VERSION/include/linux/hyperv_dxgkrnl.h
cp include/linux/eventfd.h /usr/src/dxgkrnl-$VERSION/include/linux/eventfd.h
sed -i 's/\$(CONFIG_DXGKRNL)/m/' /usr/src/dxgkrnl-$VERSION/Makefile
sed -i 's#<uapi/linux/eventfd.h>#<linux/eventfd.h>#g' /usr/src/dxgkrnl-$VERSION/include/linux/eventfd.h
sed -i 's#linux/hyperv.h#linux/hyperv_dxgkrnl.h#' /usr/src/dxgkrnl-$VERSION/dxgmodule.c
sed -i 's/l(event->cpu_event, 1)/l(event->cpu_event)/g' /usr/src/dxgkrnl-$VERSION/dxgmodule.c
echo "EXTRA_CFLAGS=-I\$(PWD)/include -D_MAIN_KERNEL_ -DCONFIG_DXGKRNL=m -include /usr/src/dxgkrnl-$VERSION/include/extra-defines.h -I /usr/src/linux-source-6.12/include/linux/ -include /usr/src/linux-source-6.12/include/linux/vmalloc.h -Wno-empty-body" >> /usr/src/dxgkrnl-$VERSION/Makefile
wget https://raw.githubusercontent.com/MBRjun/dxgkrnl-dkms-lts/master/extra-defines.h
cp extra-defines.h /usr/src/dxgkrnl-$VERSION/include/extra-defines.h
cp /sys/kernel/btf/vmlinux /usr/lib/modules/`uname -r`/build/
cat > /usr/src/dxgkrnl-$VERSION/dkms.conf <<EOF
PACKAGE_NAME="dxgkrnl"
PACKAGE_VERSION="$VERSION"
BUILT_MODULE_NAME="dxgkrnl"
DEST_MODULE_LOCATION="/kernel/drivers/hv/dxgkrnl/"
AUTOINSTALL="yes"
EOF
dkms add dxgkrnl/$VERSION
dkms build dxgkrnl/$VERSION
dkms install dxgkrnl/$VERSION
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment