Repository navigation
Expand file tree
/
Copy pathfirmware.html
More file actions
46 lines (46 loc) · 7.69 KB
/
Copy pathfirmware.html
File metadata and controls
46 lines (46 loc) · 7.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Firmware - UraniumOS</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header><div class="in"><nav class="l"><a href="index.html">Home</a><a href="download.html">Download</a><a href="docs.html" aria-current="page">Documentation</a><a href="rod.html">Packages</a><a href="news.html">News</a><a href="about.html">About</a></nav><nav class="r"><a href="features.html">Features</a><a href="media.html">Install</a><a href="security.html">Security</a><a href="hardware.html">Hardware</a></nav></div></header>
<main class="in docs">
<aside><div class="sbhead"><a class="sbh" href="index.html">⌂ UraniumOS</a><svg aria-hidden="true" viewBox="-50 -50 100 100"><circle r="48" fill="#f2d21b"/><circle r="6.5" fill="#1b1b19"/><path fill="#1b1b19" d="M6.50 -11.26 A13 13 0 0 0 -6.50 -11.26 L-20.00 -34.64 A40 40 0 0 1 20.00 -34.64 Z M-13.00 -0.00 A13 13 0 0 0 -6.50 11.26 L-20.00 34.64 A40 40 0 0 1 -40.00 -0.00 Z M6.50 11.26 A13 13 0 0 0 13.00 0.00 L40.00 0.00 A40 40 0 0 1 20.00 34.64 Z"/></svg><span class="ver">0.1.1</span><input type="search" placeholder="Search docs" aria-label="Search docs"></div><h4>Read first</h4><ul><li><a href="differences.html">Differences and known failures</a></li></ul><h4>1 Installation</h4><ul><li><a href="download.html">1.1 Download</a></li><li><a href="media.html">1.2 Live medium</a></li><li><a href="partitioning.html">1.3 Partitioning notes</a></li><li><a href="manual-install.html">1.4 Manual install</a></li><li><a href="first-steps.html">1.5 First steps</a></li></ul><h4>2 Configuration</h4><ul><li><a href="users.html">2.1 Users and groups</a></li><li><a href="keyboard.html">2.2 Keyboard</a></li><li><a href="time.html">2.3 Date and time</a></li><li><a href="services.html">2.4 Services</a></li><li><a href="cron.html">2.5 Cron</a></li><li><a href="network.html">2.6 Network</a></li><li><a href="ssh.html">2.7 SSH</a></li><li><a href="blastdoor.html">2.8 Firewall</a></li><li><a href="desktop.html">2.9 Desktop</a></li><li><a href="firmware.html" aria-current="page">2.10 Firmware</a></li><li><a href="boot.html">2.11 Boot</a></li><li><a href="kernel.html">2.12 Kernel</a></li><li><a href="storage.html">2.13 Storage</a></li><li><a href="security.html">2.14 Security</a></li><li><a href="geiger.html">2.15 Health report</a></li></ul><h4>3 Packages</h4><ul><li><a href="rod.html">3.1 rod</a></li><li><a href="cheatsheet.html">3.2 rod cheat sheet</a></li><li><a href="not-in-rod.html">3.3 Package not in rod</a></li><li><a href="recipes.html">3.4 Recipes</a></li><li><a href="silo.html">3.5 Containers</a></li><li><a href="hazmat.html">3.6 Sandboxes</a></li></ul><h4>4 Snapshots</h4><ul><li><a href="scram.html">4.1 scram</a></li><li><a href="backups.html">4.2 Backups</a></li></ul><h4>5 Reference</h4><ul><li><a href="system.html">5.1 System and files</a></li><li><a href="troubleshooting.html">5.2 Troubleshooting</a></li><li><a href="hardware.html">5.3 Hardware status</a></li><li><a href="faq.html">5.4 FAQ</a></li></ul><h4>6 Project</h4><ul><li><a href="developers.html">6.1 Developers</a></li><li><a href="contributing.html">6.2 Contributing</a></li><li><a href="about.html">6.3 About</a></li><li><a href="features.html">6.4 Features</a></li><li><a href="news.html">6.5 News</a></li></ul></aside><article><div class="band"><h1>Firmware</h1></div>
<p>Firmware here means the binary files that drivers load into devices: network chips, graphics engines, sound codecs. The kernel looks for them under <code>/lib/firmware</code>. UraniumOS keeps them out of the base system. They are in the package <code>linux-firmware</code>, which is installed only on request.</p>
<h2>Install it</h2>
<p>The installer asks whether to install firmware for your hardware, which needs the network, and the default is no. In a config file for <code>uranium-install --config</code> the variable is <code>FIRMWARE=yes</code> or <code>FIRMWARE=no</code>. With yes the installer adds <code>linux-firmware</code> to the packages it installs. To install it later:</p>
<pre><code># rod +s
# rod +i linux-firmware</code></pre>
<p>That takes a frame first, like any <a href="rod.html">rod</a> operation, and it needs the network. <code>rod +r linux-firmware</code> removes it. The files end up in <code>/rod/profile/lib/firmware</code>, and <code>/lib</code> links to <code>/rod/profile/lib</code>, which is where the kernel looks. Reboot afterwards.</p>
<h2>What the kernel can use it for</h2>
<p>The kernel configuration decides which devices have a driver, see <a href="kernel.html">kernel</a>. In 0.1.0:</p>
<ul>
<li>Wi-Fi chip drivers are not built. <code>CONFIG_IWLWIFI</code>, <code>ATH9K</code>, <code>ATH10K</code>, <code>ATH11K</code>, <code>RTW88</code>, <code>RTW89</code>, <code>MT76</code> and <code>BRCMFMAC</code> are not set, so a wireless card has no driver whatever the firmware package contains. The installer does not set up wireless either, see <a href="media.html">live medium</a>.</li>
<li>Bluetooth is not set.</li>
<li>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.</li>
<li>The Realtek Ethernet driver <code>r8169</code> loads firmware for some chips.</li>
</ul>
<p>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 <code>grep CONFIG_NAME /rod/profile/boot/config</code>.</p>
<h2>When the firmware is loaded</h2>
<p>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 <code>CONFIG_EXTRA_FIRMWARE</code> 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. <code>FW_LOADER_USER_HELPER</code> is off, so nothing in user space can supply a file later.</p>
<p>CPU microcode is a seperate case. <code>CONFIG_MICROCODE</code> is on, <code>MICROCODE_LATE_LOADING</code> is off and the initramfs holds no microcode archive, so microcode updates are not applied.</p>
<h2>Find a missing file</h2>
<p>A driver that does not find its file says so in the kernel log:</p>
<pre><code># dmesg | grep -i firmware</code></pre>
<p><code>dmesg</code> is for root, because <code>kernel.dmesg_restrict</code> is set. The message names the file. Search the package for it:</p>
<pre><code>$ ls /rod/profile/lib/firmware | grep -i NAME</code></pre>
<h2>Trade-off</h2>
<p>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.</p>
<p>See also <a href="hardware.html">hardware</a>, <a href="kernel.html">kernel</a> and <a href="troubleshooting.html">troubleshooting</a>.</p>
<div class="pager"><a href="desktop.html">← Desktop</a><a href="boot.html">Boot →</a></div></article>
</main>
<footer><div class="in"><p>Public domain, CC0 1.0</p><p><a href="https://github.com/uranium-os">GitHub</a> <a href="https://texivi.github.io">Blog</a></p></div></footer>
<script>document.querySelectorAll("pre:not(.term):not(.portrait)").forEach(function(p){var b=document.createElement("button");b.textContent="\u29c9";b.title="Copy";b.onclick=function(){navigator.clipboard.writeText(p.innerText.replace(/\u29c9$/,"").trim());b.textContent="\u2713";setTimeout(function(){b.textContent="\u29c9"},900)};p.appendChild(b)});</script>
<script src="docs.js"></script>
<script src="fun.js"></script>
</body>
</html>