无法创建“Hello World”模块(以及 NVIDIA 和 VirtualBox)

无法创建“Hello World”模块(以及 NVIDIA 和 VirtualBox)

首先,细节。

前:内核:3.2.0-2-amd64,nvidia驱动程序:295.59

后:内核:3.2.0-3-amd64,nvidia驱动程序:302.17-3

我的 Debian wheezy 始终保持最新状态。事实上,每天这样做apt-get upgrade -s一开始就让我陷入了这个麻烦。

显然,在一次之后apt-get upgrade,我的 Debian 上出现了一些“故障”——与构建生态系统和/或 DKMS 本身相关的一些东西。

NVIDIA 驱动程序无法通过官方 Wiki 中推荐的任何方法来构建。包括 NVIDIA 官方二进制文件(其中更新之一的日志片段)。

这是输出dpkg-reconfigure nvidia-kernel-dkms

# dpkg-reconfigure nvidia-kernel-dkms

------------------------------
Deleting module version: 302.17
completely from the DKMS tree.
------------------------------
Done.
Loading new nvidia-302.17 DKMS files...
Building only for 3.2.0-3-amd64
Building initial module for 3.2.0-3-amd64
Error!  Build of nvidia.ko failed for: 3.2.0-3-amd64 (x86_64)
Consult the make.log in the build directory
/var/lib/dkms/nvidia/302.17/build/ for more information.

相关片段/var/lib/dkms/nvidia/302.17/build/make.log如下。问题是不是在编译中,我可以保证。

  LD [M]  /var/lib/dkms/nvidia/302.17/build/nvidia.o
  Building modules, stage 2.
  MODPOST 0 modules
make[1]: Leaving directory `/usr/src/linux-headers-3.2.0-3-amd64'
make: Leaving directory `/var/lib/dkms/nvidia/302.17/build'

就是这样。同一目录中的任何其他文件中没有任何类型的解释(至少据我检查)。

在我问问题之前:我现在正在使用 nouveau 驱动程序(无论如何我都没有任何选择),但它对我来说效果不太好。我有 3 个桌面,在其中一个上不断播放电影,在另外两个上是一个非常忙碌的开发人员。 nouveau 驱动程序在那里有点失败(第二个屏幕上的电影总是出现水平条纹,XFCE 控制台滞后)有点关于滚动等)

问题:

  • 我应该更改内核版本吗?尝试过,3.2.0-2-amd643.2.0-3-amd64没有成功。尝试3.2.0-3-rt-amd64让我的机器运行几分钟后就死机了,因此我不敢再安装它。
  • 我应该更改构建环境中某些内容的版本吗? (正如更新中所指出的,事实证明,这不仅仅是 NVIDIA 的问题)。
  • 我是否应该假设我的链接器有问题(我是不是using gold,我正在ldbinutils包中使用),如果是这样,我该怎么做才能使 DKMS 方法最终起作用?因为问题似乎确实在链接阶段显现出来(并且 MODPOST 显示 0 个模块)。

就我个人而言,这让我在更深层次上感到不安,我通常愿意承认。我曾有一个向 Debian 致以崇高的敬意,此刻已经支离破碎。来吧,一个简单的方法apt-get upgrade就可以破坏所有开源内核驱动程序编译/链接?

非常令人失望。

更新#1:

事实上,我确实尝试安装官方 304.22 NVIDIA 驱动程序,这是日志文件。看起来链接确实失败了,是吗?

另外,如果我尝试同时启用 DKMS 集成,我会收到一条消息,提示脚本无法确定当前内核版本(第三次更新中的文本)。

nvidia-installer 日志文件 '/var/log/nvidia-installer.log'
创建时间:2012年7月21日星期六22:59:30
安装程序版本:304.22

路径:/usr/local/rvm/gems/ruby-1.9.3-p194/bin:/usr/local/rvm/gems/ruby-1.9.3-p194@global/bin:/usr/local/rvm/rubies /ruby-1.9.3-p194/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

nvidia 安装程序命令行:
    ./nvidia-安装程序

