## 3.4.3. Hardware Compatibility 

Many products work without trouble on Linux. Moreover, hardware support in Linux is improving daily. However, Linux still does not run as many different types of hardware as some operating sys- tems. 

Drivers in Linux in most cases are not written for a certain “product” or “brand” from a specific man- ufacturer, but for a certain hardware/chipset. Many seemingly different products/brands are based on the same hardware design; it is not uncommon that chip manufacturers provide so-called “reference designs” for products based on their chips which are then used by several different device manufac- turers and sold under lots of different product or brand names. 

This has advantages and disadvantages. An advantage is that a driver for one chipset works with lots of different products from different manufacturers, as long as their product is based on the same chipset. 

The disadvantage is that it is not always easy to see which actual chipset is used in a certain prod- uct/brand. Unfortunately sometimes device manufacturers change the hardware base of their product without changing the product name or at least the product version number, so that when having two items of the same brand/product name bought at different times, they can sometimes be based on two different chipsets and therefore use two different drivers or there might be no driver at all for one of them. 

For USB and PCI/PCI-Express/ExpressCard devices, a good way to find out on which chipset they are based is to look at their device IDs. All USB/PCI/PCI-Express/ExpressCard devices have so called “vendor” and “product” IDs, and the combination of these two is usually the same for any product based on the same chipset. 

On Linux systems, the devices and their IDs can be read using: 

• lsusb command for USB devices 

• lspci -nn command for PCI-Express/PCIe devices 

The vendor and product IDs are usually given in the form of two hexadecimal numbers, seperated by a colon, such as “1d6b:0001”. 

An example for the output of lsusb : 

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 

Whereby 1d6b is the vendor ID and 0002 is the product ID. 

An example for the output of lspci -nn for an Ethernet card: 

03:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller [10ec:8168] (rev 06) . 

The IDs are given inside the rightmost square brackets, i.e. here 10ec is the vendor- and 8168 is the product ID. 

As another example, a graphics card could give the following output: 

04:00.0 VGA compatible controller [0300]: Advanced Micro Devices [AMD] nee ATI RV710 [Radeon HD 4350] [1002:954f] . 

On Windows systems, the IDs for a device can be found in the Windows device manager on the tab “details”, where the vendor ID is prefixed with VEN_ and the product ID is prefixed with DEV_. On Windows 7 systems, you have to select the property “Hardware IDs” in the device manager’s details tab to actually see the IDs, as they are not displayed by default. 

Searching on the internet with the vendor/product ID, “Linux” and “driver” as the search terms often results in information regarding the driver support status for a certain chipset. If a search for the vendor/product ID does not yield usable results, a search for the chip code names, which are also often 

