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:
- Wi-Fi chip drivers are not built.
CONFIG_IWLWIFI,ATH9K,ATH10K,ATH11K,RTW88,RTW89,MT76andBRCMFMACare not set, so a wireless card has no driver whatever the firmware package contains. The installer does not set up wireless either, see live medium. - Bluetooth is not set.
- AMD and Nouveau graphics drivers are not built. The graphics drivers are the EFI framebuffer, simple DRM, virtio-gpu, Bochs and i915. i915 can load firmware for the display engine and the GPU microcontrollers.
- The Realtek Ethernet driver
r8169loads firmware for some chips.
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.