diff --git a/internal/platform-support/tegra/filter.go b/internal/platform-support/tegra/filter.go index 989906dc0..f8ebe1e3c 100644 --- a/internal/platform-support/tegra/filter.go +++ b/internal/platform-support/tegra/filter.go @@ -77,6 +77,9 @@ type matcherAsFilter struct { } type filterByMountSpecType map[csv.MountSpecType]filter +type filterByMountSpecPathsByTyper struct { + MountSpecPathsByTyper +} type pathPatterns []string type pathPattern string @@ -125,6 +128,14 @@ func (p filterByMountSpecType) Apply(input MountSpecPathsByTyper) MountSpecPaths return ms } +func (p filterByMountSpecPathsByTyper) Apply(input MountSpecPathsByTyper) MountSpecPathsByTyper { + f := make(filterByMountSpecType) + for t, paths := range p.MountSpecPathsByType() { + f[t] = &matcherAsFilter{pathPatterns(paths)} + } + return f.Apply(input) +} + // apply uses a matcher to filter an input string. // Each element in the input that matches is skipped and the remaining elements // are returned. diff --git a/internal/platform-support/tegra/mount_specs.go b/internal/platform-support/tegra/mount_specs.go index 05c766830..7ef86bf1a 100644 --- a/internal/platform-support/tegra/mount_specs.go +++ b/internal/platform-support/tegra/mount_specs.go @@ -70,13 +70,25 @@ type Transformer interface { // Transform applies the specified transforms to a set of mount specs by type. // The result is itself a set of mount specs by type. -func Transform(input MountSpecPathsByTyper, t Transformer) MountSpecPathsByTyper { +func Transform(input MountSpecPathsByTyper, t ...Transformer) MountSpecPathsByTyper { return transformMountSpecByPathsByType{ - Transformer: t, + Transformer: allTransformers(t), input: input, } } +type allTransformers []Transformer + +func (ts allTransformers) Apply(input MountSpecPathsByTyper) MountSpecPathsByTyper { + for _, t := range ts { + if t == nil { + continue + } + input = t.Apply(input) + } + return input +} + type transformMountSpecByPathsByType struct { Transformer input MountSpecPathsByTyper @@ -130,6 +142,10 @@ func WithoutDeviceNodes() Transformer { } } +func Without(m MountSpecPathsByTyper) Transformer { + return filterByMountSpecPathsByTyper{m} +} + // WithoutRegularDeviceNodes creates a transfomer which removes // regular `/dev/nvidia[0-9]+` device nodes from the source. func WithoutRegularDeviceNodes() Transformer { diff --git a/pkg/nvcdi/lib-csv.go b/pkg/nvcdi/lib-csv.go index c01115462..94543e0a3 100644 --- a/pkg/nvcdi/lib-csv.go +++ b/pkg/nvcdi/lib-csv.go @@ -93,9 +93,6 @@ func (l *csvlib) purecsvDeviceSpecGenerators(ids ...string) (DeviceSpecGenerator csvlib: l, index: 0, uuid: "", - // We set noFilterDeviceNodes to true to ensure that the /dev/nvidia[0-1] - // device nodes in the CSV files on the system are consumed as-is. - noFilterDeviceNodes: true, } return g, nil } @@ -108,11 +105,18 @@ func (l *csvlib) mixedDeviceSpecGenerators(ids ...string) (DeviceSpecGenerator, // platform-specific CSV files. type csvDeviceGenerator struct { *csvlib - index int - uuid string - noFilterDeviceNodes bool + index int + uuid string + mode csvGeneratorMode } +type csvGeneratorMode string + +const ( + iGPUGeneratorMode = csvGeneratorMode("igpu") + dGPUGeneratorMode = csvGeneratorMode("dgpu") +) + func (l *csvDeviceGenerator) GetUUID() (string, error) { return l.uuid, nil } @@ -154,31 +158,57 @@ func (l *csvDeviceGenerator) GetDeviceSpecs() ([]specs.Device, error) { // - The device node (i.e. /dev/nvidia{{ .index }}) associated with this // particular device is added to the set of device nodes to be discovered. func (l *csvDeviceGenerator) deviceNodeDiscoverer() (discover.Discover, error) { + return tegra.New( + tegra.WithLogger(l.logger), + tegra.WithDriverRoot(l.driverRoot), + tegra.WithDevRoot(l.devRoot), + tegra.WithHookCreator(l.hookCreator), + tegra.WithLdconfigPath(l.ldconfigPath), + tegra.WithLibrarySearchPaths(l.librarySearchPaths...), + tegra.WithMountSpecs(l.deviceNodeMountSpecs()), + ) +} + +func (l *csvDeviceGenerator) deviceNodeMountSpecs() tegra.MountSpecPathsByTyper { mountSpecs := tegra.Transform( tegra.MountSpecsFromCSVFiles(l.logger, l.csvFiles...), // We remove non-device nodes. tegra.OnlyDeviceNodes(), ) - if !l.noFilterDeviceNodes { - mountSpecs = tegra.Transform( + switch l.mode { + case dGPUGeneratorMode: + return tegra.Transform( mountSpecs, - // We remove the regular (nvidia[0-9]+) device nodes. + // For a dGPU we remove all regular device nodes (nvidia[0-9]+) + // from the list of device nodes taken from the CSV mount specs. + // The device nodes for the GPU are discovered for the full GPU. tegra.WithoutRegularDeviceNodes(), + // We also ignore control device nodes since these are included in + // the full GPU spec generator. + tegra.Without( + tegra.DeviceNodes( + "/dev/nvidia-modeset", + "/dev/nvidia-uvm-tools", + "/dev/nvidia-uvm", + "/dev/nvidiactl", + ), + ), ) + case iGPUGeneratorMode: + return tegra.Merge( + tegra.Transform( + mountSpecs, + // We remove the /dev/nvidia1 device node. + // TODO: This assumes that the dGPU has the index 1 and remove + // it from the set of device nodes. + tegra.Without(tegra.DeviceNodes("/dev/nvidia1")), + ), + // We add the display device from the iGPU. + tegra.DeviceNodes("/dev/nvidia2"), + ) + default: + return mountSpecs } - return tegra.New( - tegra.WithLogger(l.logger), - tegra.WithDriverRoot(l.driverRoot), - tegra.WithDevRoot(l.devRoot), - tegra.WithHookCreator(l.hookCreator), - tegra.WithLdconfigPath(l.ldconfigPath), - tegra.WithLibrarySearchPaths(l.librarySearchPaths...), - tegra.WithMountSpecs( - mountSpecs, - // We add the specific device node for this device. - tegra.DeviceNodes(fmt.Sprintf("/dev/nvidia%d", l.index)), - ), - ) } // GetCommonEdits generates a CDI specification that can be used for ANY devices @@ -272,35 +302,56 @@ func (l *mixedcsvlib) csvDeviceSpecGenerator(index int, uuid string, device nvml return nil, fmt.Errorf("is-integrated check failed for device (index=%v,uuid=%v)", index, uuid) } + if isIntegrated { + return l.iGPUDeviceSpecGenerator(index, uuid) + } + + return l.dGPUDeviceSpecGenerator(index, uuid) +} + +func (l *mixedcsvlib) dGPUDeviceSpecGenerator(index int, uuid string) (DeviceSpecGenerator, error) { + if index != 1 { + return nil, fmt.Errorf("unexpected device index for dGPU: %d", index) + } g := &csvDeviceGenerator{ csvlib: (*csvlib)(l), index: index, uuid: uuid, + mode: dGPUGeneratorMode, } - if !isIntegrated { - csvDeviceNodeDiscoverer, err := g.deviceNodeDiscoverer() - if err != nil { - return nil, fmt.Errorf("failed to create discoverer for devices nodes: %w", err) - } + csvDeviceNodeDiscoverer, err := g.deviceNodeDiscoverer() + if err != nil { + return nil, fmt.Errorf("failed to create discoverer for devices nodes: %w", err) + } + + // If this is not an integrated GPU, we also create a spec generator for + // the full GPU. + dgpu := (*nvmllib)(l).withInit(&fullGPUDeviceSpecGenerator{ + nvmllib: (*nvmllib)(l), + uuid: uuid, + index: index, + // For the CSV case, we include the control device nodes at a + // device level. + additionalDiscoverers: []discover.Discover{ + (*nvmllib)(l).controlDeviceNodeDiscoverer(), + csvDeviceNodeDiscoverer, + }, + featureFlags: l.featureFlags, + }) + return dgpu, nil +} - // If this is not an integrated GPU, we also create a spec generator for - // the full GPU. - dgpu := (*nvmllib)(l).withInit(&fullGPUDeviceSpecGenerator{ - nvmllib: (*nvmllib)(l), - uuid: uuid, - index: index, - // For the CSV case, we include the control device nodes at a - // device level. - additionalDiscoverers: []discover.Discover{ - (*nvmllib)(l).controlDeviceNodeDiscoverer(), - csvDeviceNodeDiscoverer, - }, - featureFlags: l.featureFlags, - }) - return dgpu, nil +func (l *mixedcsvlib) iGPUDeviceSpecGenerator(index int, uuid string) (DeviceSpecGenerator, error) { + if index != 0 { + return nil, fmt.Errorf("unexpected device index for iGPU: %d", index) + } + g := &csvDeviceGenerator{ + csvlib: (*csvlib)(l), + index: index, + uuid: uuid, + mode: iGPUGeneratorMode, } - return g, nil } diff --git a/pkg/nvcdi/lib-csv_test.go b/pkg/nvcdi/lib-csv_test.go index 54ac4a5cd..6810b4c3f 100644 --- a/pkg/nvcdi/lib-csv_test.go +++ b/pkg/nvcdi/lib-csv_test.go @@ -125,6 +125,56 @@ func TestDeviceSpecGenerators(t *testing.T) { }, }, }, + { + description: "thor device with dGPU", + rootfsFolder: "rootfs-thor-dgpu", + lib: &csvlib{ + // test-case specific + infolib: &infoInterfaceMock{ + HasNvmlFunc: func() (bool, string) { return true, "forced" }, + }, + nvmllib: mockIGXServer(), + }, + expectedDeviceSpecs: []specs.Device{ + { + Name: "0", + ContainerEdits: specs.ContainerEdits{ + DeviceNodes: []*specs.DeviceNode{ + {Path: "/dev/nvidia0", HostPath: "/dev/nvidia0"}, + {Path: "/dev/nvidiactl", HostPath: "/dev/nvidiactl"}, + {Path: "/dev/nvidia2", HostPath: "/dev/nvidia2"}, + }, + }, + }, + { + Name: "1", + ContainerEdits: specs.ContainerEdits{ + DeviceNodes: []*specs.DeviceNode{ + {Path: "/dev/nvidia1", HostPath: "/dev/nvidia1"}, + {Path: "/dev/nvidiactl", HostPath: "/dev/nvidiactl"}, + }, + }, + }, + }, + expectedCommonEdits: &cdi.ContainerEdits{ + ContainerEdits: &specs.ContainerEdits{ + Hooks: []*specs.Hook{ + { + HookName: "createContainer", + Path: "/usr/bin/nvidia-cdi-hook", + Args: []string{"nvidia-cdi-hook", "enable-cuda-compat", "--host-driver-version=540.3.0"}, + Env: []string{"NVIDIA_CTK_DEBUG=false"}, + }, + { + HookName: "createContainer", + Path: "/usr/bin/nvidia-cdi-hook", + Args: []string{"nvidia-cdi-hook", "update-ldcache"}, + Env: []string{"NVIDIA_CTK_DEBUG=false"}, + }, + }, + }, + }, + }, } for _, tc := range testCases { @@ -179,3 +229,69 @@ func stripRoot[T any](root string, v T) T { } return modified } + +// TODO: We should move this mock to go-nvml/mock +func mockIGXServer() nvml.Interface { + thor := &mock.Device{ + GetNameFunc: func() (string, nvml.Return) { + return "NVIDIA Thor", nvml.SUCCESS + }, + GetUUIDFunc: func() (string, nvml.Return) { + return "GPU-0", nvml.SUCCESS + }, + GetPciInfoFunc: func() (nvml.PciInfo, nvml.Return) { + return nvml.PciInfo{ + Bus: 1, + }, nvml.SUCCESS + }, + } + rtx := &mock.Device{ + GetNameFunc: func() (string, nvml.Return) { + return "RTX Pro 6000", nvml.SUCCESS + }, + GetUUIDFunc: func() (string, nvml.Return) { + return "GPU-1", nvml.SUCCESS + }, + GetPciInfoFunc: func() (nvml.PciInfo, nvml.Return) { + return nvml.PciInfo{ + Bus: 3, + }, nvml.SUCCESS + }, + GetMinorNumberFunc: func() (int, nvml.Return) { + return 1, nvml.SUCCESS + }, + } + + return &mock.Interface{ + InitFunc: func() nvml.Return { + return nvml.SUCCESS + }, + ShutdownFunc: func() nvml.Return { + return nvml.SUCCESS + }, + SystemGetDriverVersionFunc: func() (string, nvml.Return) { + return "540.3.0", nvml.SUCCESS + }, + DeviceGetCountFunc: func() (int, nvml.Return) { + return 2, nvml.SUCCESS + }, + DeviceGetHandleByIndexFunc: func(n int) (nvml.Device, nvml.Return) { + switch n { + case 0: + return thor, nvml.SUCCESS + case 1: + return rtx, nvml.SUCCESS + } + return nil, nvml.ERROR_INVALID_ARGUMENT + }, + DeviceGetHandleByUUIDFunc: func(s string) (nvml.Device, nvml.Return) { + switch s { + case "GPU-0": + return thor, nvml.SUCCESS + case "GPU-1": + return rtx, nvml.SUCCESS + } + return nil, nvml.ERROR_INVALID_ARGUMENT + }, + } +} diff --git a/testdata/lookup/rootfs-thor-dgpu/dev/nvidia0 b/testdata/lookup/rootfs-thor-dgpu/dev/nvidia0 new file mode 100644 index 000000000..e69de29bb diff --git a/testdata/lookup/rootfs-thor-dgpu/dev/nvidia1 b/testdata/lookup/rootfs-thor-dgpu/dev/nvidia1 new file mode 100644 index 000000000..e69de29bb diff --git a/testdata/lookup/rootfs-thor-dgpu/dev/nvidia2 b/testdata/lookup/rootfs-thor-dgpu/dev/nvidia2 new file mode 100644 index 000000000..e69de29bb diff --git a/testdata/lookup/rootfs-thor-dgpu/dev/nvidiactl b/testdata/lookup/rootfs-thor-dgpu/dev/nvidiactl new file mode 100644 index 000000000..e69de29bb diff --git a/testdata/lookup/rootfs-thor-dgpu/etc/nvidia-container-runtime/host-files-for-container.d/devices.csv b/testdata/lookup/rootfs-thor-dgpu/etc/nvidia-container-runtime/host-files-for-container.d/devices.csv new file mode 100644 index 000000000..4a154dd7c --- /dev/null +++ b/testdata/lookup/rootfs-thor-dgpu/etc/nvidia-container-runtime/host-files-for-container.d/devices.csv @@ -0,0 +1,41 @@ +dev, /dev/dri/card* +dev, /dev/dri/renderD* +dir, /dev/dri/by-path +dev, /dev/fb0 +dev, /dev/fb1 +dev, /dev/host1x-fence +dev, /dev/nvhost-as-gpu +dev, /dev/nvhost-ctrl-gpu +dev, /dev/nvhost-ctrl-nvdla0 +dev, /dev/nvhost-ctrl-nvdla1 +dev, /dev/nvhost-ctrl-pva0 +dev, /dev/nvhost-ctxsw-gpu +dev, /dev/nvhost-dbg-gpu +dev, /dev/nvhost-gpu +dev, /dev/nvhost-nvsched-gpu +dev, /dev/nvhost-power-gpu +dev, /dev/nvhost-prof-ctx-gpu +dev, /dev/nvhost-prof-dev-gpu +dev, /dev/nvhost-prof-gpu +dev, /dev/nvhost-sched-gpu +dev, /dev/nvhost-tsg-gpu +dev, /dev/nvgpu/igpu0/as +dev, /dev/nvgpu/igpu0/channel +dev, /dev/nvgpu/igpu0/ctrl +dev, /dev/nvgpu/igpu0/ctxsw +dev, /dev/nvgpu/igpu0/dbg +dev, /dev/nvgpu/igpu0/nvsched +dev, /dev/nvgpu/igpu0/power +dev, /dev/nvgpu/igpu0/prof +dev, /dev/nvgpu/igpu0/prof-ctx +dev, /dev/nvgpu/igpu0/prof-dev +dev, /dev/nvgpu/igpu0/sched +dev, /dev/nvgpu/igpu0/tsg +dev, /dev/nvidia-modeset +dev, /dev/nvidia0 +dev, /dev/nvidia1 +dev, /dev/nvidiactl +dev, /dev/nvmap +dev, /dev/nvsciipc +dev, /dev/v4l2-nvdec +dev, /dev/v4l2-nvenc diff --git a/testdata/lookup/rootfs-thor-dgpu/etc/nvidia-container-runtime/host-files-for-container.d/drivers.csv b/testdata/lookup/rootfs-thor-dgpu/etc/nvidia-container-runtime/host-files-for-container.d/drivers.csv new file mode 100644 index 000000000..0829d9f44 --- /dev/null +++ b/testdata/lookup/rootfs-thor-dgpu/etc/nvidia-container-runtime/host-files-for-container.d/drivers.csv @@ -0,0 +1,296 @@ +lib, /usr/lib/aarch64-linux-gnu/libv4l2.so.0 +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/color-lcms.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/desktop-shell.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/drm-backend.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/EGLWLInputEventExample +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/EGLWLMockNavigation +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/fullscreen-shell.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/gl-renderer.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/headless-backend.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/hmi-controller.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/ivi-controller.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/ivi-shell.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/LayerManagerControl +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/libilmClient.so.2.3.2 +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/libilmCommon.so.2.3.2 +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/libilmControl.so.2.3.2 +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/libilmInput.so.2.3.2 +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/libweston-13.so.0 +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/simple-weston-client +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/spring-tool +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/wayland-backend.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-calibrator +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-clickdot +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-cliptest +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-content-protection +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-debug +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-desktop-shell +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-dnd +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-eventdemo +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-flower +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-fullscreen +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-image +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-ivi-shell-user-interface +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-keyboard +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-multi-resource +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-output-mode +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-presentation-shm +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-resizor +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-scaler +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-screenshooter +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-simple-damage +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-simple-dmabuf-egl +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-simple-dmabuf-egldevice +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-simple-dmabuf-feedback +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-simple-egl +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-simple-im +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-simple-shm +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-simple-touch +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-smoke +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-stacking +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-subsurfaces +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-tablet +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-terminal +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-touch-calibrator +lib, /usr/lib/aarch64-linux-gnu/nvidia/weston-13.0/weston-transformed +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvarguscamerasrc.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvcompositor.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvdrmvideosink.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnveglglessink.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnveglstreamsrc.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvegltransform.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvipcpipeline.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvivafilter.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvjpeg.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvsiplsrc.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvtee.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvunixfd.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvv4l2camerasrc.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvvidconv.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvvideo4linux2.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvvideosink.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvvideosinks.so +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/nvgstcapture-1.0_README.txt +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/nvgstipctestapp-1.0_README.txt +lib, /usr/lib/aarch64-linux-gnu/gstreamer-1.0/nvgstplayer-1.0_README.txt +lib, /usr/lib/aarch64-linux-gnu/libgstnvegl-1.0.so.0 +lib, /usr/lib/aarch64-linux-gnu/libgstnvexifmeta.so +lib, /usr/lib/aarch64-linux-gnu/libgstnvivameta.so +lib, /usr/lib/aarch64-linux-gnu/libnvsample_cudaprocess.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libgstnvcustomhelper.so.1.0.0 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libgstnvdsseimeta.so.1.0.0 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnveglstreamproducer.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libgstnvcustomhelper.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libgstnvdsseimeta.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvdla_compiler.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvcuvid.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-encode.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-opticalflow.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvcuvid.so.1 +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-encode.so.1 +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-opticalflow.so.1 +lib, /etc/vulkansc/icd.d/nvidia_icd_vksc.json +lib, /usr/lib/aarch64-linux-gnu/nvidia/libcuda_instrumentation.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libcuda.so.1.1 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libdrm.so.2 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libGLX_nvidia.so.0 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libgnarl-24.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libgnat-24.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libjetsonpower.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvargus.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvargus_socketclient.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvargus_socketserver.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvbuf_fdmap.so.1.0.0 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvbufsurface_nvsci.so.1.0.0 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvbufsurface.so.1.0.0 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvbufsurftransform.so.1.0.0 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvcamerahal.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvcameratools.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvcamerautils.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvcam_imageencoder.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvcamlog.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvcamv4l2.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvcapture.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvcolorutil.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvcucompat.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvcudla.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvcuextend.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvdc.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvddk_2d_v2.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvddk_vic.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvdecode2eglimage.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvdla_runtime.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvdsbufferpool.so.1.0.0 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnveventlib.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvexif.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvfnet.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvfnetstoredefog.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvfnetstorehdfx.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvfusacapinterface.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvfusacap.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-allocator.so.1 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-eglcore.so.580.00 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-egl-gbm.so.1.1.0 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-egl-wayland.so.1.1.11 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-egl-xcb.so.1 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-egl-xlib.so.1 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-glcore.so.580.00 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-glsi.so.580.00 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-glvkspirv.so.580.00 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-gpucomp.so.580.00 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-kms.so.580.00 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-ml.so.1 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-nvvm70.so.580.00 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-nvvm.so.580.00 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-ptxjitcompiler.so.580.00 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-rmapi-tegra.so.580.00 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-rtcore.so.580.00 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-tls.so.580.00 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvid_mapper.so.1.0.0 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvimp.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvisppg.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvisp.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvisp_utils.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvll.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_2d.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmedia2d.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_dla.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_eglstream.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_ide_parser.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_ide_sci.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_iep_sci.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_ijpd_sci.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_ijpe_sci.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_iofa_sci.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_isp_ext.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmedialdc.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmedia.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmedia_tensor.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmm_contentpipe.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmm_jpeg.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmmlite_image.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmmlite.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmmlite_utils.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmmlite_video.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmm_parser.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmm.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvmm_utils.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvodm_imager.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvoggopus.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvomxilclient.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvomx.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvosd.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvos.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvparser.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvplayfair.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvpva_algorithms.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvpvaintf.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvpva.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvpvaumd_core.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvpvaumd_cuda.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvrm_chip.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvrm_gpu.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvrm_host1x.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvrm_mem.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvrm_stream.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvrm_surface.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvrm_sync.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvscf.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvscibuf.so.1 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvscicommon.so.1 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvscievent.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvsciipc.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvscistream.so.1 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvscisync.so.1 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvsipl_control.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvsipl_devblk_cdi.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvsipl_devblk_crypto.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvsipl_devblk_ddi.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvsipl_devblk.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvsipl_pipeline.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvsipl_query.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvsipl.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvsocsys.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvtegrahv.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvtracebuf.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvtvmr_2d.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvtvmr.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvv4l2.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvv4lconvert.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvvic.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvvideoencode_ppe.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvvideo.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libtegrawfd.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libv4l2_nvargus.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libVkLayer_json_gen.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libVkSCLayer_khronos_validation.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libvulkansc.so.1.0.10 +lib, /usr/lib/aarch64-linux-gnu/nvidia/libvulkan.so.1.4.321 +lib, /usr/lib/aarch64-linux-gnu/nvidia/nvidia_icd.json +lib, /usr/lib/aarch64-linux-gnu/tegra-egl/libEGL_nvidia.so.0 +lib, /usr/lib/aarch64-linux-gnu/tegra-egl/libGLESv1_CM_nvidia.so.1 +lib, /usr/lib/aarch64-linux-gnu/tegra-egl/libGLESv2_nvidia.so.2 +lib, /usr/lib/aarch64-linux-gnu/tegra-egl/nvidia.json +lib, /usr/lib/nvsipl_drv/libnvsipl_qry_vb1940.so +lib, /usr/lib/nvsipl_uddf/libnvuddf_eagle_library.so +sym, /etc/vulkan/icd.d/nvidia_icd.json +sym, /usr/lib/aarch64-linux-gnu/gbm/nvidia-drm_gbm.so +sym, /usr/lib/aarch64-linux-gnu/gbm/tegra_gbm.so +sym, /usr/lib/aarch64-linux-gnu/libcuda_instrumentation.so +sym, /usr/lib/aarch64-linux-gnu/libcuda.so +sym, /usr/lib/aarch64-linux-gnu/libnvcucompat.so +sym, /usr/lib/aarch64-linux-gnu/libnvcudla.so +sym, /usr/lib/aarch64-linux-gnu/libnvcuextend.so +sym, /usr/lib/aarch64-linux-gnu/libv4l2.so.0.0.999999 +sym, /usr/lib/aarch64-linux-gnu/libv4lconvert.so.0.0.999999 +sym, /usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvargus.so +sym, /usr/lib/aarch64-linux-gnu/libvulkan.so.1.4.321 +sym, /usr/lib/aarch64-linux-gnu/nvidia/libcuda_instrumentation.so.1 +sym, /usr/lib/aarch64-linux-gnu/nvidia/libcuda.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libcuda.so.1 +sym, /usr/lib/aarch64-linux-gnu/nvidia/libgnarl.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libgnat.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvbufsurface_nvsci.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvbufsurface.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvbufsurftransform.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvdsbufferpool.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-allocator.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-egl-gbm.so.1 +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-egl-wayland.so.1 +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-kms.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-nvvm70.so.4 +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-nvvm.so.4 +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvidia-ptxjitcompiler.so.1 +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvid_mapper.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvscibuf.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvscicommon.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvscistream.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libnvscisync.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libv4l2.so.0 +sym, /usr/lib/aarch64-linux-gnu/nvidia/libv4lconvert.so.0 +sym, /usr/lib/aarch64-linux-gnu/nvidia/libvulkansc.so +sym, /usr/lib/aarch64-linux-gnu/nvidia/libvulkansc.so.1 +sym, /usr/lib/aarch64-linux-gnu/nvidia/libvulkan.so.1 +sym, /usr/lib/aarch64-linux-gnu/tegra +sym, /usr/share/glvnd/egl_vendor.d/10_nvidia.json +lib, /lib/firmware/tegra23x/nvhost_nvdec050_desc_prod.bin +lib, /usr/bin/nvidia-cuda-mps-control +lib, /usr/bin/nvidia-cuda-mps-server +lib, /usr/sbin/nvidia-smi +lib, /usr/share/doc/package_name/LICENSE.nvidia-cuda-mps-control +lib, /usr/share/doc/package_name/LICENSE.nvidia-cuda-mps-server +lib, /usr/share/doc/package_name/LICENSE.nvidia-smi +lib, /var/nvidia/nvcam/settings/ar0234.nito +lib, /var/nvidia/nvcam/settings/e3333.nito +lib, /var/nvidia/nvcam/settings/imx185.nito +lib, /var/nvidia/nvcam/settings/imx219.nito +lib, /var/nvidia/nvcam/settings/imx274_li.nito +lib, /var/nvidia/nvcam/settings/imx477.nito +lib, /var/nvidia/nvcam/settings/sipl/vb1940.nito +lib, /usr/lib/aarch64-linux-gnu/nvidia/libnvcuvidv4l2.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libv4l2_nvcuvidvideocodec.so +sym, /usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvcuvidvideocodec.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libtegrav4l2.so +lib, /usr/lib/aarch64-linux-gnu/nvidia/libv4l2_nvvideocodec.so +sym, /usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvvideocodec.so