How do hardware vendors add their drivers to the Linux kernel ?

I run Fedora 32 in my HP Omen laptop.
I have a question which is kind of general to Linux.
Recently, I purchased an Edifier bluetooth headset (model W800BT).

I couldn’t find the drivers for both Windows and Linux in Edifier’s website.
But, in Windows 10, it was easily setup without installing any drivers. In Fedora 32, it was automatically detected. But, getting it to work needed some playing around. It made me wonder how Fedora/Linux Kernel managed to detect this particular piece of hardware.

So, this hardware’s manufacturer (from China) wrote the code for this driver (module) in C language and sent it to the Linux development team. And the Linux’s development team, which is spread across the world checked its code and added it to Linux Kernel. Fedora team took this vanilla kernel which has thousands of modules (drivers) in it and adds some GNU software and create the Fedora distribution. Are my assumptions correct ?

Mostly.

  • The actual driver code is not necessarily written by the people at the manufacturer, some things get reverse-engineered by the kernel devs or other interested users as well. Some manufacturers are very good at working together with the Linux folks and do provide drivers, others, not so much.
  • oftentimes, no specific driver for a particular piece of hardware is needed, only one for the chipset the hardware is built from - that means that a lot of code gets reused, a lot. You see this often with network stuff, there might be a bunch of different vendors building different network cards, but if they all use the same e.g. Realtek chip, then one driver can deal with all of them
  • some things are simply standardised and don’t need specific drivers as all. I suspect that your bluetooth headset falls into that category: Bluetooth communication for audio is standardised, so the system only needs to know that one protocol. This applies to most peripherals - headsets, mice, keyboard, tablets, webcams, scanners (printers being a notable exception)
4 Likes

So you was able to make them work. Could you describe shortly what you had needed to do to make them work?

Thank you lcts.

oftentimes, no specific driver for a particular piece of hardware is needed, only one for the chipset the hardware is built from - that means that a lot of code gets reused, a lot. You see this often with network stuff, there might be a bunch of different vendors building different network cards, but if they all use the same e.g. Realtek chip, then one driver can deal with all of them

But, the model number of the hardware is correctly displayed too. In my case W800BT.

1 Like

Pairing happened without any issues.

While connected to laptop speakers or external speakers (in my case), to switch to Bluetooth headset:

In settings> Bluetooth
Click on the ‘Connection’ button shown below. Sometimes, I have to click on the button 3 to 4 times to turn it blue.
BT1

If the above step doesn’t work
In settings > Sound > choose the drop down menu of ‘Output device’ to the following

BlueToothSettings

2 Likes

Yes, the headset self-identifies as such, the underlying hardware communication/driver can still be identical (in your case, a standard Bluetooth-based audio interface). Think about graphics cards, you can have an Asus, or a Gigabyte, or an EVGA or whatever card, the driver is still the one for the underlying NVidia (or ATI) chip.

1 Like

Bluetooth works like a charm in Linux. I connect to my hearing aids every day (with any flavor of Linux, since 5 years already :upside_down_face:), same to the Altec Lansing speakers. And sometimes they reconnect automagicaly too.
Peter

2 Likes