For a given device, sometimes one linux distro perfectly supports a hardware component. Then if I switch distros, the same component no longer functions at all, or is very buggy.
How do I find out what the difference is?
How to fix shit that doesn’t work:
Use lspci/lsusb and lsmod to show you what devices are attached to the computer and what kernel modules are loaded presently.
Use the modinfo command to show information about kernel modules.
Use ls /lib/modules/kernel_version/drivers to see what modules are available.
Use your distributions package manager to install more optional modules.
How to figure out if something will work:
Use lspci/lsusb, look for those components and their kernel modules, see if they’re available in the distribution you’re investigating.
To give an example: I use an hp stream 11 for some stuff. It’s a little laptop with a relatively obscure Broadcom wireless card. Rhel removes support for old and unpopular hardware pretty frequently and doesn’t support that network card. To get it working on that little pc I ended up building the module from source (available in the el9 third party repositories) and doing Broadcom-wl manually every time the kernel updates. If I didn’t want to keep my wits about me, I’d make a script to run when uhh yum? upgrades the kernel to run a reinstall of the driver.
Three things:
-
The kernel version they got. I have had hardware that didn’t work in one distro but it did on another, but their difference really was that one had kernel 5.11 and then other one 6.5. Big difference in terms of support.
-
Might not be a matter of driver, but a matter of firmware. If a distro allows the download/usage of third party non-free firmware code or not, a lot more hardware is supported. Not all distros do that.
-
If it’s ubuntu or ubuntu-based. Ubuntu has incorporated a lot of additional drivers/firmwares/support in their kernel versions than most others.
-
A lot of the answers here are mentioning the kernel. The version of it and what not. Look, the distro compiles the kernel for you, they are not gonna support literally everything but they have to make a choice. That choice is stored in the “kernel config”. If you have one distro working and another one not, compare the two configs. It’s gonna take a lot of work to parse through, there are many config settings. But where do you start to look? Most distros have their config published in two places: /boot/config-<kernel version>, for any installed kernel, or /proc/config.gz (
cat /proc/config.gz | gunzip
to read), for your running kernel. Get the two files from the distros, compare, find what seems relevant, make the changes (I only know how to do this in gentoo), and test.But where do you start to look? Most distros have their config published in two places: /boot/config-<kernel version>, for any installed kernel, or /proc/config.gz (cat /proc/config.gz | gunzip to read), for your running kernel.
Thanks for understanding the question and providing a concrete answer of a place to look! I will do this. :)
I feel like 99% of the time it’s just “does this distro have drivers for this hardware”. If yes it works, if no it doesn’t.
But on Linux aren’t most drivers part of the kernel?
I think maybe if there are license issues the distros have different policies? You might need to do some kind of extra step to include certain drivers.
Depends on the hardware. You have to download NVIDIA drivers from your package manager.
Yes, and different distros use different kernel versions which they’ve compiled differently.
That’s what I’m thinking!
I am asking a really basic question here. How do I find out about the drivers in the distro?
I mean it depends on the hardware. (if we knew what hardware youre talking about it would make this much easier)
deleted by creator
is there a way to find out for a given component? where to look?
filesystem, release notes, repositories? terminal tool will give me some clues?
deleted by creator
Could be varoius reasons. Some common ones:
- distros can have different kernel parameters
- unloaded kernel modules
- different kernel parameters
- older kernel/packages
- missing packages
You can narrow down which distros work and which hardware support is missing. Also look at archwiki for that specific piece of hardware. You can find a lot of useful information even if you don’t use Arch.
-
distros can have different kernel parameters
-
unloaded kernel modules
-
different kernel parameters
-
older kernel/packages
-
missing packages
how do I find out about these?
Are they specific to my system? Some kind of decision the installer makes? So I would investigate locally on the device?
Or will it be a general distro thing? Am I looking on their website to find out?
No, look up what drivers/modules/packages your hardware need and load them/upgrade/install on the buggy distro
-
I find Arch based distros have pretty solid hardware coverage. Lots of older hardware support baked in, plus newer kernels ( newer drivers ), and up-to-date device firmware.
The older the kernel, the less hardware is supported ( generally ). That is going to be a big reason for the disparity between distros. But device firmware makes a difference, especially for distros that do not support non-free binaries. Debian has gotten a lot better since they changed that policy for example.
The more desktop centric a distro is, the more likely they are to bundle a broad selection of hardware drivers.
Kernel