Firmware

Firmware here means the binary files that drivers load into devices: network chips, graphics engines, sound codecs. The kernel looks for them under /lib/firmware. UraniumOS keeps them out of the base system. They are in the package linux-firmware, which is installed only on request.

Install it

The installer asks Install firmware for your hardware? This needs the network. and the default is no. In a config file for uranium-install --config the variable is FIRMWARE=yes or FIRMWARE=no. With yes the installer adds linux-firmware to the packages it installs. To install it later:

# rod +s
# rod +i linux-firmware

That takes a frame first, like any rod operation, and it needs the network. rod +r linux-firmware removes it. The files end up in /rod/profile/lib/firmware, and /lib links to /rod/profile/lib, which is where the kernel looks. Reboot afterwards.

What the kernel can use it for

The kernel configuration decides which devices have a driver, see kernel. In 0.1.0:

A card that is missing from this list only works if it's driver is in the default configuration of the kernel version and no option of the fragment turned it off. Check with grep CONFIG_NAME /rod/profile/boot/config.

When the firmware is loaded

Every driver is built in, so each one starts during the kernel boot, before the root filesystem is mounted. At that point the kernel can only read files in the initramfs. The initramfs of UraniumOS has no firmware and CONFIG_EXTRA_FIRMWARE is empty, so a driver that asks for its file that early finds nothing. Whether it asks again after the root is mounted depends on the driver. FW_LOADER_USER_HELPER is off, so nothing in user space can supply a file later.

CPU microcode is a seperate case. CONFIG_MICROCODE is on, MICROCODE_LATE_LOADING is off and the initramfs holds no microcode archive, so microcode updates are not applied.

Find a missing file

A driver that does not find its file says so in the kernel log:

# dmesg | grep -i firmware

dmesg is for root, because kernel.dmesg_restrict is set. The message names the file. Search the package for it:

$ ls /rod/profile/lib/firmware | grep -i NAME

Trade-off

Firmware files are binary blobs from the device vendors, and the kernel loads them without being able to inspect them. Leaving the package out of the base system keeps them off the disk unless you choose it.

See also hardware, kernel and troubleshooting.