Debian 12 linux-image-6.1.0-18-amd64 dist-upgrade 在 nvidia GPL 不兼容模块上失败 nvidia.ko 使用仅 GPL 符号“__rcu_read_lock”

Debian 12 linux-image-6.1.0-18-amd64 dist-upgrade 在 nvidia GPL 不兼容模块上失败 nvidia.ko 使用仅 GPL 符号“__rcu_read_lock”

我对今天通知的 Debian 12 的新更新运行了apt-get upgrade和。apt-get dist-upgrade

最后一个失败并显示此消息,稍后可以看到它涉及 NVidia 驱动程序(我使用 Debian 发行版之一)编译:

dkms: autoinstall for kernel: 6.1.0-18-amd64 failed!
run-parts: /etc/kernel/postinst.d/dkms exited with return code 11
sudo apt-get dist-upgrade
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait      
Calcul de la mise à jour... Fait
Les NOUVEAUX paquets suivants seront installés :
  libllvm16 linux-headers-6.1.0-18-amd64 linux-headers-6.1.0-18-common linux-image-6.1.0-18-amd64
Les paquets suivants seront mis à jour :
  linux-headers-amd64 linux-image-amd64 postgresql-14
3 mis à jour, 4 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 0 o/119 Mo dans les archives.
Après cette opération, 593 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] O
Lecture des fichiers de modifications (« changelog »)... Terminé
Préconfiguration des paquets...
Sélection du paquet libllvm16:amd64 précédemment désélectionné.
(Lecture de la base de données... 822688 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../0-libllvm16_1%3a16.0.6-15~deb12u1_amd64.deb ...
Dépaquetage de libllvm16:amd64 (1:16.0.6-15~deb12u1) ...
Sélection du paquet linux-headers-6.1.0-18-common précédemment désélectionné.
Préparation du dépaquetage de .../1-linux-headers-6.1.0-18-common_6.1.76-1_all.deb ...
Dépaquetage de linux-headers-6.1.0-18-common (6.1.76-1) ...
Sélection du paquet linux-headers-6.1.0-18-amd64 précédemment désélectionné.
Préparation du dépaquetage de .../2-linux-headers-6.1.0-18-amd64_6.1.76-1_amd64.deb ...
Dépaquetage de linux-headers-6.1.0-18-amd64 (6.1.76-1) ...
Préparation du dépaquetage de .../3-linux-headers-amd64_6.1.76-1_amd64.deb ...
Dépaquetage de linux-headers-amd64 (6.1.76-1) sur (6.1.69-1) ...
Sélection du paquet linux-image-6.1.0-18-amd64 précédemment désélectionné.
Préparation du dépaquetage de .../4-linux-image-6.1.0-18-amd64_6.1.76-1_amd64.deb ...
Dépaquetage de linux-image-6.1.0-18-amd64 (6.1.76-1) ...
Préparation du dépaquetage de .../5-linux-image-amd64_6.1.76-1_amd64.deb ...
Dépaquetage de linux-image-amd64 (6.1.76-1) sur (6.1.69-1) ...
Préparation du dépaquetage de .../6-postgresql-14_14.11-1.pgdg120+1_amd64.deb ...
Dépaquetage de postgresql-14 (14.11-1.pgdg120+1) sur (14.10-1.pgdg120+1) ...
Paramétrage de linux-image-6.1.0-18-amd64 (6.1.76-1) ...
I: /vmlinuz.old is now a symlink to boot/vmlinuz-6.1.0-17-amd64
I: /initrd.img.old is now a symlink to boot/initrd.img-6.1.0-17-amd64
I: /vmlinuz is now a symlink to boot/vmlinuz-6.1.0-18-amd64
I: /initrd.img is now a symlink to boot/initrd.img-6.1.0-18-amd64
/etc/kernel/postinst.d/dkms:
dkms: running auto installation service for kernel 6.1.0-18-amd64.
Sign command: /usr/lib/linux-kbuild-6.1/scripts/sign-file
Signing key: /var/lib/dkms/mok.key
Public certificate (MOK): /var/lib/dkms/mok.pub

Building module:
Cleaning build area...
env NV_VERBOSE=1 make -j32 modules KERNEL_UNAME=6.1.0-18-amd64........(bad exit status: 2)
Error! Bad return status for module build on kernel: 6.1.0-18-amd64 (x86_64)
Consult /var/lib/dkms/nvidia-current/525.147.05/build/make.log for more information.
Error! One or more modules failed to install during autoinstall.
Refer to previous errors for more information.
dkms: autoinstall for kernel: 6.1.0-18-amd64 failed!
run-parts: /etc/kernel/postinst.d/dkms exited with return code 11
dpkg: erreur de traitement du paquet linux-image-6.1.0-18-amd64 (--configure) :
 le sous-processus paquet linux-image-6.1.0-18-amd64 script post-installation installé a renvoyé un état de sortie d'erreur 1
dpkg: des problèmes de dépendances empêchent la configuration de linux-image-amd64 :
 linux-image-amd64 dépend de linux-image-6.1.0-18-amd64 (= 6.1.76-1); cependant :
 Le paquet linux-image-6.1.0-18-amd64 n'est pas encore configuré.

dpkg: erreur de traitement du paquet linux-image-amd64 (--configure) :
 problèmes de dépendances - laissé non configuré
Paramétrage de libllvm16:amd64 (1:16.0.6-15~deb12u1) ...
Paramétrage de linux-headers-6.1.0-18-common (6.1.76-1) ...
Paramétrage de postgresql-14 (14.11-1.pgdg120+1) ...
Paramétrage de linux-headers-6.1.0-18-amd64 (6.1.76-1) ...
/etc/kernel/header_postinst.d/dkms:
dkms: running auto installation service for kernel 6.1.0-18-amd64.
Sign command: /usr/lib/linux-kbuild-6.1/scripts/sign-file
Signing key: /var/lib/dkms/mok.key
Public certificate (MOK): /var/lib/dkms/mok.pub

Building module:
Cleaning build area...
env NV_VERBOSE=1 make -j32 modules KERNEL_UNAME=6.1.0-18-amd64........(bad exit status: 2)
Error! Bad return status for module build on kernel: 6.1.0-18-amd64 (x86_64)
Consult /var/lib/dkms/nvidia-current/525.147.05/build/make.log for more information.
Error! One or more modules failed to install during autoinstall.
Refer to previous errors for more information.
dkms: autoinstall for kernel: 6.1.0-18-amd64 failed!
run-parts: /etc/kernel/header_postinst.d/dkms exited with return code 11
Failed to process /etc/kernel/header_postinst.d at /var/lib/dpkg/info/linux-headers-6.1.0-18-amd64.postinst line 11.
dpkg: erreur de traitement du paquet linux-headers-6.1.0-18-amd64 (--configure) :
 le sous-processus paquet linux-headers-6.1.0-18-amd64 script post-installation installé a renvoyé un état de sortie d'erreur 1
dpkg: des problèmes de dépendances empêchent la configuration de linux-headers-amd64 :
 linux-headers-amd64 dépend de linux-headers-6.1.0-18-amd64 (= 6.1.76-1); cependant :
 Le paquet linux-headers-6.1.0-18-amd64 n'est pas encore configuré.

dpkg: erreur de traitement du paquet linux-headers-amd64 (--configure) :
 problèmes de dépendances - laissé non configuré
Traitement des actions différées (« triggers ») pour postgresql-common (257.pgdg120+1) ...
Building PostgreSQL dictionaries from installed myspell/hunspell packages...
  en_us
  fr
Removing obsolete dictionary files:
Traitement des actions différées (« triggers ») pour libc-bin (2.36-9+deb12u4) ...
Des erreurs ont été rencontrées pendant l'exécution :
 linux-image-6.1.0-18-amd64
 linux-image-amd64
 linux-headers-6.1.0-18-amd64
 linux-headers-amd64
E: Sub-process /usr/bin/dpkg returned an error code (1)

看看它抱怨的内容,我cat对它指向的日志文件做了一个检查,发现:
一个 NVidia 卡驱动程序编译问题:

  ld -m elf_x86_64 -z noexecstack --no-warn-rwx-segments   -r -o /var/lib/dkms/nvidia-current/525.147.05/build/nvidia-uvm.o @/var/lib/dkms/nvidia-current/525.147.05/build/nvidia-uvm.mod 
  {   echo /var/lib/dkms/nvidia-current/525.147.05/build/nvidia.ko;   echo /var/lib/dkms/nvidia-current/525.147.05/build/nvidia-uvm.ko;   echo /var/lib/dkms/nvidia-current/525.147.05/build/nvidia-modeset.ko;   echo /var/lib/dkms/nvidia-current/525.147.05/build/nvidia-drm.ko;   echo /var/lib/dkms/nvidia-current/525.147.05/build/nvidia-peermem.ko; :; } > /var/lib/dkms/nvidia-current/525.147.05/build/modules.order
sh /usr/src/linux-headers-6.1.0-18-common/scripts/modules-check.sh /var/lib/dkms/nvidia-current/525.147.05/build/modules.order
make -f /usr/src/linux-headers-6.1.0-18-common/scripts/Makefile.modpost
   sed 's/ko$/o/'  /var/lib/dkms/nvidia-current/525.147.05/build/modules.order | scripts/mod/modpost -m     -o /var/lib/dkms/nvidia-current/525.147.05/build/Module.symvers -e -i Module.symvers -T - 
ERROR: modpost: GPL-incompatible module nvidia.ko uses GPL-only symbol '__rcu_read_lock'
ERROR: modpost: GPL-incompatible module nvidia.ko uses GPL-only symbol '__rcu_read_unlock'
make[3]: *** [/usr/src/linux-headers-6.1.0-18-common/scripts/Makefile.modpost:126 : /var/lib/dkms/nvidia-current/525.147.05/build/Module.symvers] Erreur 1
make[2]: *** [/usr/src/linux-headers-6.1.0-18-common/Makefile:1991 : modpost] Erreur 2
make[2] : on quitte le répertoire « /usr/src/linux-headers-6.1.0-18-amd64 »
make[1]: *** [Makefile:250 : __sub-make] Erreur 2
make[1] : on quitte le répertoire « /usr/src/linux-headers-6.1.0-18-common »
make: *** [Makefile:82 : modules] Erreur 2

从这里我应该做什么?

如果我现在重新启动计算机会有危险吗?
不是在中间,在6.1.0-17和之间吗6.1.0-18

答案1

我想您正在使用 debian 发行版中的 nvidia 驱动程序。 nvidia 驱动程序尚不兼容新的 Linux 内核。

有人在驱动内核模块的源代码中写了3个文件的补丁。我还没有测试这个补丁,因为我的 apt-get 坏了,所以我无法安装驱动程序。

但这是继续的方法。

第一个文件:/usr/src/nvidia-current-525.147.05/common/inc/nv-linux.h

在第 2000 行添加以下行:

#if defined(CONFIG_HAVE_ARCH_PFN_VALID) || LINUX_VERSION_CODE < KERNEL_VERSION(6,1,76)
#  define nv_pfn_valid pfn_valid
#else
/* pre-6.1.76 kernel pfn_valid version without GPL rcu_read_lock/unlock() */
static inline int nv_pfn_valid(unsigned long pfn)
{
        struct mem_section *ms;

        if (PHYS_PFN(PFN_PHYS(pfn)) != pfn)
                return 0;

        if (pfn_to_section_nr(pfn) >= NR_MEM_SECTIONS)
                return 0;

        ms = __pfn_to_section(pfn);
        if (!valid_section(ms))
                return 0;

        return early_section(ms) || pfn_section_valid(ms, pfn);
}
#endif

第二个文件:/usr/src/nvidia-current-525.147.05/nvidia/nv-mmap.c

在第 578 行,替换pfn_validnv_pfn_valid

第三个文件:/usr/src/nvidia-current-525.147.05/nvidia/os-mlock.c

在第 116 行,替换pfn_validnv_pfn_valid

在第 190 行,替换pfn_validnv_pfn_valid

补丁的来源,最初是为470.223.02编写的,所以行号与我所说的不同:关联

答案2

这个问题现已在 Bookworm 中修复,请参阅这个通告了解详情。确保它bookworm-updates存在于您的存储库配置中 ( /etc/apt/sources.list):

deb https://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware

(该公告没有提及contribnon-freenon-free-firmware,但在这种情况下它们是必要的。)

apt update然后像往常一样以root 身份运行apt upgrade

答案3

现在可以通过提议的更新包存档获得已修补的驱动程序。

要获取初步更新,请将以下内容添加到您的文件中/etc/apt/sources.list,然后运行sudo apt update​​.完成后,您应该能够升级nvidia-driver-*解决此问题的软件包。

deb https://ftp.debian.org/debian/ bookworm-proposed-updates contrib main non-free non-free-firmware

相关内容