I’m being confused by the use of firmware in the context of Linux.
My understanding of firmware & driver is that firmware is the code that runs on the bare metal of a device such as a Bluetooth IC, or keyboard controller, or video card, or a single-purpose micro-controller. The firmware exposes an interface for the OS to use its services.
The driver, in comparison, is the software that the kernel uses to communicate with previously mentioned interfaces provided by the firmware. Thus, a video driver, a keyboard driver, a bluetooth radio driver.
So why is it that I keep reading about Linux firmware files having to be installed (e.g. here). Do these get uploaded into the hardware? Are these files used by the kernel? What is the meaning of firmware in this context?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
In the Linux kernel context, firmware is software which runs on another processor in the system, e.g. a wireless controller, a GPU, a SCSI controller… This software used to be stored in ROM (of various types) attached to the relevant controller, but to reduce costs and make upgrades simpler, controllers now tend to rely on the host operating system to load their firmware for them.
So firmware files aren’t used by the kernel, they’re loaded by the kernel onto other pieces of hardware. This is also what makes it vaguely acceptable to have software without source code in FLOSS systems: the argument goes that it’s not running on the main CPU but on another device.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0