NVIDIA Linux Open GPU 커널 모듈 소스
이것은 NVIDIA Linux open GPU 커널 모듈의 소스 릴리스이며, 버전은 615.78.08입니다.
빌드 방법
빌드를 하려면:
설치하려면, 먼저 기존에 존재하는 NVIDIA 커널 모듈을 제거해야 합니다. 그런 다음, root 권한으로 다음 명령어를 실행합니다:
make modules_install -j$(nproc)
참고: 여기서 빌드된 커널 모듈은 반드시 해당 615.78.08 드라이버 릴리스의 GSP 펌웨어 및 사용자 공간 NVIDIA GPU 드라이버 구성 요소와 함께 사용되어야 합니다. 이는 --no-kernel-modules 옵션을 사용하여 .run 파일로부터 NVIDIA GPU 드라이버를 설치함으로써 달성할 수 있습니다. 예시:
sh ./NVIDIA-Linux-[...].run --no-kernel-modules
지원되는 타겟 CPU 아키텍처
현재 커널 모듈은 x86_64 또는 aarch64용으로 빌드할 수 있습니다. 크로스 컴파일(cross-compiling)하는 경우, make 명령어 라인에 다음 변수들을 설정하십시오:
TARGET_ARCH=aarch64|x86_64
CC
LD
AR
CXX
OBJCOPY
예시:
# aarch64용 x86_64에서 컴파일
make modules -j$(nproc)
TARGET_ARCH=aarch64
ARCH=arm64
CC=aarch64-linux-gnu-gcc
LD=aarch64-linux-gnu-ld
AR=aarch64-linux-gnu-ar
CXX=aarch64-linux-gnu-g++
OBJCOPY=aarch64-linux-gnu-objcopy
기타 빌드 옵션 (Build Knobs)
NV_VERBOSE - 이것을
NVIDIA open kernel modules는 독점(proprietary) NVIDIA 커널 모듈과 동일한 범위의 Linux 커널 버전을 지원합니다.
현재는 Linux 커널 4.15 이상을 지원합니다.
기여 방법 (How to Contribute)
기여는 다음 링크에서 풀 리퀘스트(pull request)를 생성하여 할 수 있습니다.
GitHub를 통해 답변드리겠습니다.
풀 리퀘스트를 제출할 때, 기여자 라이선스 계약(Contributor License Agreement)에 동의하라는 메시지가 표시된다는 점에 유의하십시오.
이 코드베이스는 NVIDIA의 독점 드라이버와 공유되며, 여기에 게시되는 소스 코드를 생성하기 위해 다양한 처리가 이루어집니다. 이는 가까운 미래에 몇 가지 영향을 미칩니다:
-
GitHub 저장소는 대부분 각 드라이버 릴리스의 스냅샷(snapshot) 역할을 할 것입니다.
-
NVIDIA의 공유 코드베이스에 이루어진 개별 변경 사항에 대한 수정 이력(revision history)을 제공할 수 없을 것으로 예상합니다. 드라이버 릴리스당 하나의 git 커밋만 있을 가능성이 높습니다.
-
GitHub 저장소에서 개별 기여를 별도의 git 커밋으로 반영하지 못할 수도 있습니다.
-
코드가 여기에 게시되기 전에 다양한 처리를 거치기 때문에, 여기서 이루어진 기여는 공유 코드베이스에 적용되려면 수동 병합(manual merging)이 필요합니다. 따라서, 여기서 수행된 대규모 리팩토링 변경 사항은 공유 코드베이스에 병합하고 받아들이기가 어려울 수 있습니다. 만약 대규모 리팩토링을 제안할 것이 있다면, 사전에 저희에게 연락하여 조정할 수 있도록 해주십시오.
문제 보고 방법 (How to Report Issues)
Open GPU Kernel Modules에 특정한 문제는 https://github.com/NVIDIA/open-gpu-kernel-modules 저장소의 이슈(Issues) 섹션에 보고할 수 있습니다.
또한, 기존의 버그 보고 채널을 사용하여 NVIDIA에 문제를 전달할 수 있으며, 예를 들어 저희 포럼:
또는 [email protected]으로 할 수 있습니다.
자세한 내용은 NVIDIA GPU Driver README의 'NVIDIA 연락처 정보 및 추가 리소스(NVIDIA Contact Info and Additional Resources)' 섹션을 참조하십시오.
이 소프트웨어에서 보안 취약점을 발견했다고 생각하는 경우, 별도의 SECURITY.md 문서를 확인해 주십시오.
커널 인터페이스 및 OS 독립형 커널 모듈 구성 요소
대부분의 NVIDIA 커널 모듈은 두 가지 구성 요소로 분리되어 있습니다:
NVIDIA .run 설치 패키지로 패키징될 때, OS 독립형 구성 요소는 바이너리 형태로 제공됩니다. 이를 컴파일하는 것은 크고 시간이 많이 소요되므로, 사용자가 드라이버를 설치할 때마다 직접 컴파일할 필요가 없도록 미리 빌드된 버전이 제공됩니다. nvidia.ko 커널 모듈의 경우 이 구성 요소는 "nv-kernel.o_binary"라는 이름으로 불립니다. nvidia-modeset.ko 커널 모듈의 경우 이 구성 요소는 "nv-modeset-kernel.o_binary"입니다. 다만, nvidia-drm.ko와 nvidia-uvm.ko에는 OS 독립형 구성 요소가 없습니다.
각 커널 모듈의 커널 인터페이스 계층 구성 요소는 대상(target) 커널을 위해 빌드되어야 합니다.
디렉토리 구조 레이아웃
-
kernel-open/ 커널 인터페이스 계층
-
kernel-open/nvidia/ nvidia.ko의 커널 인터페이스 계층
-
kernel-open/nvidia-drm/ nvidia-drm.ko의 커널 인터페이스 계층
-
kernel-open/nvidia-modeset/ nvidia-modeset.ko의 커널 인터페이스 계층
-
kernel-open/nvidia-uvm/ nvidia-uvm.ko의 커널 인터페이스 계층
-
src/ OS 독립형 코드
-
src/nvidia/ nvidia.ko의 OS 독립형 코드
-
src/nvidia-modeset/ nvidia-modeset.ko의 OS 독립형 코드
-
src/common/ nvidia.ko 및 nvidia-modeset.ko 중 하나 이상에서 사용되는 유틸리티 코드
-
nouveau/ Nouveau 디바이스 드라이버와의 통합 도구
Nouveau 디바이스 드라이버 통합
‘nouveau’ 디렉터리에 있는 Python 스크립트는 소스 코드에 인코딩된 일부 펌웨어 바이너리 이미지(및 관련 데이터)를 추출하여 개별 파일로 저장하는 데 사용됩니다. 이 파일들은 Nouveau 장치 드라이버가 GSP 펌웨어를 로드하고 통신하는 데 사용됩니다.
바이너리 파일의 레이아웃은 OpenDocument Spreadsheet 파일인 nouveau_firmware_layout.ods에 설명되어 있으며, 이는 대부분의 스프레드시트 소프트웨어 애플리케이션과 호환됩니다.
호환 GPU
NVIDIA 오픈 커널 모듈은 모든 Turing 또는 그 이후 GPU에서 사용할 수 있습니다 (아래 표 참조).
기능 지원 및 제한 사항에 대한 자세한 내용은 NVIDIA GPU 드라이버 최종 사용자 README를 여기서 확인하십시오:
vGPU 지원의 경우, 더 자세한 내용을 위해 vGPU Host Package에 패키징된 README.vgpu를 참조하십시오.
아래 표에서 세 개의 ID가 나열된 경우, 첫 번째는 PCI 장치 ID, 두 번째는 PCI 하위 시스템 공급업체 ID, 그리고 세 번째는 PCI 하위 시스템 장치 ID입니다.
| 제품명 | PCI ID |
|---|
| NVIDIA TITAN RTX | 1E02 |
| ... | |