Linux – For an external USB device, why does Linux require a firmware in addition to the driver

driversfirmwarelinuxusb

A few days ago I was trying to install a USB WiFi adapter in old version of linux. I installed it successfully.

But the procedure I followed required me to install not only driver, but also the firmware of the chip used in that adapter.

I searched about firmware and came to know that firmware is software that runs on hardware. But isn't the firmware preloaded in the adapter like the firmware in routers? Why if it isn't preloaded in chip?

Best Answer

From the Ubuntu Wiki:

Many devices have two essential software pieces that make them function in your operating system. The first is a working driver, which is the software that lets your system talk to the hardware. The second is firmware, which is usually a small piece of code that is uploaded directly to the device for it to function correctly. You can think of the firmware as a way of programming the hardware inside the device. In fact, in almost all cases firmware is treated like hardware in that it's a black box; there's no accompanying source code that is freely distributed with it.

and

The firmware is usually maintained by the company that develops the hardware device. In Windows land, firmware is usually a part of the driver you install. It's often not seen by the user. In Linux, firmware may be distributed from a number of sources. Some firmware comes from the Linux kernel sources. Others that have redistribution licenses come from upstream. Some firmware unfortunately do not have licenses allowing free redistribution.

Firmware has an important feature in common with BIOS software: it cannot update itself. It is completely closed source (as opposed to open source), can be re-installed via some procedure, but it can neither be inspected nor corrected by downstream users.

Related Question