source: postlfs/config/firmware.xml@ 7899010

12.1 ken/TL2024 ken/tuningfonts lazarus plabs/newcss python3.11 rahul/power-profiles-daemon renodr/vulkan-addition trunk xry111/llvm18
Last change on this file since 7899010 was 821f5d9, checked in by Xi Ruoyao <xry111@…>, 10 months ago

Update and unify the URL for alsa-ucm-conf

  • Property mode set to 100644
File size: 32.0 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../../general.ent">
5 %general-entities;
6]>
7
8<sect1 id="postlfs-firmware" xreflabel="About Firmware">
9 <?dbhtml filename="firmware.html"?>
10
11
12 <title>About Firmware</title>
13
14 <indexterm zone="postlfs-firmware">
15 <primary sortas="e-lib-firmware">/lib/firmware</primary>
16 </indexterm>
17
18 <para>
19 On some recent PCs it can be necessary, or desirable, to load firmware
20 to make them work at their best. There is a directory, <filename
21 class="directory">/lib/firmware</filename>, where the kernel or kernel
22 drivers look for firmware images.
23 </para>
24
25 <para>
26 Currently, most firmware can be found at a <userinput>git</userinput>
27 repository: <ulink url=
28 "https://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git/tree/"/>.
29 For convenience, the LFS Project has created a mirror, updated daily, where
30 these firmware files can be accessed via <userinput>wget</userinput> or a
31 web browser at <ulink url="&sources-anduin-http;/linux-firmware/"/>.
32 </para>
33
34 <para>
35 To get the firmware, either point a browser to one of the above
36 repositories and then download the item(s) which you need, or install
37 <xref linkend="git"/> and clone that repository.
38 </para>
39
40 <para>
41 For some other firmware, particularly for Intel microcode and certain
42 wifi devices, the needed firmware is not available in the above repository.
43 Some of this will be addressed below, but a search of the Internet for
44 needed firmware is sometimes necessary.
45 </para>
46
47 <para>
48 Firmware files are conventionally referred to as blobs because you cannot
49 determine what they will do. Note that firmware is distributed under
50 various different licenses which do not permit disassembly or
51 reverse-engineering.
52 </para>
53
54 <para>
55 Firmware for PCs falls into four categories:
56 </para>
57
58 <itemizedlist spacing="compact">
59 <listitem>
60 <para>
61 Updates to the CPU to work around errata, usually referred to as
62 microcode.
63 </para>
64 </listitem>
65 <listitem>
66 <para>
67 Firmware for video controllers. On x86 machines this is required for
68 ATI devices (Radeon and AMDGPU chips) and may be useful for Intel (Skylake
69 and later) and Nvidia (Kepler and later) GPUs.
70 </para>
71
72 <para>
73 ATI Radeon and AMDGPU devices all require firmware to be able to use KMS
74 (kernel modesetting - the preferred option) as well as for Xorg. For
75 old radeon chips (before the R600), the firmware is still in the
76 kernel source.
77 </para>
78
79 <para>
80 Intel integrated GPUs from Skylake onwards can use firmware for GuC
81 (the Graphics microcontroller), and also for the HuC (HEVC/H265
82 microcontroller which offloads to the GPU) and the DMC (Display
83 Microcontroller) to provide additional low-power states. The GuC and
84 HuC have had a chequered history in the kernel and updated firmware
85 may be disabled by default, depending on your kernel version. Further
86 details may be found at <ulink
87 url="https://01.org/linuxgraphics/downloads/firmware/">01.org</ulink>
88 and <ulink
89 url="https://wiki.archlinux.org/index.php/intel_graphics">Arch
90 linux</ulink>.
91 </para>
92
93 <para>
94 Nvidia GPUs from Kepler onwards require signed firmware, otherwise the
95 nouveau driver is unable to provide hardware acceleration. Nvidia has
96 now released firmware up to Ampere (GeForce30 series) to linux-firmware.
97 Note that faster clocks than the default are not enabled
98 by the released firmware.
99 </para>
100 </listitem>
101 <listitem>
102 <para>
103 Firmware updates for wired network ports. Most of them work even
104 without the updates, but they will probably work better with
105 the updated firmware. For some modern laptops, firmware for both
106 wired ethernet (e.g. rtl_nic) and also for bluetooth devices (e.g. qca)
107 is <emphasis>required</emphasis> before the wired network can be used.
108 </para>
109 </listitem>
110 <listitem>
111 <para>
112 Firmware for other devices, such as wireless NICs. These devices are not
113 required for the PC to boot, but need the firmware before these devices
114 can be used.
115 </para>
116 </listitem>
117 </itemizedlist>
118
119 <note>
120 <para>
121 Although not needed to load a firmware blob, the following
122 tools may be useful for determining, obtaining, or preparing the needed
123 firmware in order to load it into the system:
124 <xref linkend="cpio"/>,
125 <xref linkend="git"/>,
126 <xref linkend="pciutils"/>, and
127 <xref linkend="wget"/>
128 </para>
129 </note>
130
131
132 <sect2 id="cpu-microcode">
133 <title>Microcode updates for CPUs</title>
134
135 <para>
136 In general, microcode can be loaded by the BIOS or UEFI, and it might be
137 updated by upgrading to a newer version of those. On linux, you can also
138 load the microcode from the kernel if you are using an AMD family 10h or
139 later processor (first introduced late 2007), or an Intel processor from
140 1998 and later (Pentium4, Core, etc), if updated microcode has been
141 released. These updates only last until the machine is powered off, so
142 they need to be applied on every boot.
143 </para>
144
145 <para>
146 Intel provide updates of their microcode for Skylake and later
147 processors as new vulnerabilities come to light, and have in the past
148 provided updates for processors from SandyBridge onwards, although those
149 are no-longer supported for new fixes. New versions of AMD
150 firmware are rare and usually only apply to a few models, although
151 motherboard manufacturers get AGESA (AMD Generic Encapsulated Software
152 Architecture) updates to change BIOS values, e.g. to support more memory
153 variants, new vulnerability fixes or newer CPUs.
154 </para>
155
156 <para>
157 There were two ways of loading the microcode, described as 'early' and
158 'late'. Early loading happens before userspace has been started, late
159 loading happens after userspace has started. However, late loading is
160 known to be problematic and not supported anymore (see the kernel commit
161 <ulink url="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d23d33e">
162 x86/microcode: Taint and warn on late loading</ulink>.) Indeed, early
163 loading is needed to work around one particular erratum in early Intel
164 Haswell processors which had TSX enabled. (See <ulink url=
165 "https://www.anandtech.com/show/8376/intel-disables-tsx-instructions-erratum-found-in-haswell-haswelleep-broadwelly/">
166 Intel Disables TSX Instructions: Erratum Found in Haswell,
167 Haswell-E/EP, Broadwell-Y</ulink>.)
168 Without this update glibc can do the wrong thing in uncommon
169 situations.
170 </para>
171
172 <para>
173 In previous versions of this book, late loading of microcode to see if
174 it gets applied was recommended, followed by using an initrd to force
175 early loading. But now that the contents of the Intel microcode tarball
176 is documented, and AMD microcode can be read by a Python script to
177 determine which machines it covers, there is no real reason to use late
178 loading.
179 </para>
180
181 <para>
182 It might be still possible to manually force late loading of microcode.
183 But it may cause kernel malfunction and you should take the risk yourself.
184 You will need to reconfigure your kernel for either method. The
185 instructions here will show you how to create an initrd for early
186 loading. It is also possible to build the same microcode bin file into
187 the kernel, which allows early loading but requires the kernel to be
188 recompiled to update the microcode.
189 </para>
190
191 <para>
192 To confirm what processor(s) you have (if more than one, they will be
193 identical) look in /proc/cpuinfo. Determine the decimal values of the cpu
194 family, model and stepping by running the following command (it will also
195 report the current microcode version):
196 </para>
197
198<screen><userinput>head -n7 /proc/cpuinfo</userinput></screen>
199
200 <para>
201 Convert the cpu family, model and stepping to pairs of hexadecimal
202 digits, and remember the value of the <quote>microcode</quote> field.
203 You can now check if there is any microcode available.
204 </para>
205
206 <para>
207 If you are creating an initrd to update firmware for different machines,
208 as a distro would do, go down to 'Early loading of microcode' and cat all
209 the Intel blobs to GenuineIntel.bin or cat all the AMD blobs to
210 AuthenticAMD.bin. This creates a larger initrd - for all Intel machines in
211 the 20200609 update the size was 3.0 MB compared to typically 24 KB for one
212 machine.
213 </para>
214
215 <sect3 id="intel-microcode">
216 <title>Intel Microcode for the CPU</title>
217
218 <para>
219 The first step is to get the most recent version of the Intel
220 microcode. This must be done by navigating to <ulink url=
221 'https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/releases/'/>
222 and downloading the latest file there. As of this writing the most
223 <!-- at one time, some skylakes had problems with a certain revision
224 secure version of the microcode, for those machines which can boot it, -->
225 secure version of the microcode
226 is microcode-20230808. Extract this
227 file in the normal way, the microcode is in the <filename>intel-ucode
228 </filename> directory, containing various blobs with names in the form
229 XX-YY-ZZ. There are also various other files, and a releasenote.
230 </para>
231
232 <para>
233 In the past, intel did not provide any details of which blobs had
234 changed versions, but now the releasenote details this. You can
235 compare the microcode version in <filename>/proc/cpuinfo</filename>
236 with the version for your CPU model in the releasenote to know if
237 there is an update.
238 </para>
239
240 <para>
241 The recent firmware for older processors is provided to deal with
242 vulnerabilities which have now been made public, and for some of these
243 such as Microarchitectural Data Sampling (MDS) you might wish to
244 increase the protection by disabling hyperthreading, or alternatively
245 to disable the kernel's default mitigation because of its impact on
246 compile times. Please read the online documentation at <ulink url=
247 'https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/index.html'/>.
248 </para>
249
250 <para>
251 For an Tigerlake mobile (described as Intel(R) Core(TM) i5-11300H
252 CPU) the relevant values are cpu family 6, model 140, stepping 1 so
253 in this case the required identification is 06-8c-01. The
254 releasenote says the latest microcode for it is versioned 0xac. If
255 the value of the <quote>microcode</quote> field in
256 <filename>/proc/cpuinfo</filename> is 0xac or greater, it indicates
257 the microcode update is already applied by the BIOS. Otherwise,
258 configure the kernel to support loading Intel microcode, and then
259 proceed to <xref linkend='early-microcode'/>:
260 </para>
261
262 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
263 href="intel-ucode-kernel.xml"/>
264
265 </sect3>
266
267 <sect3 id="amd-microcode">
268 <title>AMD Microcode for the CPU</title>
269
270 <para>
271 Begin by downloading a container of firmware for your CPU family
272 from <ulink url=
273 '&sources-anduin-http;/linux-firmware/amd-ucode/'/>.
274 The family is always specified in hex. Families 10h to 14h (16 to 20)
275 are in microcode_amd.bin. Families 15h, 16h, 17h (Zen, Zen+, Zen2) and
276 19h (Zen3) have their own containers, but very few machines are likely to
277 get updated microcode. Instead, AMD provide an updated AGESA to the
278 motherboard makers, who may provide an updated BIOS using this.
279 There is a Python3 script at <ulink url=
280 'https://github.com/AMDESE/amd_ucode_info/blob/master/amd_ucode_info.py'/>.
281 Download that script and run it against the bin file to check which
282 processors have updates.
283 </para>
284
285 <para>
286 For the very old Athlon(tm) II X2 in these examples the values were
287 cpu family 16, model 5, stepping 3 giving an identification of
288 Family=0x10 Model=0x05 Stepping=0x03. One line of the
289 <command>amd_ucode_info.py</command> script output describes the
290 microcode version for it:
291 </para>
292
293<screen><computeroutput>Family=0x10 Model=0x05 Stepping=0x03: Patch=0x010000c8 Length=960 bytes</computeroutput></screen>
294
295 <para>
296 If the value of the <quote>microcode</quote> field in
297 <filename>/proc/cpuinfo</filename> is 0x10000c8 or greater, it
298 indicates the BIOS has already applied the microcode update.
299 Otherwise, configure the kernel to support loading AMD microcode,
300 and then proceed to <xref linkend='early-microcode'/>:
301 </para>
302
303 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
304 href="amd-ucode-kernel.xml"/>
305
306 </sect3>
307
308 <sect3 id="early-microcode">
309 <title>Early loading of microcode</title>
310
311 <para>
312 If you have established that updated microcode is available for
313 your system, it is time to prepare it for early loading. This requires
314 an additional package, <xref linkend='cpio'/> and the creation of an
315 initrd which will need to be added to grub.cfg.
316 </para>
317
318 <para>
319 It does not matter where you prepare the initrd, and once it is
320 working you can apply the same initrd to later LFS systems or newer
321 kernels on this same machine, at least until any newer microcode is
322 released. Use the following commands:
323 </para>
324
325<screen><userinput>mkdir -p initrd/kernel/x86/microcode
326cd initrd</userinput></screen>
327
328 <para>
329 For an AMD machine, use the following command (replace
330 &lt;MYCONTAINER&gt; with the name of the container for your CPU's
331 family):
332 </para>
333
334<screen><userinput>cp -v ../&lt;MYCONTAINER&gt; kernel/x86/microcode/AuthenticAMD.bin</userinput></screen>
335
336 <para>
337 Or for an Intel machine copy the appropriate blob using this command:
338 </para>
339
340<screen><userinput>cp -v ../intel-ucode/&lt;XX-YY-ZZ&gt; kernel/x86/microcode/GenuineIntel.bin</userinput></screen>
341
342<!-- new version from 20201110 release onwards, assumed to work on all skylakes
343 But complaints about previous version took some days to appear, so keep as a comment for now.
344 <caution>
345 <para>
346 On some Skylake machines with hex Model Number '4e' (78 decimal) the
347 upgrade to microcode version '0xdc' is reported to cause the machine to
348 hang in early boot, and the fix is to revert to version 0xd6 which was
349 first shipped in the 20191115 microcode release.
350 </para>
351
352 <para>
353 At least one model '5e' Skylake does boot successfully with version
354 0xdc, but Intel has now shipped a 20200616 release which is intended for
355 distros which need an initrd that will boot on everyone's machine: it
356 reverts both Skylake variants ('4e' and '5e') to the old 0xd6.
357 </para>
358
359 <para>
360 For a Skylake which does not boot with 0xdc, reverting to 0xd6 will make
361 the machine usable, but without the SRBDS mitigations.
362 </para>
363 </caution>-->
364
365 <para>
366 Now prepare the initrd:
367 </para>
368
369<screen><userinput>find . | cpio -o -H newc &gt; /boot/microcode.img</userinput></screen>
370
371 <para>
372 You now need to add a new entry to /boot/grub/grub.cfg and
373 here you should add a new line after the linux line within the stanza.
374 If /boot is a separate mountpoint:
375 </para>
376
377<screen><userinput>initrd /microcode.img</userinput></screen>
378
379 <para>
380 or this if it is not:
381 </para>
382
383<screen><userinput>initrd /boot/microcode.img</userinput></screen>
384
385 <para>
386 If you are already booting with an initrd (see <xref
387 linkend="initramfs"/>), you should run <command>mkinitramfs</command>
388 again after putting the appropriate blob or container into <filename
389 class="directory">/lib/firmware</filename>. More precisely, put an
390 intel blob in a <filename
391 class="directory">/lib/firmware/intel-ucode</filename> directory
392 or an AMD container in a <filename
393 class="directory">/lib/firmware/amd-ucode</filename> directory before
394 running <command>mkinitramfs</command>.
395 Alternatively, you can have both initrd on the same line, such as
396 <userinput>initrd /microcode.img /other-initrd.img</userinput> (adapt
397 that as above if /boot is not a separate mountpoint).
398 </para>
399
400 <para>
401 You can now reboot with the added initrd, and then use the following
402 command to check that the early load worked:
403 </para>
404
405<screen><userinput>dmesg | grep -e 'microcode' -e 'Linux version' -e 'Command line'</userinput></screen>
406
407 <para>
408 If you updated to address vulnerabilities, you can look at the
409 output of the <command>lscpu</command> command to see what is now
410 reported.
411 </para>
412
413 <para>
414 The places and times where early loading happens are very different
415 in AMD and Intel machines. First, an example of an Intel (Tigerlake
416 mobile) with early loading:
417 </para>
418
419<screen><literal>[ 0.000000] microcode: microcode updated early: 0x86 -> 0xac, date = 2023-02-27
420[ 0.000000] Linux version 6.4.7 (root@stargazer) (gcc (GCC) 13.2.0, GNU ld (GNU Binutils) 2.41) #1 SMP PREEMPT_DYNAMIC Wed Aug 2 19:08:46 CST 2023
421[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-6.4.7 root=PARTUUID=<replaceable>&lt;CLASSIFIED&gt;</replaceable> ro
422[ 0.424002] microcode: Microcode Update Driver: v2.2.</literal></screen>
423
424
425 <para>
426 A historic AMD example:
427 </para>
428
429<screen><literal>[ 0.000000] Linux version 4.15.3 (ken@testserver) (gcc version 7.3.0 (GCC))
430 #2 SMP Sun Feb 18 02:32:03 GMT 2018
431[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.15.3-sda5 root=/dev/sda5 ro
432[ 0.307619] microcode: microcode updated early to new patch_level=0x010000c8
433[ 0.307678] microcode: CPU0: patch_level=0x010000c8
434[ 0.307723] microcode: CPU1: patch_level=0x010000c8
435[ 0.307795] microcode: Microcode Update Driver: v2.2.</literal></screen>
436
437 </sect3>
438
439 </sect2>
440
441 <sect2 id="video-firmware">
442 <title>Firmware for Video Cards</title>
443
444 <sect3 id="ati-video-firmware">
445 <title>Firmware for ATI video chips (R600 and later)</title>
446
447 <para>
448 These instructions do NOT apply to old radeons before the R600
449 family. For those, the firmware is in the kernel's <filename
450 class='directory'>/lib/firmware/</filename> directory. Nor do they
451 apply if you intend to avoid a graphical setup such as Xorg and are
452 content to use the default 80x25 display rather than a framebuffer.
453 </para>
454
455 <para>
456 Early radeon devices only needed a single 2K blob of firmware. Recent
457 devices need several different blobs, and some of them are much bigger.
458 The total size of the radeon firmware directory is over 500K &mdash;
459 on a large modern system you can probably spare the space, but it is
460 still redundant to install all the unused files each time you build
461 a system.
462 </para>
463
464 <para>
465 A better approach is to install <xref linkend='pciutils'/> and then
466 use <userinput>lspci</userinput> to identify which VGA controller is
467 installed.
468 </para>
469
470 <para>
471 With that information, check the RadeonFeature page of the Xorg wiki
472 for <ulink url="https://wiki.x.org/wiki/RadeonFeature/#index5h2">Decoder
473 ring for engineering vs marketing names</ulink> to identify the family
474 (you may need to know this for the Xorg driver in BLFS &mdash;
475 Southern Islands and Sea Islands use the radeonsi driver) and the
476 specific model.
477 </para>
478
479 <para>
480 Now that you know which controller you are using, consult the
481 <ulink url="https://wiki.gentoo.org/wiki/Radeon#Firmware">
482 Radeon</ulink> page of the Gentoo wiki which has a table listing
483 the required firmware blobs for the various chipsets. Note that
484 Southern Islands and Sea Islands chips use different firmware for
485 kernel 3.17 and later compared to earlier kernels. Identify and
486 download the required blobs then install them:
487 </para>
488
489<screen><userinput>mkdir -pv /lib/firmware/radeon
490cp -v &lt;YOUR_BLOBS&gt; /lib/firmware/radeon</userinput></screen>
491
492 <para>
493 Building the kernel amdgpu driver as a module is recommended because
494 the firmware files need to be accessible at the time it is loaded.
495 If you are building it as a part of the kernel image for any reason,
496 you need to either include the firmware files in the initramfs (read
497 <xref linkend='initramfs'/> for details), or include them in the
498 kernel image itself (read <xref linkend='firmware-in-kernel-image'/>
499 for details).
500 </para>
501
502 </sect3>
503
504 <sect3 id="amdgpu-video-firmware">
505 <title>Firmware for AMD/ATI amdgpu video chips</title>
506
507 <para>
508 All video controllers using the amdgpu kernel driver require firmware,
509 whether you will be using the xorg amdgpu driver, the xserver's modesetting
510 driver, or just kernel modesetting to get a console framebuffer larger than
511 80x25.
512 </para>
513
514 <para>
515 Install <xref linkend="pciutils"/> and use that to check the model name
516 (look for 'VGA compatible controller:'). If you have an APU (Accelerated
517 Processing Unit, i.e. CPU and video on the same chip) that will probably
518 tell you the name. If you have a separate amdgpu video card you will need
519 to search to determine which name it uses (e.g. a card described as
520 Advanced Micro Devices, Inc. [AMD/ATI] Baffin [Radeon RX 550 640SP / RX
521 560/560X] needs Polaris11 firmware. There is a table of "Family, Chipset
522 name, Product name and Firmware" at the end of the Kernel sections in
523 <ulink url="https://wiki.gentoo.org/wiki/AMDGPU#Known_firmware_blobs">
524 AMDGPU</ulink> page of the Gentoo wiki.
525 </para>
526
527 <para>
528 Once you have identified the firmware name, install all the relevant
529 files for it. For example, the Baffin card mentioned above has 21 different
530 polaris11* files, APUs such as renoir and picasso have at least 12 files and
531 might gain more in future updates (e.g. the raven APU now has a 13th file,
532 raven_ta.bin).
533 </para>
534
535<screen><userinput>mkdir -pv /lib/firmware/amdgpu
536cp -v &lt;YOUR_BLOBS&gt; /lib/firmware/amdgpu</userinput></screen>
537
538 <para>
539 If disk space is not a problem, you could install all the current amdgpu
540 firmware files and not worry about exactly which chipset is installed.
541 </para>
542
543 <para>
544 Building the kernel amdgpu driver as a module is recommended because
545 the firmware files need to be accessible at the time it is loaded.
546 If you are building it as a part of the kernel image for any reason,
547 you need to either include the firmware files in the initramfs (read
548 <xref linkend='initramfs'/> for details), or include them in the
549 kernel image itself (read <xref linkend='firmware-in-kernel-image'/>
550 for details).
551 </para>
552
553 </sect3>
554
555 <sect3 id="nvidia-video-firmware">
556 <title>Firmware for Nvidia video chips</title>
557
558 <para>
559 Nvidia has released basic signed firmware for recent graphics chips,
560 but significantly after the chips and its own binary drivers were first
561 available. For other chips it has been necessary to extract the firmware
562 from the binary driver.
563 </para>
564 <para>
565 For more exact information about which chips need extracted firmware, see
566 <ulink url=
567 "https://nouveau.freedesktop.org/VideoAcceleration.html"/>.
568 </para>
569
570 <para>
571 If the necessary firmware is available in the
572 <filename class="directory">nvidia/</filename> directory of
573 linux-firmware, copy it to
574 <filename class="directory">/lib/firmware/nouveau</filename>.
575 </para>
576 <para>
577 If the firmware has not been made available in linux-firmware,
578 for the old chips mentioned in the nouveau wiki link above
579 run the following commands:
580 </para>
581
582<screen><userinput>wget https://anduin.linuxfromscratch.org/BLFS/nvidia-firmware/extract_firmware.py
583wget https://us.download.nvidia.com/XFree86/Linux-x86/340.32/NVIDIA-Linux-x86-340.32.run
584sh NVIDIA-Linux-x86-340.32.run --extract-only
585python3 extract_firmware.py
586mkdir -p /lib/firmware/nouveau
587cp -d nv* vuc-* /lib/firmware/nouveau/</userinput></screen>
588
589 </sect3>
590 </sect2>
591
592 <sect2 id="nic-firmware">
593 <title>Firmware for Network Interfaces</title>
594
595 <para>
596 The kernel likes to load firmware for some network drivers, particularly
597 those from Realtek (the /lib/linux-firmware/rtl_nic/) directory, but
598 they generally appear to work without it. Therefore, you can boot the
599 kernel, check dmesg for messages about this missing firmware, and if
600 necessary download the firmware and put it in the specified directory in
601 <filename class="directory">/lib/firmware</filename> so that it will
602 be found on subsequent boots. Note that with current kernels this
603 works whether or not the driver is compiled in or built as a module,
604 there is no need to build this firmware into the kernel.
605 Here is an example where the R8169 driver has been compiled in but the
606 firmware was not made available. Once the firmware had been provided,
607 there was no mention of it on later boots.
608 </para>
609
610<screen><literal>dmesg | grep firmware | grep r8169
611[ 7.018028] r8169 0000:01:00.0: Direct firmware load for rtl_nic/rtl8168g-2.fw failed with error -2
612[ 7.018036] r8169 0000:01:00.0 eth0: unable to load firmware patch rtl_nic/rtl8168g-2.fw (-2)</literal></screen>
613
614 </sect2>
615
616 <sect2 id="regulatory-db">
617 <title>Firmware for Regulatory Database of Wireless Devices</title>
618
619 <para>
620 Different countries have different regulations on the radio spectrum
621 usage of wireless devices. You can install a firmware to make the
622 wireless devices obey local spectrum regulations, so you won't be
623 inquired by local authority or find your wireless NIC jamming the
624 frequencies of other devices (for example, remote controllers).
625 The regulatory database firmware can be downloaded from
626 <ulink url = 'https://kernel.org/pub/software/network/wireless-regdb/'/>.
627 To install it, simply extract <filename>regulatory.db</filename> and
628 <filename>regulatory.db.p7s</filename> from the tarball into
629 <filename class="directory">/lib/firmware</filename>. Note that either
630 the <option>cfg80211</option> driver needs to be selected as a module
631 for the <filename>regulatory.*</filename>
632 files to be loaded, or those files need to be included as firmware into
633 the kernel, as explained above in <xref linkend="video-firmware"/>.
634 </para>
635
636 <para>
637 The access point (AP) would send a country code to your wireless NIC,
638 and <xref linkend='wpa_supplicant'/> would tell the kernel to load
639 the regulation of this country from
640 <filename>regulatory.db</filename>, and enforce it. Note that several AP
641 don't send this country code, so you may be locked to a rather
642 restricted usage (specially if you want to use your interface as an AP).
643 </para>
644 </sect2>
645
646 <sect2 id="sound-open-firmware">
647 <title>Sound Open Firmware</title>
648
649 <para>
650 Some systems (especially budget laptops) utilizes a DSP shipped with
651 the CPU for connection with the audio codec. The Sound Open Firmware
652 must be loaded onto the DSP to make it functional. These firmware
653 files can be downloaded from
654 <ulink url='https://github.com/thesofproject/sof-bin/releases'/>.
655 Extract the tarball and changing into the extracted directory,
656 then as the &root; user install the firmware:
657 </para>
658
659 <screen role="nodump"><userinput>install -vdm755 /usr/lib/firmware/intel &amp;&amp;
660cp -av -T --no-preserve=ownership sof-v* \
661 /usr/lib/firmware/intel/sof &amp;&amp;
662cp -av -T --no-preserve=ownership sof-tplg-v* \
663 /usr/lib/firmware/intel/sof-tplg</userinput></screen>
664
665 <para>
666 <xref linkend="alsa-lib"/> needs Use Case Manager configuration files
667 for the systems using Sound Open Firmware as well. The ALSA UCM
668 configuration files can be downloaded from
669 <ulink url='https://www.alsa-project.org/files/pub/lib/alsa-ucm-conf-&alsa-lib-version;.tar.bz2'/>.
670 Extract the tarball and changing into the extracted directory,
671 then as the &root; user install the configuration files:
672 </para>
673
674 <screen role="nodump"><userinput>install -vdm755 /usr/share/alsa &amp;&amp;
675cp -av -T --no-preserve=ownership ucm2 /usr/share/alsa/ucm2</userinput></screen>
676
677 <para>
678 Once the firmware is loaded (you may need a reboot so the kernel will
679 load them) and the UCM configuration files are installed, following
680 <xref linkend="alsa-utils-config-sect"/> to set up your sound card for
681 ALSA properly.
682 </para>
683 </sect2>
684
685 <sect2 id="other-firmware">
686 <title>Firmware for Other Devices</title>
687
688 <para>
689 Identifying the correct firmware will typically require you to install
690 <xref linkend='pciutils'/>, and then use <userinput>lspci</userinput>
691 to identify the device. You should then search online to check which
692 module it uses, which firmware, and where to obtain the firmware &mdash;
693 not all of it is in linux-firmware.
694 </para>
695
696 <para>
697 If possible, you should begin by using a wired connection when you first
698 boot your LFS system. To use a wireless connection you will need to
699 use a network tools such as <xref linkend="iw"/>,
700 <xref linkend='wireless_tools'/>, or <xref linkend='wpa_supplicant'/>.
701 </para>
702
703 <para>
704 Firmware may also be needed for other devices such as some SCSI
705 controllers, bluetooth adaptors, or TV recorders. The same principles
706 apply.
707 </para>
708
709 </sect2>
710
711 <sect2 id='firmware-in-kernel-image'>
712 <title>Include Firmware Blobs in the Kernel Image</title>
713
714 <para>
715 Some drivers, notably the drivers for ATI or AMD GPU, requires the
716 firmware files accessible at the time it is loaded. The easiest
717 method to handle these drivers is building them as a kernel module.
718 An alternative method is creating an initramfs (read
719 <xref linkend='initramfs'/> for details) including the firmware files.
720 If you don't want to use either methods, you may include the firmware
721 files in the kernel image itself. Install the needed firmware files
722 into <filename class='directory'>/lib/firmware</filename> first, then
723 set the following kernel configuration and rebuild the kernel:
724 </para>
725
726 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
727 href="builtin-fw-kernel.xml"/>
728
729 <para>
730 Replace <replaceable>xx/aa.bin xx/bb.bin</replaceable>
731 with a whitespace-separated list of paths to the needed firmware
732 files, relative to
733 <filename class='directory'>/lib/firmware</filename>. A method
734 easier than manually typing the list (it may be long) is running the
735 following command:
736 </para>
737
738 <screen><userinput>echo CONFIG_EXTRA_FIRMWARE='"'$({ cd /lib/firmware; echo <replaceable>amdgpu/*</replaceable> })'"' &gt;&gt; .config
739make oldconfig</userinput></screen>
740
741 <para>
742 Replace <replaceable>amdgpu/*</replaceable> with a shell pattern
743 matching the needed firmware files.
744 </para>
745
746 <warning>
747 <para>
748 Do not distribute a kernel image containing the firmware to others
749 or you may violate the GPL.
750 </para>
751 </warning>
752
753 </sect2>
754
755</sect1>
Note: See TracBrowser for help on using the repository browser.