"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

내 데비안 wheezy는 항상 최신 상태입니다. 사실, 매일 이렇게 하다 보니 apt-get upgrade -s애초에 이런 문제에 봉착하게 되었습니다.

분명히 한 번 이후에 apt-get upgrade내 데비안에 빌드 생태계 및/또는 DKMS 자체와 관련된 "결함"이 있었습니다.

NVIDIA 드라이버는 공식 위키에서 권장하는 어떤 방법으로도 빌드할 수 없습니다. 공식 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-amd64못했습니다 3.2.0-3-amd64. 컴퓨터를 실행하려고 시도한 3.2.0-3-rt-amd64후 몇 분 후에 컴퓨터가 멈춰서 다시 설치하기가 두려웠습니다.
  • 내 빌드 환경에서 버전을 변경해야 합니까? (업데이트에서 언급했듯이 이는 단지 NVIDIA 문제가 아닌 것으로 나타났습니다).
  • 내 링커에 문제가 있다고 가정해야 할까요(저는아니요을 사용하여 패키지 에서 사용하고 gold있습니다 . 그렇다면 DKMS 접근 방식이 최종적으로 작동하도록 하려면 어떻게 해야 합니까? 연결 단계에서 문제가 나타나는 것 같기 때문입니다(그리고 MODPOST에서는 0개의 모듈을 표시함).ldbinutils

개인적으로 이것은 내가 일반적으로 인정하는 것보다 더 깊은 수준에서 나를 방해합니다. 나는 한때데비안에 대한 큰 존경심, 이제 조각조각. 자, 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;make clean'...
-> 커널 모듈 빌드:
   실행: 'cd ./kernel;make module SYSSRC=/lib/modules/3.2.0-3-amd64/source SYSOUT=/lib/modules/3.2.0-3-amd64/build'...
   NVIDIA: KBUILD에 전화하는 중...
   make -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 \
    기준 치수
   test -e include/ generate/autoconf.h -a -e include/config/auto.conf ||
    에코;
    echo "오류: 잘못된 커널 구성.";
    echo "include/generated/autoconf.h 또는 include/config/auto.conf가 없습니다.";\
    echo "이 문제를 해결하려면 커널 src에서 'make oldconfig && make prepare'를 실행하세요.";
    에코;
    /빈/거짓)
   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/ 생성됨 -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-implicit 함수 선언 -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-async-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=2048 -Wno-unused-but-set-variable -fomit-frame-pointer - g -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" 파일을 참조하세요. www.nvidia.com의 Linux 드라이버 다운로드 페이지에 있는 추가 정보 파일에서 설치 문제 해결을 위한 제안 사항을 찾을 수 있습니다.

업데이트 #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 EST
Linux 2.4 커널을 사용하는 경우 다음을 확인하십시오.
다음과 일치하는 커널 소스를 구성했습니다.
커널 또는 올바른 커널 헤더 세트가 설치되었습니다.
귀하의 시스템에서.

Linux 2.6 커널을 사용하는 경우 다음을 확인하십시오.
커널과 일치하는 커널 소스를 구성했습니다.
귀하의 시스템에 설치되었습니다. 별도로 지정하는 경우
"KBUILD_OUTPUT"의 출력 디렉터리를 사용하거나
"O" KBUILD 매개변수, 이 매개변수를 지정해야 합니다.
SYSOUT 환경 변수가 있는 디렉토리 또는
동등한 nvidia-installer 명령줄 옵션.

커널이 어디서 어떻게 공급되는지에 따라(또는
커널 헤더 파일)이 설치되어 있으면 지정해야 할 수도 있습니다.
해당 위치는 SYSSRC 환경 변수에 해당하거나
동등한 nvidia-installer 명령줄 옵션.

*** 대상 커널 버전을 확인할 수 없습니다. ***

make: *** [select_makefile] 오류 1

업데이트 #3:

며칠간의 인터넷 검색 끝에 이것이 NVIDIA의 잘못인지 궁금해지기 시작했습니다. 결과적으로는 그렇지 않습니다. ( testing저장소 에서) Virtual Box 4.1을 설치하려고 했는데 우연히 발견했습니다.이게 또:

# 고양이 /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 EST
make: "/usr/src/linux-headers-3.2.0-3-amd64" 디렉터리를 입력합니다.
  LD /var/lib/dkms/virtualbox/4.1.18/build/build-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
