NVIDIA 750 TI unsupported on ZOKOR

Hi all,

I previously made a post earlier this year asking about packaging nvidia drivers so that I can prevent breaking changes to driver support being propagated to my system from nixpkgs. That discussion revealed to me that I may have insufficient knowledge around how graphics drivers interface with the operating system that (amongst other things) is what is leading me to have issues.

I recently updated my OS to ZOKOR and have run into the following dmesg error, which seems to correlate with my original issue that someone much wiser than I was kind enough to provide the fix for (it was a skill issue).

[    8.647036] NVRM: The NVIDIA NVIDIA GeForce GTX 750 Ti GPU installed in this system is
               NVRM:  supported through the NVIDIA 580.xx Legacy drivers. Please
               NVRM:  visit http://www.nvidia.com/object/unix.html for more
               NVRM:  information.  The 595.80 NVIDIA driver will ignore
               NVRM:  this GPU.  Continuing probe...
[    8.665405] NVRM: No NVIDIA GPU found.
[    8.666565] nvidia-nvlink: Unregistered Nvlink Core, major device number 240

I am still equally clueless on how to troubleshoot this issue and would greatly appreciate any help! This is not me asking for free tech support (although that is always appreciated), instead if someone wiser than me can see my skill gap clearly then I will be very grateful to be pointed towards the right resources to educate myself on the topic.

I am definitely running an old graphics card as you can see, but with current market conditions I want to make absolutely sure that this is an NVIDIA/legacy support issue and not a skill issue before running away screaming and replacing it with a glorious open source AMD card. Thanks to the glory of NixOS this is not causing me any immediate problems, as I am just rolling back, but I do ofc want to update my system eventually.

Thanks :slight_smile:

So, from referencing the previous thread I linked, I think I may understand the fundamental issue. The NVIDIA drivers are closed source and out of the linux kernel source tree, so each permutation of drivers for legacy version x linux kernel version need to be compiled together to be compatible. Because NVIDIA drivers are closed source, NVIDIA needs to have compiled this version of the driver and released the object file. If this has not been done, then there is nothing you can do on the closed source side, and you have to rely on the open source versions working.

Your GPU is still supported by the most-recent stable 580 drivers.

I believe the beta drivers have dropped support; whenever the 590 drivers become the new stable you’ll have to switch to the as-yet-nonexistent legacy580 driver, but for now you should be able to use the nvidia module out of the box.

I checked nixpkgs to see if I could find a compatible version and I found packages in the format linuxKernel.packages.linux_x_xx.nvidia_x11_legacyxxx. My reading into this is that I am effectively locked into using earlier kernel versions if I want compatibility, which isn’t ideal. There does not appear to be a theoretical legacy580 driver in nixpkgs at this point in time, and now the error I am getting is solidly suggesting that the driver version actually is the issue this time.

As far as I can tell the solution currently is either to use an earlier linux kernel version, which I don’t really want to do with the tales I hear of CVEs, or replace my graphics card with something that isn’t built by NVIDIA.

You misunderstand a little.

The nvidia drivers are no longer proprietary, but unlike most other hardware drivers they are still not part of the Linux kernel.

Yeah, the Linux kernel is largely just a collection of drivers for all hardware under the sun, but NVIDIA is one of the few companies who haven’t added their drivers (yet).

Since the Linux kernel is a massive pile of drivers, 99% of which you will not need, the kernel has a feature to load additional “kernel modules” while it’s running. This lets you detect whether certain hardware is present before loading code you might not need.

This system is also often used (arguably abused) by hardware vendors to load drivers for their hardware without having to submit these drivers to the kernel (and often with the goal to keep it closed source, like NVIDIA used to, though this brings you into legal grey areas which seemingly have finally motivated NVIDIA to stop doing that).


Now, in practice this means that a given version of the nvidia driver needs to be compiled against a given version of the Linux source tree.

This does in theory mean that, since NVIDIA is no longer maintaining drivers for your GPU, you will never be able to upgrade past the LTS kernel version that was current when the 580 driver was released.

HOWEVER, for the most part, updating drivers to newer kernel versions isn’t that difficult. You just need to patch out bits of the code. Especially now that the NVIDIA driver is open source, this is quite doable (but even past proprietary drivers have been kept alive by the community).

The nixpkgs NVIDIA packages come with these patches included. So all you need to do to use an older NVIDIA driver for your GPU is something like this:

{
  hardware.nvidia = {
    branch = "legacy_580";
    open = true;
  };
}

Now, this might not work in perpetuity. You are relying on random internet strangers keeping this driver alive. Additionally, things like better wayland or HDR support will never be added, and security vulnerabilities will largely remain unpatched, which is pretty bad for a GPU - every website you open can speak to it directly, including ads running on it. You probably should buy a new GPU soonish.

I will note that if you were using intel or AMD you would not have to do any of this. Their drivers are part of the kernel, and hence have the same stability guarantees the kernel does.

If you buy intel or AMD in the future, you will practically not have to worry about your hardware becoming unsupported, at least until the kernel itself stops being a thing.

Thanks once again for the help! That definitely clarifies things a lot.

As a solution I’ve pinned the linux kernel to the previous version for this specific machine until I get a new graphics card.

{
  # pin the kernel version (necessary for deprecated nvidia drivers)
  boot.kernelPackages = pkgs.linuxPackages_6_18;
}