
Precise의 실시간 커널과 함께 nvidia 드라이버의 302 버전(최종 RandR 확장 지원!)의 최신 베타를 어떻게 사용할 수 있습니까?
이 질문RT 패치를 통해 3.4 커널의 현재 295 버전을 활성화하는 방법에 대한 정보가 포함되어 있습니다. 그러나 나는 nvidia의 설치 프로그램(패키지 관리 시스템이 파일을 덮어쓰기 때문에 설치가 자주 중단됨) 대신 패키지 관리자를 사용하여 nvidia 드라이버를 설치하는 답변을 찾고 있습니다.
답변1
경고
패치는이 질문커널 3.4용이고 아래도 마찬가지입니다. 실시간 패치 커널 3.4가 필요합니다.
새로운 nvidia 302 드라이버에는 xorg-server 1.12가 제공하는 비디오 ABI가 필요하지만 불행히도 Precise는 xorg-server 1.11과 함께 제공됩니다. 다음 지침에는xorg-edgers PPAxorg-server 1.12를 제공하는 소프트웨어 소스로 이는 특정 손상 위험을 초래합니다. 제거 지침은 하단에 있지만 문제가 발생할 수 있으니 끝까지 읽어보세요.
지침
패키지된 nvidia 드라이버 수정
임시 디렉터리를 만들고 다음을 사용하여 변경합니다.
mkdir -p ~/tmp/nvidia_302_fixrt && cd ~/tmp/nvidia_302_fixrt
nvidia-graphics-driver_302*에서 Precise용 패키지를 검색하여 xorg-edgers PPA에서 nvidia-current_302*.deb를 다운로드합니다.여기. 이 글을 쓰는 시점에서는 다음을 사용하여 직접 다운로드를 수행할 수 있습니다.
wget https://launchpad.net/~xorg-edgers/+archive/ppa/+files/nvidia-current_302.17-0ubuntu1~xedgers~precise1_amd64.deb
다음을 사용하여 .deb를 추출합니다.
dpkg-deb -x nvidia-current_*.deb deb_contents && dpkg-deb --control nvidia-current_*.deb deb_contents/DEBIAN
deb_contents/usr/src/nvidia-current*/patches
터미널에 다음을 붙여넣어 디렉터리 에 패치를 추가합니다 .d=$(echo deb_contents/usr/src/nvidia-current*/patches) ; cat > $d/buildfix_kernel_rt_3.4.patch <<'EOF' diff -u a/conftest.sh b/conftest.sh --- a/conftest.sh 2012-05-03 09:49:19.582854050 +0100 +++ b/conftest.sh 2012-05-03 09:52:58.524101586 +0100 @@ -95,7 +95,7 @@ fi fi - CFLAGS="$CFLAGS $OUTPUT_CFLAGS -I$HEADERS $AUTOCONF_CFLAGS" + CFLAGS="$CFLAGS $OUTPUT_CFLAGS -I$HEADERS -I$OUTPUT/arch/x86/include/generated $AUTOCONF_CFLAGS" test_xen @@ -965,11 +965,12 @@ # echo "$CONFTEST_PREAMBLE #include <linux/acpi.h> + #include <acpi/acpixf.h> void conftest_acpi_walk_namespace(void) { acpi_walk_namespace(); }" > conftest$$.c - $CC $CFLAGS -c conftest$$.c > /dev/null 2>&1 + #CC $CFLAGS -c conftest$$.c > /dev/null 2>&1 rm -f conftest$$.c if [ -f conftest$$.o ]; then @@ -980,6 +981,7 @@ echo "$CONFTEST_PREAMBLE #include <linux/acpi.h> + #include <acpi/acpixf.h> void conftest_acpi_walk_namespace(void) { acpi_walk_namespace(0, NULL, 0, NULL, NULL, NULL, NULL); }" > conftest$$.c @@ -1604,6 +1606,9 @@ fi fi + RET=0 + SELECTED_MAKEFILE=Makefile.kbuild + if [ "$RET" = "0" ]; then ln -s $SELECTED_MAKEFILE Makefile exit 0 diff -u a/nv-linux.h b/nv-linux.h --- a/nv-linux.h 2012-05-03 09:49:19.622853547 +0100 +++ b/nv-linux.h 2012-05-03 09:56:12.045668690 +0100 @@ -291,7 +291,18 @@ #endif #endif -#if defined(CONFIG_PREEMPT_RT) +#if defined(CONFIG_PREEMPT_RT_FULL) +typedef raw_spinlock_t nv_spinlock_t; +#define NV_SPIN_LOCK_INIT(lock) raw_spin_lock_init(lock) +#define NV_SPIN_LOCK_IRQ(lock) raw_spin_lock_irq(lock) +#define NV_SPIN_UNLOCK_IRQ(lock) raw_spin_unlock_irq(lock) +#define NV_SPIN_LOCK_IRQSAVE(lock,flags) raw_spin_lock_irqsave(lock,flags) +#define NV_SPIN_UNLOCK_IRQRESTORE(lock,flags) \ + raw_spin_unlock_irqrestore(lock,flags) +#define NV_SPIN_LOCK(lock) raw_spin_lock(lock) +#define NV_SPIN_UNLOCK(lock) raw_spin_unlock(lock) +#define NV_SPIN_UNLOCK_WAIT(lock) raw_spin_unlock_wait(lock) +#elif defined(CONFIG_PREEMPT_RT) typedef atomic_spinlock_t nv_spinlock_t; #define NV_SPIN_LOCK_INIT(lock) atomic_spin_lock_init(lock) #define NV_SPIN_LOCK_IRQ(lock) atomic_spin_lock_irq(lock) @@ -954,7 +965,9 @@ return ret; } -#if defined(CONFIG_PREEMPT_RT) +#if defined(CONFIG_PREEMPT_RT_FULL) +#define NV_INIT_MUTEX(mutex) sema_init(mutex,1) +#elif defined(CONFIG_PREEMPT_RT) #define NV_INIT_MUTEX(mutex) semaphore_init(mutex) #else #if !defined(__SEMAPHORE_INITIALIZER) && defined(__COMPAT_SEMAPHORE_INITIALIZER) EOF
패치를 터미널에 붙여넣어 dkms.conf에 추가합니다.
d=$(echo deb_contents/usr/src/nvidia-current*) ; cat >> $d/dkms.conf <<'EOF' PATCH_MATCH[1]="^3\.4.*(rt|realtime)" PATCH[1]="buildfix_kernel_rt_3.4.patch" EOF
다음을 실행하여 deb_contents/DEBIAN/control에서 버전 번호를 수정합니다.
sed -i 's/^\(Version: .*\)$/\1+rtfix/' deb_contents/DEBIAN/control
다음을 사용하여 드라이버를 다시 패키지하십시오.
dpkg -b deb_contents nvidia-current_$(sed -n 's/^\(Version: *\)//p' deb_contents/DEBIAN/control)_amd64.deb
PPA 및 수정된 드라이버 설치
xorg-edgers PPA를 추가합니다.
sudo add-apt-repository ppa:xorg-edgers/ppa && sudo apt-get update && sudo apt-get dist-upgrade
다음을 사용하여 로컬로 수정된 .deb를 설치합니다.
sudo dpkg -i nvidia-current_*+rtfix_*.deb
최신 상태 유지
xorg-edgers PPA는 최신 버전의 nvidia 드라이버가 출시되면 업데이트됩니다. 새 릴리스가 나올 때마다 위의 재패키징 지침을 반복해야 합니다.
제거 중
너~해야 한다nouveau
다음을 사용하여 드라이버 로 되돌릴 수 있습니다 .
sudo apt-get remove nvidia-current
sudo apt-get install ppa-purge
sudo ppa-purge ppa:xorg-edgers/ppa
내 경우에는 이 프로세스 wine
에 일부 i386 패키지(대신 다운그레이드했어야 함)와 함께 제거하는 작업이 포함되었습니다. ppa-purge
amd64를 사용 중이라면 주의하세요.멀티아크와 잘 어울리지 못한다(PPA 경고에 표시된 대로) 제 경우에는 결과가 문제가 아니었지만(단순히 재설치했습니다 wine
), 다른 사람들은 자신이 설치한 항목에 따라 심하게 손상된 종속성을 갖게 될 수도 있습니다.