source: postlfs/config/firmware.xml@ a5de628

12.1 12.2 gimp3 ken/TL2024 lazarus plabs/newcss python3.11 rahul/power-profiles-daemon trunk xry111/for-12.3 xry111/llvm18 xry111/spidermonkey128
Last change on this file since a5de628 was b870678, checked in by Xi Ruoyao <xry111@…>, 10 months ago

kernel-config: Regenerate with Linux 6.6.3

Intel and AMD microcode support is now always enabled on x86[_64] and
CONFIG_MICROCODE is now hidden, thus remove amd-ucode and intel-ucode
kernel configuration info.

The other changes seem trivial.

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