1

I have read here that linux supports a large number of device drivers and by extension, it also supports a large number of devices connected via the USB port. Excerpt from that site:

Linux today supports more hardware devices than any other operating system in the history of the world. It does this using a development model significantly different from the familiar Windows device driver model.

Is there a list of all the different devices which are supported by linux? and/or list of devices which are connected via USB and supported by linux`?

This is different from just finding out which device drivers are currently supported in a given distribution by using the commands lsmod, lspci and dmesg | grep <string> as the distribution providers only support few common drivers out of all the drivers supported by linux.

  • @MarkPlotnick, that is not what I meant. I meant, if a certain device is not supported by the kernel, should I then look for driver modules from the manufacturer of the device, or should I consider writing my own device driver? So, if there was a list, then it would help a developer know whether he has to write his own driver or if the kernel itself provided it – user2555595 Jul 16 '14 at 14:50
3

The lspci and lsusb commands just enumerates the devices connected to particular buses. They read id from the bus and use special file to map this ids to strings.

The lsmod showns just list of linux kernel modules. Linux kernel module is part of linux kernel code which is loaded dynamically - this modules are not necessary drivers, it may be just any part of the kernel code. This mechanism is used to save memory and boot time and do not load all code on boot, to make kernel development easier (you can unload/modify/load parts of the kernel). As the device driver is one of good applications of this dynamic loading - it is used in most drivers. The non-driver example is iptables (the network filtering mechanism) there only parts are loaded which are actually requested by user.

The dmesg is just a kernel text log - usually developer white something there in case of initialization, but this is entirely voluntary - so what you find there and which format is completely random.

Complete lists of the supported hardware is hard thing to get. Kernel consists of very different parts made by different people and there is a lot of similar devices with different labels.

Usually you can try to find if your device is supported on dedicated pages:

This is mainly because most things require not just kernel driver by also kind of userspace layer and there is kind of 'project' which does both parts with main interface in userspace.

Most advanced list of the supported may be extracted from kernel code - there is usually list of pci/usb ids supported for each particular drivers - there is a way to extract it: http://www.cyberciti.biz/tips/linux-find-supported-pci-hardware-drivers.html. But if you have kernel module which has an ID in the list doesn't mean that device is fully supported or that you have userspace tools which allow you to use this module, or that this userspace tools exist in your particular distribution.

Sometimes distribution vendors provide list of supported devices, but this is usually some small subset.

For debian there is also list of pciid->kernel module mappings: https://wiki.debian.org/DeviceDatabase/PCI.

Regarding usb devices, many things like cameras have kind of userspace drivers via libusb - like cameras or so no. In such case you have no need in kernel driver at all.

Also, don't forget that linux runs on near 20 architectures (imagine how many drivers are in billions of different android smart-phones), each with own huge set of drivers - and you'll see that total amount will easily beat every other knows OS.

1

I think the answer to this question is nebulous! If you are looking for a list of devices that are supported by the Linux kernel i.e. specific pieces of hardware try The H-Node search

Device drivers are "Windows speak" really. The kernel's device support is either built in, or added dynamically be kernel modules, which is the nearest thing to a device driver. The kernel probably more accurately supports certain chipsets that are found in devices themselves.

Many devices can actually use the same chipset underneath, and certain devices, marked with the same manufacturers product ID code, can utilize totally different chipsets! (As I have found to my annoyance!!)

0

What about

find /lib/modules/`uname -r` -name "*usb*"
  • I meant a list of all device drivers supported by the kernel, not just the ones enabled by the distro – user2555595 Jul 16 '14 at 14:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.