kmod-nvidia 드라이버 사용을 시작하는 방법

kmod-nvidia 드라이버 사용을 시작하는 방법

NVIDIA GeForce GTX 660 Ti 그래픽 카드가 장착된 컴퓨터에 Fedora 21을 설치했습니다. 처음 시스템을 설치했을 때 kmod-nvidiaRPMFusion에서 패키지를 설치할 때까지 시스템을 실행하는 데 많은 문제가 있었습니다 . 그 이후로 운영 체제 자체에 대한 나의 경험은 별다른 일이 없었습니다.

그러나 커널 선택 화면과 부팅 과정에서 복호화 비밀번호를 묻는 메시지가 표시되면 기본 텍스트 인터페이스를 사용하기 때문에 기본 그래픽 드라이버를 사용하고 있음을 알 수 있습니다(테마에 나타나는 일반 텍스트 상자와 비교). plymouth) . 또한 암호 해독 문구를 입력하면 Fedora 풍선 대신 막대 그래프가 로드됩니다.

이것은 분명히 큰 문제는 아니지만 내 시스템에 유능한 드라이버가 있다는 것을 알고 있지만 시스템에 초기에 로드하도록 하는 방법을 모르기 때문에 한동안 궁금했습니다.

처음에 시스템을 진단하고 수리할 때 다음과 같이 했습니다.이 가이드사실이 아니면 거짓입니다.

도움을 주시면 감사하겠습니다!

답변1

다음은 rpmfusion nonfree에서 kmod-nvidia 소프트웨어를 가져와 Secure Boot/UEFI용으로 구성된 컴퓨터에서 Fedora 26과 함께 사용하는 방법입니다. nvidia 커널 모듈에 대해 modprobe를 실행할 때 "필요한 키를 사용할 수 없습니다"라는 오류가 발생합니다.

UEFI 보안 부팅을 활성화하고 독점 nvidia 드라이버를 실행하는 것이 가능하며 그리 어렵지 않습니다.

  • rpmfusion 무료 및 비자유 저장소를 설치한 후 kmod-nvidia를 설치합니다.dnf install kmod-nvidia
  • openssl을 구성하고 다음 명령을 실행하여 자체 서명된 인증서와 키를 생성합니다.

    cd /root #or somewhere reasonably safe
    cat > mokutil-openssl.conf << XYZZY
    [ req ]
    default_bits = 4096
    distinguished_name = req_distinguished_name
    string_mask = utf8only
    x509_extensions = exts
    prompt = no
    
    [ req_distinguished_name ]
    O = username
    CN = username
    emailAddress = [email protected]
    
    [ exts ]
    basicConstraints=critical,CA:FALSE
    keyUsage=digitalSignature
    subjectKeyIdentifier=hash
    authorityKeyIdentifier=keyid
    XYZZY
    
    # create the certificate & key
    openssl req -x509 -new -nodes -utf8 -sha256 -days 7300 -config ./mokutil-openssl.conf -outform DER -out mokutil.der -keyout mokutil.key -batch
    # to verify the certificate:
    openssl x509 -inform DER -in ./mokutil.der -noout -text |less
    
  • 다음으로 제공된 유틸리티를 사용하여 새 nvidia 커널 모듈에 서명합니다.

    cd /lib/modules/$(uname -r)/extra/nvidia
    /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 /root/mokutil.key /root/mokutil.der nvidia.ko
    /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 /root/mokutil.key /root/mokutil.der nvidia-drm.ko 
    /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 /root/mokutil.key /root/mokutil.der nvidia-modeset.ko 
    /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 /root/mokutil.key /root/mokutil.der nvidia-uvm.ko 
    
  • 신뢰할 수 있으려면 인증서를 BIOS에 추가해야 합니다.

    # first, we stage the new certificate to be added to the BIOS on 
    # the next reboot.  You will be prompted to enter a password when
    # running the utility; the BIOS will ask for the same password on 
    # reboot.
    mokutil --import ./mokutil.der
    
    # This command shows whether or not mokutil was able to stage the
    # new certificate for import into the BIOS.  If the process is 
    # unsuccessful, you may have to enter the BIOS and import the key
    # manually from its interface, perhaps from a USB stick.  If this
    # command returns your certificate, you should reboot.  The BIOS 
    # will prompt you to take action and enter in the password you
    # input in the previous step.
    mokutil -N
    
    # This command shows which certificates are trusted by the BIOS.
    # There will be one installed by the manufacturer and if 
    mokutil --list-enrolled 
    
  • 모든 것이 순조롭게 진행되었다면 컴퓨터에 새 모듈이 로드되었을 것입니다. 당신은 확인할 수 있습니다lsmod |grep nvidia

  • 새 커널을 설치할 때 모듈에 다시 서명해야 합니다.

대부분의 정보를 알아냈어요여기하지만 서명 유틸리티는 Perl을 사용하여 호출할 필요가 없습니다. 또한 kmod-nvidia 빌드 프로세스를 통해 출력된 4개 모듈 모두에 서명했습니다.

답변2

Liczyrzepa의 답변(나에게 매우 도움이 됨)을 통해 Fedora가 새 커널을 출시할 때마다(즉, 항상!) 모든 "추가" 모듈에 서명하는 작은 스크립트를 만들 수 있었지만 Fedora가 출시되기 시작하면 이 스크립트는 다음과 같습니다. .ko.xz 모듈에 대한 스크립트가 실패합니다.

내가 받은 오류 메시지로 인해 한동안 난처한 상황에 처하게 되었기 때문에 유용할 수 있기를 바라면서 여기에 수정된 스크립트를 추가해야겠다고 생각했습니다. Liczyrzepa 답변의 "일회성"부분, 즉 키 생성 및 BIOS에 설치도 적용됩니다.


#!/bin/bash
signfile=/usr/src/kernels/$(uname -r)/scripts/sign-file
key=/root/mokutil.key
der=/root/mokutil.der
for moddir in /lib/modules/$(uname -r)/extra/*
do
   cd $moddir
   echo "entered $moddir"
   for module in *.ko*;   do 
     module_basename=${module:0:-3}
     module_suffix=${module: -3}
     if [[ "$module_suffix" == ".xz" ]]; then
          unxz $module
          $signfile sha256 "${key}" "${der}" "${module_basename}"
          xz -f ${module_basename}
     else
          $signfile sha256 "${key}" "${der}" "${module_basename}"
     fi
   echo "signed $module" 
   done
done

관련 정보