When I build nvidia-drivers-545.29.06 on Linux 6.7.0 on ARM64, I get
ERROR: modpost: GPL-incompatible module nvidia.ko uses GPL-only symbol 'screen_info'
Because the kernel just set screen_info to GPL symbol on non x86 platform.
/drivers/firmware/efi/efi-init.c:
/*
* x86 defines its own screen_info and uses it even without EFI,
* everything else can get it from here.
*/
#if !defined(CONFIG_X86) && (defined(CONFIG_SYSFB) || defined(CONFIG_EFI_EARLYCON))
struct screen_info screen_info __section(".data");
EXPORT_SYMBOL_GPL(screen_info);
#endif
I just created a patch to bypass this error on my headless home lab server.
diff -ur a/kernel/conftest.sh b/kernel/conftest.sh
--- a/kernel/conftest.sh 2023-11-16 02:31:55.000000000 +0100
+++ b/kernel/conftest.sh 2024-01-17 01:57:12.504858914 +0100
@@ -316,6 +316,14 @@
SYMBOL="$1"
TAB=' '
+ ARCH=$(uname -m)
+
+ if [ "$ARCH" != "x86_64" ] && [ "$ARCH" != "i386" ] && [ "$SYMBOL" = "screen_info" ]; then
+ echo "#define NV_IS_EXPORT_SYMBOL_PRESENT_screen_info 0" |
+ append_conftest "symbols"
+ return
+ fi
+
if grep -e "${TAB}${SYMBOL}${TAB}.*${TAB}EXPORT_SYMBOL\(_GPL\)\?\s*\$" \
"$OUTPUT/Module.symvers" >/dev/null 2>&1; then
echo "#define NV_IS_EXPORT_SYMBOL_PRESENT_$SYMBOL 1" |