재부팅하지 않고 KMS 드라이버 제거/NVIDIA Linux 드라이버 교체

재부팅하지 않고 KMS 드라이버 제거/NVIDIA Linux 드라이버 교체

과거에는 텍스트 콘솔로 전환하고 X.org를 종료한 rmmod후 해당 NVIDIA 모듈을 제거( )하고 새 드라이버를 설치한 후 즉시 NVIDIA 독점 드라이버를 쉽게 교체 할 수 있었습니다.

그러나 NVIDIA는 이제 KMS를 지원하는 드라이버를 실행할 것을 권장합니다. options nvidia-drm modeset=1이렇게 하면 커널 모듈을 언로드할 수 없습니다("장치 사용 중").

Linux 커널을 사용하면 다음 명령을 실행하여 텍스트 콘솔에서 그래픽 드라이버를 바인딩 해제할 수 있습니다.

echo 0 > /sys/class/vtconsole/vtcon1/bind

그러나 이 명령은 모든 텍스트 콘솔을 완전히 비활성화합니다. 그들은 멈추고 시스템은 계속 실행됩니다.

이 명령 다음에 다른 명령을 실행하여 NVIDIA 드라이버보다 먼저 텍스트 콘솔을 구동하는 내장 드라이버를 커널에서 다시 활성화해야 하는 것처럼 보이지만 인터넷에는 이에 대한 정보가 없습니다.

질문은 ~이야아니요NVIDIA 드라이버만 해당됩니다. 오픈 소스 KMS 드라이버(Intel, AMD 또는 Nouveau)를 제거하는 방법을 알아두면 좋을 것입니다.

시작 시 다음과 같이 표시됩니다.

Console: colour dummy device 80x25
printk: console [tty0] enabled
fbcon: Deferring console take-over
fbcon: Taking over console
Console: switching to colour frame buffer device 128x48

이 내 꺼야 .config:

CONFIG_SYSFB=y
CONFIG_SYSFB_SIMPLEFB=y
CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=200
CONFIG_FB_CMDLINE=y
CONFIG_FB_NOTIFY=y
CONFIG_FB=y
CONFIG_FB_DEFERRED_IO=y
CONFIG_FB_VESA=y
CONFIG_FB_EFI=y
CONFIG_FB_SIMPLE=y

내 콘텐츠는 다음과 같습니다 /sys.

$ find /sys -iname '*fb*'
/sys/class/graphics/fb0
/sys/class/graphics/fbcon
/sys/devices/platform/simple-framebuffer.0/graphics/fb0
/sys/devices/virtual/graphics/fbcon
/sys/module/drm_kms_helper/parameters/drm_fbdev_overalloc
/sys/module/drm_kms_helper/parameters/fbdev_emulation
/sys/module/fb
/sys/module/fb/parameters/lockless_register_fb

답변1

~에 따르면커널 fbcon 문서, 다음을 수행해야 합니다.

  1. vbetool을 다운로드하거나 설치하세요. 이제 대부분의 배포판에는 이 유틸리티가 포함되어 있으며 일시 중지/재개 도구의 일부인 경우가 많습니다.

  2. 커널 구성에서 CONFIG_FRAMEBUFFER_CONSOLE이 "y" 또는 "m"으로 설정되어 있는지 확인하세요. 선호하는 프레임버퍼 드라이버 중 하나 이상을 활성화하세요.

  3. 텍스트 모드로 부팅하고 루트로 실행합니다.

     vbetool vbestate save > <vga state file>
    

    위 명령은 그래픽 하드웨어의 레지스터 내용을 <vga 상태 파일>에 저장합니다. 상태 파일은 재사용할 수 있으므로 이 단계는 한 번만 수행하면 됩니다.

  4. fbcon이 모듈로 컴파일된 경우 다음을 수행하여 fbcon을 로드합니다.

    modprobe fbcon
    
  5. 이제 fbcon을 분리합니다.

    vbetool vbestate restore < <vga state file> && \
    echo 0 > /sys/class/vtconsole/vtcon1/bind
    
  6. 그렇게 하면 다시 VGA 모드로 돌아옵니다. fbcon을 모듈로 컴파일한 경우 제거할 수 있습니다 rmmod fbcon.

  7. fbcon을 다시 연결합니다.

    echo 1 > /sys/class/vtconsole/vtcon1/bind
    
  8. fbcon이 바인딩 해제되면 시스템에 등록된 모든 드라이버도 바인딩 해제됩니다. 이는 fbcon 및 개별 프레임 버퍼 드라이버를 마음대로 언로드하거나 다시 로드할 수 있음을 의미합니다. 드라이버 또는 fbcon을 다시 로드하면 콘솔, fbcon 및 드라이버가 자동으로 함께 바인딩됩니다. fbcon을 제거하지 않고 모든 드라이버를 제거하면 콘솔이 fbcon을 바인딩하지 못하게 됩니다.

설명서에서는 예제 스크립트도 제공합니다(전제 조건이 있는지 확인해야 함).

#!/bin/bash
# Unbind fbcon

# Change this to where your actual vgastate file is located
# Or Use VGASTATE=$1 to indicate the state file at runtime
VGASTATE=/tmp/vgastate

# path to vbetool
VBETOOL=/usr/local/bin


for (( i = 0; i < 16; i++))
do
  if test -x /sys/class/vtconsole/vtcon$i; then
      if [ `cat /sys/class/vtconsole/vtcon$i/name | grep -c "frame buffer"` \
           = 1 ]; then
        if test -x $VBETOOL/vbetool; then
           echo Unbinding vtcon$i
           $VBETOOL/vbetool vbestate restore < $VGASTATE
           echo 0 > /sys/class/vtconsole/vtcon$i/bind
        fi
      fi
  fi
done

이 단계를 수행한 후에도 여전히 응답이 없으면 ipaqmaster는 많은 차단 상황을 처리합니다.이 스크립트gpuLockHandler기능 에서 .

또한,누보 KMS 문서, CONFIG_VT_HW_CONSOLE_BINDING도 전제 조건입니다(아직 누락된 항목이 있는 경우).

관련 정보