使用:nvidia-installer ncurses 用户界面
-> 已接受许可。
-> 安装 NVIDIA 驱动程序版本 304.22。
-> 您的系统上似乎已经安装了驱动程序(版本:304.22)。作为安装此驱动程序(版本:304.22)的一部分,现有驱动程序将被卸载。你确定你要继续吗? (“否”将中止安装)(答案:是)
-> 您想向 DKMS 注册内核模块源吗?如果您稍后安装不同的内核,这将允许 DKMS 自动构建新模块。 (答案:否)
-> 使用 CC="gcc-4.6" 执行 CC 健全性检查。
-> 使用 CC="gcc-4.6" 执行 CC 版本检查。
-> 内核源路径:'/lib/modules/3.2.0-3-amd64/source'
-> 内核输出路径:'/lib/modules/3.2.0-3-amd64/build'
-> 执行 rivafb 检查。
-> 执行 nvidiafb 检查。
-> 执行 Xen 检查。
-> 清理内核模块构建目录。
   执行:'cd ./kernel;使干净”...
-> 构建内核模块:
   执行:'cd ./kernel;使模块 SYSSRC=/lib/modules/3.2.0-3-amd64/source SYSOUT=/lib/modules/3.2.0-3-amd64/build'...
   NVIDIA:调用 KBUILD...
   使-C /lib/modules/3.2.0-3-amd64/build \
    KBUILD_SRC=/usr/src/linux-headers-3.2.0-3-common \
    KBUILD_EXTMOD="/tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel" -f /usr/src/linux-headers-3.2.0-3-common/Makefile \
    模块
   测试-e include/ generated/autoconf.h -a -e include/config/auto.conf || (\
    回声; \
    echo " 错误:内核配置无效。"; \
    echo " include/ generated/autoconf.h 或 include/config/auto.conf 丢失。";\
    echo " 在内核 src 上运行 'make oldconfig && make prepare' 来修复它。"; \
    回声; \
    /bin/假)
   mkdir -p /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/.tmp_versions ; rm -f /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/.tmp_versions/*
   make -f /usr/src/linux-headers-3.2.0-3-common/scripts/Makefile.build obj=/tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel
     gcc-4.6 -Wp,-MD,/tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/.nv.od -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/4.6/include -I /usr/src/linux-headers-3.2.0-3-common/arch/x86/include -Iarch/x86/include/ generated -Iinclude -I/usr/src/linux-headers-3.2.0-3-common /include -include /usr/src/linux-headers-3.2.0-3-common/include/linux/kconfig.h -I/tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-隐式函数声明 -Wno-format-security -fno-delete-null-pointer-checks -Os -m64 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -pipe -Wno-sign -比较-fno-异步-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=2048 -Wno-unused-but-set-variable -fomit-frame-pointer -g -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -I/tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel -Wall -MD -Wsign-compare -Wno-演员-
   qual -Wno-error -D__KERNEL__ -DMODULE -DNVRM -DNV_VERSION_STRING=\"304.22\" -Wno-unused-function -Wuninitialized -mno-red-zone -mcmodel=kernel -UDEBUG -U_DEBUG -DNDEBUG -DMODULE -D"KBUILD_STR( s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(nv)" -D"KBUILD_MODNAME=KBUILD_STR(nvidia)" -c -o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/.tmp_nv.o / tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv.c
   在 /usr/src/linux-headers-3.2.0-3-common/include/linux/kernel.h:17:0 包含的文件中,
                    来自/usr/src/linux-headers-3.2.0-3-common/include/linux/sched.h:55,
                    来自/usr/src/linux-headers-3.2.0-3-common/include/linux/utsname.h:35,
                    来自/tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-linux.h:38,
                    来自/tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv.c:13:
   /usr/src/linux-headers-3.2.0-3-common/include/linux/bitops.h:在函数“hweight_long”中:
   /usr/src/linux-headers-3.2.0-3-common/include/linux/bitops.h:49:41:警告:条件表达式中的有符号和无符号类型[-Wsign-compare]
   在 /usr/src/linux-headers-3.2.0-3-common/arch/x86/include/asm/uaccess.h:575:0 包含的文件中,
                    来自/usr/src/linux-headers-3.2.0-3-common/include/linux/poll.h:14,
                    来自/tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-linux.h:97,
                    来自/tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv.c:13:
   /usr/src/linux-headers-3.2.0-3-common/arch/x86/include/asm/uaccess_64.h:在函数“copy_from_user”中:
   /usr/src/linux-headers-3.2.0-3-common/arch/x86/include/asm/uaccess_64.h:53:6:警告:有符号和无符号整数表达式之间的比较 [-Wsign-compare]

...用相同的警告剪掉了很多编译输出...

     ld -m elf_x86_64 -r -o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nvidia.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-kernel.o /tmp/selfgz10141 /NVIDIA-Linux-x86_64-304.22/kernel/nv.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-acpi.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv -chrdev.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-cray.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-gvi.o /tmp/selfgz10141/NVIDIA -Linux-x86_64-304.22/kernel/nv-i2c.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-mempool.o /tmp/selfgz10141/NVI
   DIA-Linux-x86_64-304.22/kernel/nv-mlock.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-mmap.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/ nv-p2p.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-pat.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-procfs.o /tmp/selfgz10141/ NVIDIA-Linux-x86_64-304.22/kernel/nv-usermap.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nv-vm.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/ nv-vtophys.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/os-agp.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/os-interface.o /tmp/selfgz10141/ NVIDIA-Linux-x86_64-304.22/kernel/os-mtrr.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/os-registry.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/ os-smp.o /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/os-usermap.o
   (cat /dev/null; echo kernel//tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/nvidia.ko;) > /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/modules.order
   make -f /usr/src/linux-headers-3.2.0-3-common/scripts/Makefile.modpost
     脚本/mod/modpost -m -i /usr/src/linux-headers-3.2.0-3-amd64/Module.symvers -I /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/Module.symvers - /tmp/selfgz10141/NVIDIA-Linux-x86_64-304.22/kernel/Module.symvers -S -w -s
   NVIDIA:离开了 KBUILD。
   nvidia.ko 构建失败!
   make[1]: *** [模块] 错误 1
   make: *** [模块] 错误 2
-> 错误。
错误:无法构建 NVIDIA 内核模块。
错误:安装失败。请参阅文件“/var/log/nvidia-installer.log”了解详细信息。您可以在 Linux 驱动程序下载页面 www.nvidia.com 上的自述文件中找到有关修复安装问题的建议。

更新#2:

根据建议明星命名者,我确实重新安装了linux-headers-3.2.0-3-amd64。完成后,DKMS 启动并再次尝试编译 NVIDIA 驱动程序。这是文件的内容/var/lib/dkms/nvidia/304.22/build/make.log

适用于内核 3.2.0-3-amd64 (x86_64) 的 nvidia-304.22 的 DKMS make.log
2012 年东部标准时间 7 月 22 日星期日 14:50:58
如果您使用的是 Linux 2.4 内核,请确保
你要么已经配置了与你的相匹配的内核源
内核或安装的正确的内核头集
在您的系统上。

如果您使用的是 Linux 2.6 内核,请确保
您已经配置了与您的内核相匹配的内核源
安装在您的系统上。如果您指定了单独的
使用“KBUILD_OUTPUT”或的输出目录
“O”KBUILD 参数,请确保指定此参数
目录与 SYSOUT 环境变量或
等效的 nvidia-installer 命令行选项。

取决于内核来源的位置和方式(或
内核头文件)已安装,您可能需要指定
它们的位置与 SYSSRC 环境变量或
等效的 nvidia-installer 命令行选项。

*** 无法确定目标内核版本。 ***

make: *** [select_makefile] 错误 1

更新#3:

经过几天的谷歌搜索后,我开始怀疑这是否是 NVIDIA 的错。事实证明,事实并非如此。我尝试安装 Virtual Box 4.1(来自testing存储库),我偶然发现又是这个:

# cat /var/lib/dkms/virtualbox/4.1.18/build/make.log
适用于内核 3.2.0-3-amd64 (x86_64) 的 virtualbox-4.1.18 的 DKMS make.log
2012 年东部标准时间 7 月 24 日星期二 17:58:57
make:进入目录“/usr/src/linux-headers-3.2.0-3-amd64”
  LD /var/lib/dkms/virtualbox/4.1.18/build/built-in.o
  LD /var/lib/dkms/virtualbox/4.1.18/build/vboxdrv/built-in.o
  CC [M] /var/lib/dkms/virtualbox/4.1.18/build/vboxdrv/linux/SUPDrv-linux.o
...剪断...
  抄送 [M] /var/lib/dkms/virtualbox/4.1.18/build/vboxpci/SUPR0IdcClientComponent.o
  抄送 [M] /var/lib/dkms/virtualbox/4.1.18/build/vboxpci/linux/SUPR0IdcClient-linux.o
  LD [M] /var/lib/dkms/virtualbox/4.1.18/build/vboxpci/vboxpci.o
  构建模块,第 2 阶段。
  MODPOST 0 模块
make:离开目录“/usr/src/linux-headers-3.2.0-3-amd64”

当然,没有更多细节(正如已经说过的,它确实似乎就像链接器问题,但我还不能确定)。所以这肯定更多是 Debian / DKMS 问题或某种配置错误。不过,我发誓我没有碰任何东西。我只是每天做apt-get upgrade-s。然后某物显然,进展不太顺利。

更新#4:

我确实尝试创建一个小模块,如下所述:https://stackoverflow.com/questions/4715259/linux-modpost-does-not-build-anything。确实我还在看MODPOST 0 modules。这是我V=1放入 Makefile时的输出:

# 制作
make -C /lib/modules/3.2.0-3-amd64/build M=/home/dimi/code/hello V=1 模块
make[1]: 进入目录 `/usr/src/linux-headers-3.2.0-3-amd64'
使-C /usr/src/linux-headers-3.2.0-3-amd64 \
    KBUILD_SRC=/usr/src/linux-headers-3.2.0-3-common \
    KBUILD_EXTMOD="/home/dimi/code/hello" -f /usr/src/linux-headers-3.2.0-3-common/Makefile \
    模块
测试-e include/ generated/autoconf.h -a -e include/config/auto.conf || (\
    回声; \
    echo " 错误:内核配置无效。"; \
    echo " include/ generated/autoconf.h 或 include/config/auto.conf 丢失。";\
    echo " 在内核 src 上运行 'make oldconfig && make prepare' 来修复它。"; \
    回声; \
    /bin/假)
mkdir -p /home/dimi/code/hello/.tmp_versions ; rm -f /home/dimi/code/hello/.tmp_versions/*
make -f /usr/src/linux-headers-3.2.0-3-common/scripts/Makefile.build obj=/home/dimi/code/hello
   gcc-4.6 -Wp,-MD,/home/dimi/code/hello/.hello.od -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/4.6/include -I/usr/src/linux -headers-3.2.0-3-common/arch/x86/include -Iarch/x86/include/ generated -Iinclude -I/usr/src/linux-headers-3.2.0-3-common/include -include /usr /src/linux-headers-3.2.0-3-common/include/linux/kconfig.h -I/home/dimi/code/hello -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict -aliasing -fno-common -Werror-隐式函数声明 -Wno-format-security -fno-delete-null-pointer-checks -Os -m64 -mtune=generic -mno-red-zone -mcmodel=kernel -funit -at-a-time -maccumulate-outgoing-args -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno -sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=2048 -Wno-unused-but-set-variable -fomit-frame-pointer -g -Wdeclaration-after-statement -Wno-pointer -sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(hello)" -D"KBUILD_MODNAME=KBUILD_STR(hello)" -c - /home/dimi/code/hello/.tmp_hello.o /home/dimi/code/hello/hello.c
(cat /dev/null; echo kernel//home/dimi/code/hello/hello.ko;) > /home/dimi/code/hello/modules.order
make -f /usr/src/linux-headers-3.2.0-3-common/scripts/Makefile.modpost
  脚本/mod/modpost -m -i /usr/src/linux-headers-3.2.0-3-amd64/Module.symvers -I /home/dimi/code/hello/Module.symvers -o /home/dimi/代码/hello/Module.symvers -S -w -c -s
make[1]: 离开目录 `/usr/src/linux-headers-3.2.0-3-amd64'

这是我删除时看到的V=1

# 制作
make -C /lib/modules/3.2.0-3-amd64/build M=/home/dimi/code/hello 模块
make[1]: 进入目录 `/usr/src/linux-headers-3.2.0-3-amd64'
  抄送 [M] /home/dimi/code/hello/hello.o
  构建模块,第 2 阶段。
  MODPOST 0 模块
make[1]: 离开目录 `/usr/src/linux-headers-3.2.0-3-amd64'

答案1

解决了!

就这么简单:/root/.bashrc里面有这个:

 export GREP_OPTIONS='--color=always'

将其更改为:

 export GREP_OPTIONS='--color=never'

...并重新启动 root shell (当然;不要省略此步骤)。一切又开始运转了。 NVIDIA 和 VirtualBox 内核模块都是从第一次尝试构建的。我太高兴了! :-)

不过话又说回来,我对内核构建工具有点失望。他们应该更了解并通过--color=never他们使用的任何地方grep;或者更确切地说,存储 的旧值GREP_OPTIONS,在构建过程的生命周期内覆盖它,然后恢复它。

我希望我与这个问题进行的为期一周的史诗般的斗争将对社区和内核构建工具开发人员都有价值。

非常热烈地感谢那些和我在一起并试图提供帮助的人。

(所有学分都在这里:http://forums.gentoo.org/viewtopic-p-4156366.html#4156366

答案2

您是否尝试过清除并重新安装 dkms?

您可以使用它apt-get purge dkms,这也会清除所有依赖它的软件包,因此您之后必须重新安装它们。

如果您不想也清除依赖包,可以使用 dpkg:

dpkg --purge --force-depends dkms

使用通常的方式重新安装:apt-get install dkms

FWIW,我这里有两台机器(运行 debian sid),安装了内核 linux-image-3.2.0-3-amd64 和 nvidia-kernel-dkms 302.17-3 及相关软件包。 dkms模块编译没有问题。第三台机器(我的主桌面)仍在运行 nvidia-kernel-dkms 295.53-1,主要是因为我不想注销。

顺便说一句,您提到使用 aptitude 清除并重新安装各种 nvidia 软件包。有几个 nvidia 软件包的软件包名称中没有 nvidia。这是我想出的保留/取消保留 nvidia pkgs 的解决方案(我通常只想在我愿意/能够注销当前的 X 会话时升级 nvidia pkgs...并且在新的 nvidia 版本出现一些不愉快的意外之后,我喜欢首先在我最不重要的机器上测试它们):

(注意:你需要安装我的 dlocate 包才能运行它)

$ cat /usr/local/sbin/hold-nvidia.sh
#! /bin/bash

PKGS=$(dlocate -l nvidia cuda vdpau | awk '/^[hi]i/ {print $2}' | sed -e 's/:.*//')

