Firmware refers to embedded software which controls electronic devices. Well-defined boundaries between firmware and software do not exist, as both terms cover some of the same code. Typically, the term firmware deals with low-level operations in a device, without which the device would be completely non-functional (read more on Wikipedia).
Many devices require firmware to operate. Historically, firmware would be built into the device's ROM or Flash memory, but more and more often, a firmware image has to be loaded into the device RAM by a device driver during device initialisation.
Firmware during the installation
In some cases the installer detects the need for non-free firmware and prompts the user to make the firmware available to the installer to complete the installation. This can happen, for example, with wireless network cards which often require non-free firmware to function (see ipw2200 for an example).
Installation images with firmware
An easy method is to use an installer image that includes all non-free firmware packages directly. See https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/
Firmware on removable media
You can also download the firmware archive for your platform and unpack it into a directory named firmware in the root of a removable storage device (USB/CD drive). You can find firmware downloads for your Debian version at https://cdimage.debian.org/cdimage/unofficial/non-free/firmware/. When the installer starts, it will automatically find the firmware files in the directory on the removable storage and, if needed, install the required firmware.
In some cases, firmware supplied on removable media may not be detected automatically (e.g. 740503). In these situations, drop to the console (Ctrl+alt+F2) and manually mount(8) your removable storage on a temporary directory (e.g. /media).
Firmware on removable media and preseeding
It is also possible to bypass the installer's searching and installation process by preseeding and providing the firmware files directly to the kernel:
The following addition is made to the installer's kernel command line. It is a single command but has been broken here for readability. Press TAB when the installation choice is highlighted to make the command line visible. A variation on this technique is presented elsewhere.
Installation+Archive+USBStick preseed/early_command="modprobe vfat ; sleep 2 ; mount /dev/disk/by-label/FIRMWARE /media ; cp -a /media/firmware /lib"
NetbootFirmware - Firmware for Netbooting.
Once the network is configured, Debian-Installer can fetch firmware from Debian repositories.
Firmware after installation
The isenkram and other tools can prompt to install the appropriate firmware and other hardware support packages when the hardware is plugged in. This mostly relies on packages declaring via AppStream what hardware they support. This might not work for all firmware, so read on for another solution.
If you still see missing firmware console messages when the initramfs is updated (for example whenever a kernel update is applied):
W: Possible missing firmware /lib/firmware/i915/skl_guc_62.0.0.bin for module i915
$ apt-file search skl_guc_62.0.0.bin firmware-misc-nonfree: /lib/firmware/i915/skl_guc_62.0.0.bin $ sudo apt install firmware-misc-nonfree $ sudo update-initramfs -c -k all
Firmware missing from Debian
If you the missing firmware is not available in Debian or if you still see missing firmware console messages even when you have the right firmware-* package installed, you can download and install the firmware from the linux-firmware repository, for eg for i915 firmware:
mkdir firmware cd firmware wget -r -nd -e robots=no -A '*.bin' --accept-regex '/plain/' https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915/ sudo mv *.bin /lib/firmware/i915/ sudo update-initramfs -c -k all
Location of firmware files
Debian 8 "Jessie" and newer
Debian 7 "Wheezy", Debian 6.0 "Squeeze"
Firmware is sourced from the following places (see udev's /lib/udev/hotplug.functions and /lib/udev/firmware.agent)
/lib/firmware/$(uname -r) - Firmware provided by a package, specific for a kernel.
/lib/firmware/ - Firmware provided by a package, valid for all kernels.
/usr/local/lib/firmware - Location for manually installed firmware.
/usr/lib/hotplug/firmware - Firmware provided by a package, valid for all kernels
List of firmware in Debian
To find which package provides a given firmware file, you can use this search page:
Firmware/List lists firmware distributed by Debian.
Found on most modern x86 PCs and servers, along with some ARM boards - (wikipedia)
Found on older "IBM-PC" machines, generally most regular PCs and servers that were manufactured before 2011 - (wikipedia)
Found on the Lemote Yeeloong and embedded devices
Firmware can be updated using various methods.