...전단...
  CC[M] /var/lib/dkms/virtualbox/4.1.18/build/vboxpci/SUPR0IdcClientComponent.o
  CC[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" 디렉터리에서 나가기

물론, 더 자세한 내용은 없습니다(이미 말했듯이,~인 것 같다링커 문제와 비슷하지만 아직 확실하지 않습니다.) 따라서 이것은 확실히 데비안/DKMS 문제이거나 일종의 잘못된 구성에 가깝습니다. 하지만 아무것도 건드리지 않았다고 맹세합니다. 난 그냥 apt-get upgrade-s를 매일 해요. 그 다음에무엇분명히 그것은 잘 진행되지 않았습니다.

업데이트 #4:

나는 아래에 설명된 대로 작은 모듈을 만들려고 했습니다.https://stackoverflow.com/questions/4715259/linux-modpost-does-not-build-anything. 실제로 나는 아직도 보고 있다 MODPOST 0 modules. V=1Makefile에 넣었을 때의 출력 은 다음과 같습니다 .

# 만들다
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' 디렉토리를 입력합니다.
make -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 \
    기준 치수
test -e include/ generate/autoconf.h -a -e include/config/auto.conf ||
    에코;
    echo "오류: 잘못된 커널 구성.";
    echo "include/generated/autoconf.h 또는 include/config/auto.conf가 없습니다.";\
    echo "이 문제를 해결하려면 커널 src에서 'make oldconfig && make prepare'를 실행하세요.";
    에코;
    /빈/거짓)
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/ 생성 -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 - / 홈 /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' 디렉토리를 입력합니다.
  CC[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'

...그리고 루트 셸을 다시 시작합니다(틀림없이;이 단계를 생략하지 마십시오). 모든 것이 다시 작동하기 시작했습니다. 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, 여기에 커널 linux-image-3.2.0-3-amd64 및 nvidia-kernel-dkms 302.17-3 및 관련 패키지가 설치된 두 대의 시스템(debian sid 실행)이 있습니다. dkms 모듈을 컴파일하는 데 문제가 없습니다. 세 번째 컴퓨터(내 기본 데스크톱)는 여전히 nvidia-kernel-dkms 295.53-1을 실행하고 있는데, 주로 로그아웃하고 싶지 않기 때문입니다.

그런데, 적성을 사용하여 다양한 엔비디아 패키지를 정리하고 다시 설치한다고 언급하셨습니다. 패키지 이름에 nvidia가 포함되지 않은 nvidia 패키지가 여러 개 있습니다. 다음은 nvidia pkgs를 보존/보존 해제하기 위해 생각해낸 솔루션입니다. (저는 일반적으로 현재 X 세션에서 로그아웃할 의향/로그아웃할 수 있을 때만 nvidia pkgs를 업그레이드하고 싶습니다... 그리고 새로운 nvidia 버전에서 불쾌한 놀라움을 겪은 후, 나는 가장 덜 중요한 컴퓨터에서 먼저 테스트하는 것을 좋아합니다):

(참고: 이것을 실행하려면 dlocate 패키지를 설치해야 합니다)

$ 고양이 /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 --purge하거나 apt-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즉, 출력을 색상화하는 일반 셸 응용 프로그램 래퍼 스크립트가 있습니다. 어쩌면 다음과 같은 구성을 적용했을 수도 있습니다./etc/skel이 경우에도 안됨/bin/env -i grep당신을 당신 자신으로부터 구할 수도 있었습니다.

이래서 사람들이 컴파일하는구나chroot.

PS 제가 이렇게 까다롭게 선택한 이유는 몇 년 전에도 같은 교훈을 같은 방식으로 배워야 했기 때문입니다. 아마 당신은 필요하지 않을 것입니다=never만약 당신의$PATH매우 깨끗합니다. 또는 다음을 사용할 수 있습니다.--color=auto이 경우 다음과 같은 경우에만 터미널 이스케이프를 사용하세요.grep~의stdout터미널입니다. 즉, 터미널이 아닙니다.|pipe도착하다gcc.

또는 더 나은 방법은 유연하지 않은 쉘을 설정하지 않는 것입니다.alias그리고:

alias grep=grep\ --color=anything

당신이 사용할 수있는grep~의$ENV환경:

GREP_COLOR=auto

답변4

저는 NVIDIA 드라이버와 함께 Debian Wheezy(32비트)를 실행하고 있습니다. 최근에 DKMS 320.17 버전도 사용해 보았지만 "공식" NVIDIA 버전(295.59)으로 되돌렸습니다. 설치에 실패했기 때문이 아니라 프로그램이 포함되지 않았고 nvidia-settingsHDTV(보조 모니터)에서 오버스캔을 재설정해야 했기 때문입니다. ).

/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가 다음으로 출시될 때까지) 기다리는 것입니다.안정적인).

물론 확인해 보면여기코드는 다음과 같습니다.무료가 아님어쨌든 "공식" 바이너리의 시험판 버전을 사용하는 것이 가능하므로 문제의 가능성만 높아집니다.

관련 정보