回显 dpkg-hold $PKGS
dpkg-保留$PKGS

对于未持有的包,有一个几乎相同的包(运行dpkg-unhold而不是dpkg-hold),并且使其运行dpkg --purgeapt-get purge替代将是微不足道的。

答案3

这不好:

PATH: /usr/local/rvm/gems/ruby-1.9.3-p194/bin:\
    /usr/local/rvm/gems/ruby-1.9.3-p194@global/bin:\
    /usr/local/rvm/rubies/ruby-1.9.3-p194/bin:\
    /usr/local/rvm/bin:\
    /usr/local/sbin:\
    /usr/local/bin:\
    /usr/sbin:\
    /usr/bin:\
    /sbin:\
    /bin

我敢打赌,至少在其中几个目录中,你$PATH编辑在之前/bin/sbin- 尤其是ruby那些 - 你有通用的 shell 应用程序包装脚本来对输出进行着色。也许您甚至应用了类似的配置/etc/skel在这种情况下甚至不/bin/env -i grep本来可以把你从自己手中救出来。

这就是为什么人们编译chroot.

PS 我之所以如此挑剔,是因为几年前我必须以同样的方式吸取同样的教训。您可能不需要=never如果你的$PATH很干净。另外,你可以只使用--color=auto在这种情况下,仅在以下情况下才使用终端转义符:grepstdout是一个终端 - 换句话说 - 不在|pipegcc.

