dkms를 사용하여 rhel 8.6에 Nvidia 드라이버를 설치했지만 빌드 시 asm/kmap_types.h 및 drm/drmP.h 오류가 발생함

dkms를 사용하여 rhel 8.6에 Nvidia 드라이버를 설치했지만 빌드 시 asm/kmap_types.h 및 drm/drmP.h 오류가 발생함

Rhel 8.6 Lenovo p15에 T1000 Quadro용 nvidia 드라이버를 설치하려고 합니다. 그런데 드라이버를 빌드하고 설치하려고 할 때 오류가 발생했습니다.

시스템 메시지?

root:Downloads# hostnamectl | grep Kernel
            Kernel: Linux 4.18.0-372.9.1.el8.x86_64
root:Downloads# lshw -c video
  *-display UNCLAIMED       
       description: VGA compatible controller
       product: TU117GLM [Quadro T1000 Mobile]
       vendor: NVIDIA Corporation
       physical id: 0
       bus info: pci@0000:01:00.0
       version: a1
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress vga_controller bus_master cap_list
       configuration: latency=0
       resources: memory:ad000000-adffffff memory:80000000-8fffffff memory:90000000-91ffffff ioport:3000(size=128) memory:ae080000-ae0fffff
  *-display
       description: VGA compatible controller
       product: CometLake-H GT2 [UHD Graphics]
       vendor: Intel Corporation
       physical id: 2
       bus info: pci@0000:00:02.0
       logical name: /dev/fb0
       version: 05
       width: 64 bits
       clock: 33MHz
       capabilities: pciexpress msi pm vga_controller bus_master cap_list fb
       configuration: depth=32 driver=i915 latency=0 mode=3840x2160 resolution=3840,2160 visual=truecolor xres=3840 yres=2160
       resources: iomemory:600-5ff iomemory:400-3ff irq:163 memory:6040000000-6040ffffff memory:4000000000-400fffffff ioport:4000(size=64) memory:c0000-dffff
root:Downloads# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.6 (Ootpa)

엔비디아에서 드라이버를 받았는데,여기.

root:Downloads# ls -l | grep NVIDIA
-rwxr-xr-x.  1 brad brad 110600229 May 29 22:22 NVIDIA-Linux-x86_64-430.26.run

실행 스크립트를 실행하면 다음 DKMS 단계가 표시됩니다.

  ERROR: Failed to run `/sbin/dkms build -m nvidia -v 430.26 -k 4.18.0-372.9.1.el8.x86_64`:
         Building module:       
         cleaning build area...                                                                         
         'make' -j12 NV_EXCLUDE_BUILD_MODULES='' KERNEL_UNAME=4.18.0-372.9.1.el8.x86_64
         IGNORE_CC_MISMATCH='' modules....(bad exit status: 2)                                          
         Error! Bad return status for module build on kernel: 4.18.0-372.9.1.el8.x86_64 (x86_64)
         Consult /var/lib/dkms/nvidia/430.26/build/make.log for more information.

make 로그는 무엇을 말합니까? 이것(페이스트빈)그리고 아래 예입니다.

make[3]: *** [/usr/src/kernels/4.18.0-372.9.1.el8.x86_64/scripts/Makefile.build:315: /var/lib/dkms/nvidia/430.26/build/nvidia/nv-mmap.o] Error 1
make[3]: *** [/usr/src/kernels/4.18.0-372.9.1.el8.x86_64/scripts/Makefile.build:315: /var/lib/dkms/nvidia/430.26/build/nvidia/nv-i2c.o] Error 1
make[3]: *** [/usr/src/kernels/4.18.0-372.9.1.el8.x86_64/scripts/Makefile.build:315: /var/lib/dkms/nvidia/430.26/build/nvidia/nv-mempool.o] Error 1
In file included from /var/lib/dkms/nvidia/430.26/build/nvidia/nv-p2p.c:15:
/var/lib/dkms/nvidia/430.26/build/common/inc/nv-linux.h:118:10: fatal error: asm/kmap_types.h: No such file or directory
 #include <asm/kmap_types.h>         /* page table entry lookup          */
          ^~~~~~~~~~~~~~~~~~
compilation terminated.
make[3]: *** [/usr/src/kernels/4.18.0-372.9.1.el8.x86_64/scripts/Makefile.build:315: /var/lib/dkms/nvidia/430.26/build/nvidia/nv-p2p.o] Error 1
make[2]: *** [/usr/src/kernels/4.18.0-372.9.1.el8.x86_64/Makefile:1577: _module_/var/lib/dkms/nvidia/430.26/build] Error 2
make[2]: Leaving directory '/usr/src/kernels/4.18.0-372.9.1.el8.x86_64'
make[1]: *** [Makefile:157: sub-make] Error 2
make[1]: Leaving directory '/usr/src/kernels/4.18.0-372.9.1.el8.x86_64'
make: *** [Makefile:81: modules] Error 2

