NVIDIA Linux VBIOS Vix Loader
English | Español
Linux에서 부팅 시 각 NVIDIA GPU에 수정된 VBIOS를 메모리상으로 로드합니다: 카드의 플래시 칩에는 절대 쓰지 않습니다. NVIDIA 오픈 커널 모듈을 패치하여 GSP 펌웨어가 사용자의 VBIOS 이미지로 시작하도록 하고, 이를 별도의 부팅 항목으로 구성하며, 커널 업데이트 후에도 자동으로 재구성하고, 일반적인 부팅 항목을 폴백(fallback)으로 유지합니다.
NVIDIA 615.x (R615) 드라이버와 함께 작동합니다. NVIDIA가 오버라이드(override)를 변경하거나 제거하기로 결정할 경우 향후 드라이버에서 작동하지 않을 수 있으므로, 모든 드라이버 업데이트 후에는 nvbios system status를 실행하고 편집된 값(예: nvidia-smi -q -d POWER의 전력 제한)을 확인해야 합니다.
이 프로젝트는 원래 vbios_override 패치를 제공한 @pantsoftime (overclock.net) 덕분에 구축되었습니다. 이것 없이는 아무것도 불가능했을 것입니다.
VBIOS를 수정하려면 NVIDIA VBIOS Vix Editor를 사용하세요. 이 저장소는 로드만 합니다. Windows에서는 NVIDIA Windows VBIOS Vix Loader를 사용하세요.
이 프로젝트는 NVIDIA와 제휴하거나 NVIDIA의 승인을 받은 것이 아닙니다. NVIDIA 및 GeForce는 NVIDIA Corporation의 상표입니다.
경고. 수정된 VBIOS는 카드 설계 한계를 초과하여 전력, 클럭, 전압을 높일 수 있습니다. 하드웨어 손상을 입힐 수 있습니다. 원본 ROM 사본을 보관하고 본인의 책임하에 사용하십시오.
Status
| 플랫폼 | 상태 |
|---|
Fedora 43, GRUB/BLS, dracut, DNF5, NVIDIA 615.x open kernel modules를 .run 설치 프로그램으로 설치한 경우 | 지원됨: 실제 하드웨어에서 사용함 |
| ... | |
| 패키지 관리자 드라이버 업그레이드 후 로더는 github.com/NVIDIA/open-gpu-kernel-modules에서 일치하는 태그를 다운로드하고, 패키지 레이아웃을 인식할 때 배포판 자체의 소스 사본과 비교한 다음 재빌드합니다. | |
NVIDIA의 저장소와 Arch는 전체 트리를 설치하며, 이는 전체가 비교됩니다. RPM Fusion과 Ubuntu는 kernel-open만 설치하므로, 태그의 최상위 Makefiles와 src/ 디렉터리는 GitHub의 TLS에 의해서만 신뢰됩니다(nvbios system status에서 cross_check: kernel-open-only). | |
| 오프라인이거나 P2P 프로필을 사용하거나 불일치가 발생하면, 모듈을 옆으로 치우고 자체 NVIDIA 모듈(배포판에서 온)이 새 버전을 위해 빌드되었고 부팅 이미지가 다른 NVIDIA 빌드를 로드하지 않는 가장 최신 정상 항목을 선택하여 오버라이드 없이 부팅합니다. 만약 그런 것이 없다면 이전 항목이 기본값으로 유지됩니다. | |
nvbios system status는 설치 후 명령을 보여줍니다. | |
--no-auto-source (prepare 시)는 다운로드를 비활성화합니다. | |
다음에서 테스트 작동 확인: RTX PRO 6000 Blackwell Max-Q, RTX PRO 6000 Blackwell Workstation Edition, GeForce RTX 5090, 5080, 5070 Ti, 5070, 5060 Ti 및 RTX 2000 Ada.
Ada GSP 펌웨어는 페이로드의 레거시 이미지로부터 최대 512 KiB를 로드하므로, Ada 페이로드는 Vix Editor를 사용하여 재배치해야 합니다:
- RTX 2000 Ada (테스트됨):
nvbios normalize edited.rom gpu0.bin --representation ada-relocated-v1 (0.1.5 이상).
- 실험적이며, 하드웨어에서 테스트되지 않음: 다른 데스크톱 및 워크스테이션 Ada GPU의 경우
--representation ada-relocated-v2 (0.1.6 이상)를 사용합니다. RTX 4090, 4080 (SUPER), 4070 Ti SUPER, 4070 (SUPER), 4060 Ti, 4060 및 RTX 6000/5000/4500/4000 Ada 이미지에 대해 오프라인으로 작동합니다. 검증되지 않는 것은 거부됩니다. 시도할 경우, 결과와 함께 이슈를 열어주십시오.
- 테스트된 노트북 Ada 이미지는 거부됩니다: 네 개는 맞지 않고, RTX 4090 Laptop 이미지는 UEFI 이미지가 없습니다.
Ampere GA102–GA107은 선택된 레거시 이미지부터 페이로드 끝까지 카운트되는 동일한 512 KiB GSP 로드 제한을 가집니다. 이 로더는 펌웨어가 기본 VBIOS를 조용히 사용하는 대신, 준비 및 등록 중에 너무 큰 이미지를 거부합니다. 평범하게 정규화된 Ampere ROM은 이를 초과합니다. 실험적이며, 하드웨어에서 테스트되지 않음: nvbios normalize edited.rom gpu0.bin --representation ampere-relocated-v1 (Vix Editor 0.1.9 이상)는 UEFI 이미지를 제거하고 마지막 데이터 이미지 이후의 바이트를 제거하며, 이는 검사된 이미지에서 레거시 이미지로부터 약 443–506 KiB가 남게 합니다(파일은 전송되지 않는 ~37 KiB 접두사를 유지합니다). 검증되지 않는 것은 거부됩니다. 시도할 경우, 결과와 함께 이슈를 열어주십시오. GA100은 다른 펌웨어를 사용하며 이 용량 감사 범위 밖에 있습니다.
Turing (TU102, TU104, TU106, TU116, TU117)의 경우: 실험적이며, 어떤 Turing GPU에서도 테스트되지 않았습니다. 패치된 모듈은 이러한 칩을 수용하며, 해당 GSP 펌웨어(gsp_tu10x.bin)는 동일한 오버라이드 리시버와 512 KiB 제한(615.78.08의 정적 분석에서 발견되었으며 하드웨어에서는 아님)을 가집니다. 단일 은행 Turing 페이로드는 레거시 이미지에서 250-355 KB를 전송하며(파일은 최대 ~162 KiB까지 접두사를 유지하지만 이는 전송되지 않음), 리로케이션이 필요하지 않습니다: nvbios normalize edited.rom gpu0.bin. Vix Editor 0.1.18 이상 버전에서는 <name>-loader-e0end.bin(--representation turing-e0-end-v1)도 저장하는데, 이는 첫 번째 파일이 로드되지만 편집 내용이 적용되지 않을 때 시도할 변형입니다. GSP가 이미지를 거부하면 카드는 기본 VBIOS로 실행됩니다. 도움을 받으려면 Turing tester guide를 따라주세요: 먼저 수정하지 않은 ROM을 로드한 다음, 전력 제한 편집을 수행하고, 그 전후의 nvidia-smi -q -d POWER와 journalctl -k -b의 vbios_override 라인을 보고하세요.## 다중 GPU**1–32개의 GPU를 선택하고, 각 장치에 대해 --device INDEX PAYLOAD를 반복합니다. 인덱스는 준비 과정에서 UUID 및 PCI 주소로 해결되며, 할당 및 전체 페이로드 해시는 별도로 확인됩니다. 구성은 initramfs에 저장되어 모든 GPU가 커널 명령줄에 추가되지 않습니다.패치된 모듈은 레지스트리 매개변어당 4094 바이트를 수용합니다. 일반적인 17개 GPU 구성은 펌웨어 파일 이름에 1733바이트를 사용하며, 32개 GPU는 3263바이트를 사용합니다. 보존된 추가 레지스트리 설정도 동일한 예산에 포함됩니다. 크기가 큰 구성은 게시 전에 실패합니다. 업데이트된 로더를 통해 재빌드해야 합니다: 원래의 1024바이트 제한을 가진 오래된 모듈로는 확장된 값을 로드할 수 없습니다. 8개 이상의 GPU 지원은 오프라인 테스트가 진행되었으며, 17개 또는 32개 GPU 하드웨어 부팅은 아직 검증되지 않았습니다.## 필요한 것들
- open 커널 모듈을 사용하는 작동하는 NVIDIA 615.x (R615) 드라이버;
nvidia-smi가 GPU 목록을 표시해야 합니다.
- 설치된 버전에 대한 정확한 open 커널 모듈의 패치되지 않은 소스, 예를 들어:
git clone --depth 1 --branch 615.78.08 https://github.com/NVIDIA/open-gpu-kernel-modules
- Python 3.11 이상, 실행 중인 커널의 헤더(
Fedora에서는 kernel-devel), make, dracut, grub2-editenv, 그리고 mokutil. DNF5를 사용하는 경우, libdnf5-plugin-actions도 필요합니다.
GRUB_DEFAULT=saved 및 GRUB_ENABLE_BLSCFG=true가 설정된 GRUB (Fedora 기본값).
- Secure Boot 비활성화 또는 자체 모듈 서명 키:
prepare에 --signing-key와 --signing-certificate를 전달합니다.
- GPU당 하나의 VBIOS 페이로드: 해당 카드를 위한 단일 체인 이미지. 두 개의 뱅크를 포함하는 전체 ROM 덤프는 거부됩니다. Vix Editor의 명령줄 도구를 사용합니다:
./nvbios-<버전>-linux-x86_64 normalize edited.rom gpu0.bin. Ada 및 Ampere의 경우, 위에 주어진 --representation(ada-relocated-v1, ada-relocated-v2 또는 ampere-relocated-v1)를 추가해야 합니다. 이것이 없으면 페이로드가 512 KiB GSP 제한을 초과하여 거부됩니다. Vix Editor 0.1.11 이상은 이 페이로드도 편집된 Ada 또는 Ampere 복사본 옆에 <이름>-loader.bin으로 저장합니다. Turing는 --representation가 필요하지 않습니다 (위 참조).
Window
Fedora 및 RHEL 계열 시스템에서 로더는 Install 섹션의 단계와 대안으로 GUI도 제공합니다. GTK 4.10 이상과 PyGObject(sudo dnf install python3-gobject gtk4)가 필요합니다.
클론(clone)에서, sudo 없이 실행합니다. 이 명령어는 감지된 드라이버, 커널, Secure Boot 및 부팅 설정을 보여주며, GPU당 한 줄씩 표시됩니다. 각 GPU에 대해 새 파일(New file) (편집기가 저장한 .rom 또는 <이름>-loader.bin), 현재 파일 유지(Keep the current file) 또는 자체 VBIOS 사용(Own VBIOS, no override) 중 하나를 선택합니다. NVIDIA 소스 출처를 선택합니다(마지막 로드 시 저장된 복사본, 설치된 버전 다운로드, 또는 폴더; P2P 소스는 표시). 그런 다음 **로드(Load)**를 누릅니다. 비밀번호를 한 번 요청하고 nvbios system setup을 실행하며, 이 명령어는 아래의 2~4단계를 실시간 진행 상황과 함께 수행합니다. 그 후 재부팅하면 정상적인 부팅 항목은 메뉴에 남아 있으며 오버라이드를 로드하지 않습니다. **오버라이드 제거(Remove override)**는 nvbios system disable을 실행합니다. 메뉴 > **세부 정보(Details)**에서 nvbios system status를 확인할 수 있습니다.
Fedora 43에서 8개의 GPU로 테스트했습니다: 두 개의 새 파일(RTX PRO 4000 Blackwell SFF 및 RTX 2000 Ada, 둘 다 106W 전력 제한으로 설정)과 여섯 개는 유지된 상태였습니다. 재부팅 후 두 GPU 모두 새로운 제한을 보고했습니다.
이 창은 root로 시작하는 것을 거부합니다. 그래픽 비밀번호 에이전트(예: SSH를 통한 경우)가 없으면 대신 sudo 명령어를 출력합니다. 자체 서명 키를 사용한 Secure Boot, 다른 배포판 및 .run 설치 프로그램을 이용한 드라이버 업데이트는 여전히 명령줄 단계를 사용합니다.
설치
이 명령어들을 이 저장소의 클론에서 실행하세요.
- GPU 목록을 나열합니다. 각 GPU의 인덱스(예:
nvidia-smi와 같음)를 기록하고 해당 페이로드에 매칭시킵니다.
sudo ./nvbios system devices
- 프로필을 준비하며, GPU당 하나의
--device를 사용합니다 (.run 드라이버의 경우 --userspace manual; 패키지 관리자 드라이버의 경우 rpm, deb 또는 pacman). 이 단계는 출력 디렉터리만 작성합니다.
sudo ./nvbios system prepare \
--device 0 /path/to/gpu0.bin \
--device 1 /path/to/gpu1.bin \
...
장치(device)는 GPU UUID 또는 PCI 주소로도 선택할 수 있습니다 (--device 0000:03:00.0 ...).
- 도구를 설치하고 프로필을 등록합니다.
--dry-run은 무엇이 변경될지 보여줍니다.
sudo ./nvbios system install --repository "$PWD"
sudo /usr/local/bin/nvbios system enroll --profile "$PWD/gpu-profile/profile.json"
- 모듈과 부팅 항목을 빌드하여 기본값으로 설정한 다음, 업데이트 후 자동 재빌드를 활성화합니다. 빌드에는 몇 분이 걸립니다.
sudo /usr/local/bin/nvbios system reconcile --kernel "$(uname -r)"
sudo /usr/local/bin/nvbios system enable --kernel "$(uname -r)"
sudo /usr/local/bin/nvbios system status
- 재부팅합니다. 일반 항목은 부팅 메뉴에 유지됩니다. 재부팅 후,
sudo nvbios system status는 로드된 모듈과 매개변수를 준비된 것과 비교합니다.
기존 로더 설치 업데이트하기
이 체크아웃을 업데이트한 후, 현재 설치된 NVIDIA 드라이버의 소스를 사용하여 설치된 런타임을 교체하고 재빌드합니다:
sudo nvbios system pre-install
sudo nvbios system install --repository "$PWD"
sudo nvbios system post-install --source /path/to/current-open-kernel-modules
기존 프로필이 P2P 소스를 요구하는 경우, post-install에서 --p2p-preferred를 유지합니다. 이 순서는 로더를 업데이트하고 새로운 부팅 이미지를 빌드하며, NVIDIA 사용자 공간을 재설치하거나 활성 GPU 모듈을 다시 로드하지 않습니다. post-install이 완료될 때까지 기다린 후 재부팅합니다. 오래된 설치된 런타임이나 모듈은 이 저장소를 다운로드하는 것만으로는 확장된 GPU 개수를 얻지 못합니다.
커널 및 드라이버 업데이트
- 커널 업데이트는 자동으로 처리됩니다: 패키지 후크와 재시도 타이머가 새 커널에 대한 모듈과 부팅 항목을 재빌드합니다.
- 드라이버 업데이트 (
.run 설치): 이전 드라이버를 제거하기 전에 sudo nvbios system pre-install을 실행하고, 새 드라이버를 설치한 다음, 새로운 버전의 일치하는 패치되지 않은 소스를 등록합니다:
sudo nvbios system post-install --source /path/to/open-gpu-kernel-modules-NEW
새 부팅 항목을 빌드하고 선택하며 자동 업데이트를 재개합니다. 완료되면 재부팅하십시오.
재부팅하기 전에 post-install을 실행하세요. 그렇지 않으면 이전 드라이버용으로 빌드된 모듈이 일반 부팅을 포함한 모든 부팅 항목에서 우선권을 가지므로 NVIDIA 드라이버가 시작되지 않습니다. 이미 재부팅했다면, 해당 부팅에서 post-install을 실행하세요. 이 명령어는 nvidia-smi가 실패하는 경우에도 작동합니다.
- 드라이버 업데이트 (패키지 관리자, 실험적): 실행할 것이 없습니다. 패키지 훅(package hook)이 업그레이드 중에 일치하는 소스를 다운로드하고 재빌드합니다 (상태 참조). 재부팅하기 전에
sudo nvbios system status를 확인하세요: 만약 재빌드가 불가능했다면, 배포판의 새 모듈을 사용하는 일반 항목(또는 이전 항목이 없는 경우 이전 항목)이 기본값이며 status가 post-install 명령어를 보여줍니다.
문제가 발생했을 경우