或者,更好的是,不要设置一个不灵活的外壳alias和:

alias grep=grep\ --color=anything

您可以利用grep$ENV环境:

GREP_COLOR=auto

答案4

我正在运行带有 NVIDIA 驱动程序的 Debian Wheezy(32 位)。我最近也尝试了 DKMS 320.17 版本,但恢复到“官方”NVIDIA 版本 (295.59),不是因为它安装失败,而是因为它不包含该nvidia-settings程序,并且我需要在我的高清电视上重置过扫描(辅助监视器)。

话虽如此,您不需要链接/usr/bin/gcc到 gcc-4.6 来运行旧版本。我只是CC=gcc-4.6在清除所有已安装的 nvidia 内容后运行“官方”295.59 安装之前执行的apt-get

气喘吁吁依然是测试版本,因此您可能遇到了尚未在 64 位版本中正确测试的错误。正如我所说,我的 32 位升级除了缺少功能之外没有任何问题。如果您确定系统上一切正常,您可能需要查看记录错误报告。

我的建议是恢复到 295.59“官方”版本(使用您的链接或定义 CC 以使用正确版本的gcc),然后等待 nvidia-kernel-dkms 模块的更新(或者直到 Wheezy 发布为稳定的)。

当然,如果你检查这里你会看到代码是非免费无论如何,所以它可能使用“官方”二进制文件的预发布版本,这只会增加出现问题的可能性。

相关内容