dkms를 사용하여 설치를 시도하지 않으면 어떻게 되나요? 글쎄요, 그러고 싶지만 뭐...

  ERROR: An error occurred while performing the step: "Building kernel modules". See
         /var/log/nvidia-installer.log for details.

그리고

  ERROR: An error occurred while performing the step: "Checking to see whether the nvidia kernel module
         was successfully built". See /var/log/nvidia-installer.log for details.

그리고 물론

  ERROR: The nvidia kernel module was not created.

...

  ERROR: Installation has failed.  Please see the file '/var/log/nvidia-installer.log' for details.     
         You may find suggestions on fixing installation problems in the README available on the Linux  
         driver download page at www.nvidia.com.

그 기록에는 뭐라고 적혀 있었나요? 괜찮은,엔비디아 설치 프로그램(pastebin)그리고 샘플.

   make[3]: *** [/usr/src/kernels/4.18.0-372.9.1.el8.x86_64/scripts/Makefile.build:316: /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia/nv-instance.o] Error 1
     CC [M]  /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia/nv-procfs.o
   In file included from /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia/nv-acpi.c:15:
   /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/common/inc/nv-linux.h:118:10: fatal error: asm/kmap_types.h: No such file or directory
    #include <asm/kmap_types.h>         /* page table entry lookup          */
             ^~~~~~~~~~~~~~~~~~
   compilation terminated.
   make[3]: *** [/usr/src/kernels/4.18.0-372.9.1.el8.x86_64/scripts/Makefile.build:316: /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-uvm/uvm8_fault_buffer_flush_test.o] Error 1
     CC [M]  /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-modeset.o
   In file included from /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-fb.c:29:
   /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-fb.h:30:10: fatal error: drm/drmP.h: No such file or directory
    #include <drm/drmP.h>
             ^~~~~~~~~~~~
   compilation terminated.
   make[3]: *** [/usr/src/kernels/4.18.0-372.9.1.el8.x86_64/scripts/Makefile.build:316: /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-uvm/uvm8_peer_identity_mappings_test.o] Error 1
   make[3]: *** [/usr/src/kernels/4.18.0-372.9.1.el8.x86_64/scripts/Makefile.build:316: /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-helper.o] Error 1
     CC [M]  /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.o
   In file included from /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.c:27:
   /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.h:33:30: error: field 'base' has incomplete type
        struct nv_drm_gem_object base;
                                 ^~~~
   /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.h:37:5: error: unknown type name 'bool'
        bool dumb_buffer;
        ^~~~
   /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.h: In function 'to_nv_nvkms_memory':
   /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.h:46:19: error: 'NULL' undeclared (first use in this function)
        if (nv_gem != NULL) {
                      ^~~~
   /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.h:46:19: note: 'NULL' is defined in header '<stddef.h>'; did you forget to '#include <stddef.h>'?
   /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.h:31:1:
   +#include <stddef.h>
    
   /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.h:46:19:
        if (nv_gem != NULL) {
                      ^~~~
   /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.h:46:19: note: each undeclared identifier is reported only once for each function it appears in
   /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.h:47:16: error: implicit declaration of function 'container_of' [-Werror=implicit-function-declaration]
            return container_of(nv_gem, struct nv_drm_gem_nvkms_memory, base);
                   ^~~~~~~~~~~~
   /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.h:47:37: error: expected expression before 'struct'
            return container_of(nv_gem, struct nv_drm_gem_nvkms_memory, base);
                                        ^~~~~~
   /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.h: In function 'to_nv_nvkms_memory_const':
   /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.h:56:19: error: 'NULL' undeclared (first use in this function)
        if (nv_gem != NULL) {
                      ^~~~
   /tmp/selfgz30846/NVIDIA-Linux-x86_64-430.26/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.h:56:19: note: 'NULL' is defined in header '<stddef.h>'; did you forget to '#include <stddef.h>'?

마지막으로, 귀하의 Nvidia 드라이버에 어떤 지위가 있다면 어떻게 될까요?

root:Downloads# nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

dkm은 어떻습니까?

root:Downloads# dkms status
nvidia/430.26: added

그래서 여기서 무슨 일이 일어나고 있는지 잘 모르겠지만 일부 모듈 a kmap_types.h와 a 가 누락된 것 같습니다 drmP.h. 이것들은 무엇입니까? RHEL 8.6에 대한 정보는 어디서 찾을 수 있나요? 어떻게 설치하나요? 또한 드라이버가 올바르게 구축되고 설치되면 더 이상 모니터가 없어야 한다고 가정합니다 UNCLAIMED. 통찰력을 얻으려면 미리 준비하세요!

답변1

이는 이 기능이 Redhat 8.6의 kernel-devel 패키지에서 의도적으로 제거되었기 때문입니다.

문제 커널 개발에서 kmap_types.h를 제거하여 RHEL8.6에서 모듈 빌드가 실패합니다.

관련 정보