source: postlfs/config/firmware.xml@ bfd2ba3c

11.1 11.2 11.3 12.0 12.1 kea ken/TL2024 ken/inkscape-core-mods ken/tuningfonts lazarus lxqt plabs/newcss plabs/python-mods python3.11 qt5new rahul/power-profiles-daemon renodr/vulkan-addition trunk xry111/intltool xry111/llvm18 xry111/soup3 xry111/test-20220226 xry111/xf86-video-removal
Last change on this file since bfd2ba3c was bfd2ba3c, checked in by Ken Moffat <ken@…>, 2 years ago

Package update and some rewording:

Update to fetchmail-6.4.27.

Rewording about the examples in Intel microcode, they are old and
that machine now runs version 0xec (although I guess they will soon
stop providing newer updates for Skylake) and of course the kernel
versions are way out of date.

  • Property mode set to 100644
File size: 29.5 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 <sect1info>
12 <date>$Date$</date>
13 </sect1info>
14
15 <title>About Firmware</title>
16
17 <indexterm zone="postlfs-firmware">
18 <primary sortas="e-lib-firmware">/lib/firmware</primary>
19 </indexterm>
20
21 <para>
22 On some recent PCs it can be necessary, or desirable, to load firmware
23 to make them work at their best. There is a directory, <filename
24 class="directory">/lib/firmware</filename>, where the kernel or kernel
25 drivers look for firmware images.
26 </para>
27
28 <para>
29 Currently, most firmware can be found at a <userinput>git</userinput>
30 repository: <ulink url=
31 "http://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git/tree/"/>.
32 For convenience, the LFS Project has created a mirror, updated daily, where
33 these firmware files can be accessed via <userinput>wget</userinput> or a
34 web browser at <ulink url="&sources-anduin-http;/linux-firmware/"/>.
35 </para>
36
37 <para>
38 To get the firmware, either point a browser to one of the above
39 repositories and then download the item(s) which you need, or install
40 <xref linkend="git"/> and clone that repository.
41 </para>
42
43 <para>
44 For some other firmware, particularly for Intel microcode and certain
45 wifi devices, the needed firmware is not available in the above repository.
46 Some of this will be addressed below, but a search of the Internet for
47 needed firmware is sometimes necessary.
48 </para>
49
50 <para>
51 Firmware files are conventionally referred to as blobs because you cannot
52 determine what they will do. Note that firmware is distributed under
53 various different licenses which do not permit disassembly or
54 reverse-engineering.
55 </para>
56
57 <para>
58 Firmware for PCs falls into four categories:
59 </para>
60
61 <itemizedlist spacing="compact">
62 <listitem>
63 <para>
64 Updates to the CPU to work around errata, usually referred to as
65 microcode.
66 </para>
67 </listitem>
68 <listitem>
69 <para>
70 Firmware for video controllers. On x86 machines this is required for
71 ATI devices (Radeon and AMDGPU chips) and may be useful for Intel (Skylake
72 and later) and Nvidia (Kepler and later) GPUs.
73 </para>
74
75 <para>
76 ATI Radeon and AMGPU devices all require firmware to be able to use KMS
77 (kernel modesetting - the preferred option) as well as for Xorg. For
78 old radeon chips (before the R600), the firmware is still in the
79 kernel source.
80 </para>
81
82 <para>
83 Intel integrated GPUs from Skylake onwards can use firmware for GuC
84 (the Graphics microcontroller), and also for the HuC (HEVC/H265
85 microcontroller which offloads to the GPU) and the DMC (Display
86 Microcontroller) to provide additional low-power states. The GuC and
87 HuC have had a chequered history in the kernel and updated firmware
88 may be disabled by default, depending on your kernel version. Further
89 details may be found at <ulink
90 url="https://01.org/linuxgraphics/downloads/firmware/">01.org</ulink>
91 and <ulink
92 url="https://wiki.archlinux.org/index.php/intel_graphics">Arch
93 linux</ulink>.
94 </para>
95
96 <para>
97 Nvidia GPUs from Kepler onwards require signed firmware, otherwise the
98 nouveau driver is unable to provide hardware acceleration. Nvidia has
99 now released firmware up to Turing (most, maybe all, GTX16xx and RTX20xx
100 GPUs) to linux-firmware, and kernels from linux-5.6 should support it,
101 although Mesa support may require a development version until Mesa-20.2
102 is released. 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. Mostly they work even
109 without the updates, but probably they will 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 wifi. 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 <para condition="html" role="usernotes">User Notes:
137 <ulink url="&blfs-wiki;/aboutfirmware"/></para>
138
139 <sect2 id="cpu-microcode">
140 <title>Microcode updates for CPUs</title>
141
142 <para>
143 In general, microcode can be loaded by the BIOS or UEFI, and it might be
144 updated by upgrading to a newer version of those. On linux, you can also
145 load the microcode from the kernel if you are using an AMD family 10h or
146 later processor (first introduced late 2007), or an Intel processor from
147 1998 and later (Pentium4, Core, etc), if updated microcode has been
148 released. These updates only last until the machine is powered off, so
149 they need to be applied on every boot.
150 </para>
151
152 <para>
153 Intel provide updates of their microcode for Skylake and later
154 processors as new vulnerabilities come to light, and have in the past
155 provided updates for processors from SandyBridge onwards, although those
156 are no-longer supported for new fixes. New versions of AMD
157 firmware are rare and usually only apply to a few models, although
158 motherboard manufacturers get extra updates which maybe update microcode
159 along with the changes to support newer CPUs and faster memory.
160 </para>
161
162 <para>
163 There are two ways of loading the microcode, described as 'early' and
164 'late'. Early loading happens before userspace has been started, late
165 loading happens after userspace has started. Not surprisingly, early
166 loading is preferred, (see e.g. an explanatory comment in a kernel
167 commit noted at <ulink url="https://lwn.net/Articles/530346/">
168 x86/microcode: Early load microcode</ulink> on LWN.) Indeed, it
169 is needed to work around one particular erratum in early Intel Haswell
170 processors which had TSX enabled. (See <ulink url=
171 "http://www.anandtech.com/show/8376/intel-disables-tsx-instructions-erratum-found-in-haswell-haswelleep-broadwellyi/">
172 Intel Disables TSX Instructions: Erratum Found in Haswell,
173 Haswell-E/EP, Broadwell-Y
174 </ulink>.) Without this update glibc can do the wrong thing in uncommon
175 situations.
176 </para>
177
178 <para>
179 It is still possible to manually force late loading of microcode, either
180 for testing or to prevent having to reboot. You will need to reconfigure
181 your kernel for either method. The instructions here will create a
182 kernel <filename>.config</filename> to suite early loading, before
183 forcing late loading to see if there is any microcode. If there is,
184 the instructions then show you how to create an initrd for early loading.
185 </para>
186
187 <para>
188 To confirm what processor(s) you have (if more than one, they will be
189 identical) look in /proc/cpuinfo.
190 </para>
191
192 <para>
193 If you are creating an initrd to update firmware for different machines,
194 as a distro would do, go down to 'Early loading of microcode' and cat all
195 the Intel blobs to GenuineIntel.bin or cat all the AMD blobs to
196 AuthenticAMD.bin. This creates a larger initrd - for all Intel machines in
197 the 20200609 update the size is 3.0 MB compared to typically 24 KB for one
198 machine.
199 </para>
200
201 <sect3 id="intel-microcode">
202 <title>Intel Microcode for the CPU</title>
203
204 <para>
205 The first step is to get the most recent version of the Intel
206 microcode. This must be done by navigating to <ulink url=
207 'https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/releases/'/>
208 and downloading the latest file there. As of this writing the most
209 <!-- at one time, some skylakes had problems with a certain revision
210 secure version of the microcode, for those machines which can boot it, -->
211 secure version of the microcode
212 is microcode-20220207.<!-- If you have a Skylake machine, please read the
213 Caution in the 'Early loading of microcode' section below.--> Extract this
214 file in the normal way, the microcode is in the <filename>intel-ucode
215 </filename> directory, containing various blobs with names in the form
216 XX-YY-ZZ. There are also various other files, and a releasenote.
217 </para>
218
219 <para>
220 In the past, intel did not provide any details of which blobs had
221 changed versions, but now the release note details this.
222 </para>
223
224 <para>
225 The recent firmware for older processors is provided to deal with
226 vulnerabilities which have now been made public, and for some of these
227 such as Microarchitectural Data Sampling (MDS) you might wish to
228 increase the protection by disabling hyperthreading, or alternatively
229 to disable the kernel's default mitigation because of its impact on
230 compile times. Please read the online documentation at <ulink url=
231 'https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/index.html'/>.
232 </para>
233
234 <!-- commented, I don't think there is a new listed item for 2011-11 vulns
235 (platypus etc : intel-sa-00381 and 0389)
236 and anyway the very latest stable releases have backports : ken
237 <para>
238 The documentation on the latest SRBDS (Special Register Buffer Data
239 Sampling) vulnerabilities/fixes will be documented in kernels 5.4.46,
240 5.6.18, 5.7.2, 5.8.0 and later.
241 </para>-->
242
243 <para>
244 Now you need to determine your processor's identity to see if there
245 is any microcode for it. Determine the decimal values of the cpu family,
246 model and stepping by running the following command (it will also report
247 the current microcode version):
248 </para>
249
250<screen><userinput>head -n7 /proc/cpuinfo</userinput></screen>
251
252 <para>
253 Convert the cpu family, model and stepping to pairs of hexadecimal
254 digits. For a Skylake i3 6100 (described as Intel(R) Core(TM) i3-6100
255 CPU) the relevant values are cpu family 6, model 94, stepping 3 so in
256 this case the required identification is 06-5e-03. A look at the blobs
257 will show that there is one for this CPU (although for older issues it
258 might have already been applied by the BIOS). If there is a blob for
259 your system then test if it will be applied by copying it (replace
260 &lt;XX-YY-ZZ&gt; by the identifier for your CPU) to where the
261 kernel can find it:
262 </para>
263
264<screen><userinput>mkdir -pv /lib/firmware/intel-ucode
265cp -v intel-ucode/&lt;XX-YY-ZZ&gt; /lib/firmware/intel-ucode</userinput></screen>
266
267 <para>
268 Now that the Intel microcode has been prepared, use the following
269 options when you configure the kernel to load Intel microcode:
270 </para>
271
272<screen><literal>General Setup ---&gt;
273 [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support [CONFIG_BLK_DEV_INITRD]
274Processor type and features ---&gt;
275 [*] CPU microcode loading support [CONFIG_MICROCODE]
276 [*] Intel microcode loading support [CONFIG_MICROCODE_INTEL]</literal></screen>
277
278 <para>
279 After you have successfully booted the new system, force late loading
280 by using the command:
281 </para>
282
283<screen><userinput>echo 1 > /sys/devices/system/cpu/microcode/reload</userinput></screen>
284
285 <para>
286 Then use the following command to see if anything was loaded:
287 (N.B. the dates when microcode was created may be months ahead of when
288 it was released.)
289 </para>
290
291<screen><userinput>dmesg | grep -e 'microcode' -e 'Linux version' -e 'Command line'</userinput></screen>
292
293 <para>
294 This old example showing the very old BIOS firmware version
295 was created by temporarily booting without
296 microcode, to show the current Firmware Bug messages, then the late load
297 shows it being updated to revision 0xea which was current at that time.
298 </para>
299
300<screen><literal>[ 0.000000] Linux version 5.12.8 (lfs@leshp) (gcc (GCC) 11.1.0,
301 GNU ld (GNU Binutils) 2.36.1)
302 #2 SMP PREEMPT Fri Jun 4 01:25:02 BST 2021
303[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-5.12.8-sda11 root=/dev/sda11 ro
304 resume=/dev/sda10
305[ 0.028741] [Firmware Bug]: TSC_DEADLINE disabled due to Errata;
306 please update microcode to version: 0xb2 (or later)
307[ 0.115716] SRBDS: Vulnerable: No microcode
308[ 0.115826] MDS: Vulnerable: Clear CPU buffers attempted, no microcode
309[ 0.389005] microcode: sig=0x506e3, pf=0x2, revision=0x74
310[ 0.389030] microcode: Microcode Update Driver: v2.2.
311[ 70.089502] microcode: updated to revision 0xea, date = 2021-01-25
312[ 70.089528] x86/CPU: CPU features have changed after loading microcode,
313 but might not take effect.
314[ 70.089530] microcode: Reload completed, microcode revision: 0xea</literal></screen>
315
316 <para>
317 If the microcode was not updated, there is no new microcode for this
318 system's processor. If it did get updated, you can now proceed to
319 <xref linkend='early-microcode'/>.
320 </para>
321
322 </sect3>
323
324 <sect3 id="amd-microcode">
325 <title>AMD Microcode for the CPU</title>
326
327 <para>
328 Begin by downloading a container of firmware for your CPU family
329 from <ulink url=
330 '&sources-anduin-http;/linux-firmware/amd-ucode/'/>.
331 The family is always specified in hex. Families 10h to 14h (16 to 20)
332 are in microcode_amd.bin. Families 15h, 16h and 17h have their own
333 containers. Create the required directory and put the firmware you
334 downloaded into it as the <systemitem
335 class="username">root</systemitem> user:
336 </para>
337
338<screen><userinput>mkdir -pv /lib/firmware/amd-ucode
339cp -v microcode_amd* /lib/firmware/amd-ucode</userinput></screen>
340
341 <para>
342 When you configure the kernel, use the following options
343 to load AMD microcode:
344 </para>
345
346<screen><literal>General Setup ---&gt;
347 [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support [CONFIG_BLK_DEV_INITRD]
348Processor type and features ---&gt;
349 [*] CPU microcode loading support [CONFIG_MICROCODE]
350 [*] AMD microcode loading support [CONFIG_MICROCODE_AMD]</literal></screen>
351
352 <para>
353 After you have successfully booted the new system, force late loading
354 by using the command:
355 </para>
356
357<screen><userinput>echo 1 > /sys/devices/system/cpu/microcode/reload</userinput></screen>
358
359 <para>
360 Then use the following command to see if anything was loaded:
361 </para>
362
363<screen><userinput>dmesg | grep -e 'microcode' -e 'Linux version' -e 'Command line'</userinput></screen>
364 <para>
365 This historic example from an old Athlon(tm) II X2 shows it has been
366 updated. At that time, all CPUs were still reported in the microcode
367 details on AMD machines (the current position for AMD machines where
368 newer microcode is available is unknown) :
369 </para>
370
371<screen><literal>[ 0.000000] Linux version 4.15.3 (ken@testserver) (gcc version 7.3.0 (GCC))
372 #1 SMP Sun Feb 18 02:08:12 GMT 2018
373[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.15.3-sda5 root=/dev/sda5 ro
374[ 0.307619] microcode: CPU0: patch_level=0x010000b6
375[ 0.307671] microcode: CPU1: patch_level=0x010000b6
376[ 0.307743] microcode: Microcode Update Driver: v2.2.
377[ 187.928891] microcode: CPU0: new patch_level=0x010000c8
378[ 187.928899] microcode: CPU1: new patch_level=0x010000c8</literal></screen>
379
380 <para>
381 If the microcode was not updated, there is no new microcode for
382 this system's processor. If it did get updated, you can now proceed to
383 <xref linkend='early-microcode'/>.
384 </para>
385
386 </sect3>
387
388 <sect3 id="early-microcode">
389 <title>Early loading of microcode</title>
390
391 <para>
392 If you have established that updated microcode is available for
393 your system, it is time to prepare it for early loading. This requires
394 an additional package, <xref linkend='cpio'/> and the creation of an
395 initrd which will need to be added to grub.cfg.
396 </para>
397
398 <para>
399 It does not matter where you prepare the initrd, and once it is
400 working you can apply the same initrd to later LFS systems or newer
401 kernels on this same machine, at least until any newer microcode is
402 released. Use the following commands:
403 </para>
404
405<screen><userinput>mkdir -p initrd/kernel/x86/microcode
406cd initrd</userinput></screen>
407
408 <para>
409 For an AMD machine, use the following command (replace
410 &lt;MYCONTAINER&gt; with the name of the container for your CPU's
411 family):
412 </para>
413
414<screen><userinput>cp -v /lib/firmware/amd-ucode/&lt;MYCONTAINER&gt; kernel/x86/microcode/AuthenticAMD.bin</userinput></screen>
415
416 <para>
417 Or for an Intel machine copy the appropriate blob using this command:
418 </para>
419
420<screen><userinput>cp -v /lib/firmware/intel-ucode/&lt;XX-YY-ZZ&gt; kernel/x86/microcode/GenuineIntel.bin</userinput></screen>
421
422<!-- new version from 20201110 release onwards, assumed to work on all skylakes
423 But complaints about previous version took some days to appear, so keep as a comment for now.
424 <caution>
425 <para>
426 On some Skylake machines with hex Model Number '4e' (78 decimal) the
427 upgrade to microcode version '0xdc' is reported to cause the machine to
428 hang in early boot, and the fix is to revert to version 0xd6 which was
429 first shipped in the 20191115 microcode release.
430 </para>
431
432 <para>
433 At least one model '5e' Skylake does boot successfully with version
434 0xdc, but Intel has now shipped a 20200616 release which is intended for
435 distros which need an initrd that will boot on everyone's machine: it
436 reverts both Skylake variants ('4e' and '5e') to the old 0xd6.
437 </para>
438
439 <para>
440 For a Skylake which does not boot with 0xdc, reverting to 0xd6 will make
441 the machine usable, but without the SRBDS mitigations.
442 </para>
443 </caution>-->
444
445 <para>
446 Now prepare the initrd:
447 </para>
448
449<screen><userinput>find . | cpio -o -H newc &gt; /boot/microcode.img</userinput></screen>
450
451 <para>
452 You now need to add a new entry to /boot/grub/grub.cfg and
453 here you should add a new line after the linux line within the stanza.
454 If /boot is a separate mountpoint:
455 </para>
456
457<screen><userinput>initrd /microcode.img</userinput></screen>
458
459 <para>
460 or this if it is not:
461 </para>
462
463<screen><userinput>initrd /boot/microcode.img</userinput></screen>
464
465 <para>
466 If you are already booting with an initrd (see <xref
467 linkend="initramfs"/>), you should run <command>mkinitramfs</command>
468 again after putting the appropriate blob or container into <filename
469 class="directory">/lib/firmware</filename> as explained above.
470 Alternatively, you can have both initrd on the same line, such as
471 <userinput>initrd /microcode.img /other-initrd.img</userinput> (adapt
472 that as above if /boot is not a separate mountpoint).
473 </para>
474
475 <para>
476 You can now reboot with the added initrd, and then use the same
477 command to check that the early load worked:
478 </para>
479
480<screen><userinput>dmesg | grep -e 'microcode' -e 'Linux version' -e 'Command line'</userinput></screen>
481
482 <para>
483 If you updated to address vulnerabilities, you can look at <filename
484 class="directory">/sys/devices/system/cpu/vulnerabilities/</filename>
485 to see what is now reported.
486 </para>
487
488 <para>
489 The places and times where early loading happens are very different
490 in AMD and Intel machines. First, an old example of an Intel (Skylake) with early loading:
491 </para>
492
493<screen><literal>[ 0.000000] microcode: microcode updated early to revision 0xea, date = 2021-01-25
494[ 0.000000] Linux version 5.12.8 (lfs@leshp) (gcc (GCC) 11.1.0,
495 GNU ld (GNU Binutils) 2.36.1) #2 SMP PREEMPT Fri Jun 4 01:25:02 BST 2021
496[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-5.12.8-sda11 root=/dev/sda11 ro
497 resume=/dev/sda10
498[ 0.381420] microcode: sig=0x506e3, pf=0x2, revision=0xea
499[ 0.381479] microcode: Microcode Update Driver: v2.2.</literal></screen>
500
501
502 <para>
503 A historic AMD example:
504 </para>
505
506<screen><literal>[ 0.000000] Linux version 4.15.3 (ken@testserver) (gcc version 7.3.0 (GCC))
507 #2 SMP Sun Feb 18 02:32:03 GMT 2018
508[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.15.3-sda5 root=/dev/sda5 ro
509[ 0.307619] microcode: microcode updated early to new patch_level=0x010000c8
510[ 0.307678] microcode: CPU0: patch_level=0x010000c8
511[ 0.307723] microcode: CPU1: patch_level=0x010000c8
512[ 0.307795] microcode: Microcode Update Driver: v2.2.</literal></screen>
513
514 </sect3>
515
516 </sect2>
517
518 <sect2 id="video-firmware">
519 <title>Firmware for Video Cards</title>
520
521 <sect3 id="ati-video-firmware">
522 <title>Firmware for ATI video chips (R600 and later)</title>
523
524 <para>
525 These instructions do NOT apply to old radeons before the R600
526 family. For those, the firmware is in the kernel's <filename
527 class='directory'>/lib/firmware/</filename> directory. Nor do they
528 apply if you intend to avoid a graphical setup such as Xorg and are
529 content to use the default 80x25 display rather than a framebuffer.
530 </para>
531
532 <para>
533 Early radeon devices only needed a single 2K blob of firmware. Recent
534 devices need several different blobs, and some of them are much bigger.
535 The total size of the radeon firmware directory is over 500K &mdash;
536 on a large modern system you can probably spare the space, but it is
537 still redundant to install all the unused files each time you build
538 a system.
539 </para>
540
541 <para>
542 A better approach is to install <xref linkend='pciutils'/> and then
543 use <userinput>lspci</userinput> to identify which VGA controller is
544 installed.
545 </para>
546
547 <para>
548 With that information, check the RadeonFeature page of the Xorg wiki
549 for <ulink url="http://wiki.x.org/wiki/RadeonFeature/#index5h2">Decoder
550 ring for engineering vs marketing names</ulink> to identify the family
551 (you may need to know this for the Xorg driver in BLFS &mdash;
552 Southern Islands and Sea Islands use the radeonsi driver) and the
553 specific model.
554 </para>
555
556 <para>
557 Now that you know which controller you are using, consult the
558 <ulink url="https://wiki.gentoo.org/wiki/Radeon#Firmware">
559 Radeon</ulink> page of the Gentoo wiki which has a table listing
560 the required firmware blobs for the various chipsets. Note that
561 Southern Islands and Sea Islands chips use different firmware for
562 kernel 3.17 and later compared to earlier kernels. Identify and
563 download the required blobs then install them:
564 </para>
565
566<screen><userinput>mkdir -pv /lib/firmware/radeon
567cp -v &lt;YOUR_BLOBS&gt; /lib/firmware/radeon</userinput></screen>
568
569 <para>
570 There are actually two ways of installing this firmware. BLFS, in the
571 'Kernel Configuration for additional firmware' section part of the
572 <xref linkend="xorg-ati-driver"/> section gives an example of
573 compiling the firmware into the kernel - that is slightly faster to
574 load, but uses more kernel memory. Here we will use the alternative
575 method of making the radeon driver a module. In your kernel config
576 set the following:
577 </para>
578
579<screen><literal>Device Drivers ---&gt;
580 Graphics support ---&gt;
581 Direct Rendering Manager ---&gt;
582 [*] Direct Rendering Manager (XFree86 ... support) [CONFIG_DRM]
583 [M] ATI Radeon [CONFIG_DRM_RADEON]</literal></screen>
584
585 <para>
586 Loading several large blobs from /lib/firmware takes a noticeable
587 time, during which the screen will be blank. If you do not enable the
588 penguin framebuffer logo, or change the console size by using a bigger
589 font, that probably does not matter. If desired, you can slightly
590 reduce the time if you follow the alternate method of specifying 'y'
591 for CONFIG_DRM_RADEON covered in BLFS at the link above &mdash; you
592 must specify each needed radeon blob if you do that.
593 </para>
594
595 </sect3>
596
597 <sect3 id="nvidia-video-firmware">
598 <title>Firmware for Nvidia video chips</title>
599
600 <para>
601 Some Nvidia graphics chips need firmware updates to take advantage
602 of all the card's capability. These are generally the GeForce 8, 9,
603 9300, and 200-900 series chips. For more exact information, see
604 <ulink url=
605 "https://nouveau.freedesktop.org/wiki/VideoAcceleration/#firmware"/>.
606 </para>
607
608 <para>
609 First, the kernel Nvidia driver must be activated:
610 </para>
611
612<screen><literal>Device Drivers ---&gt;
613 Graphics support ---&gt;
614 Direct Rendering Manager ---&gt;
615 &lt;*&gt; Direct Rendering Manager (XFree86 ... support) [CONFIG_DRM]
616 &lt;*/M&gt; Nouveau (NVIDIA) cards [CONFIG_DRM_NOUVEAU]</literal></screen>
617
618 <para>
619 The steps to install the Nvidia firmware are:
620 </para>
621
622<screen><userinput>wget https://raw.github.com/imirkin/re-vp2/master/extract_firmware.py
623wget http://us.download.nvidia.com/XFree86/Linux-x86/325.15/NVIDIA-Linux-x86-325.15.run
624sh NVIDIA-Linux-x86-325.15.run --extract-only
625python extract_firmware.py
626mkdir -p /lib/firmware/nouveau
627cp -d nv* vuc-* /lib/firmware/nouveau/</userinput></screen>
628
629 </sect3>
630 </sect2>
631
632 <sect2 id="nic-firmware">
633 <title>Firmware for Network Interfaces</title>
634
635 <para>
636 The kernel likes to load firmware for some network drivers, particularly
637 those from Realtek (the /lib/linux-firmware/rtl_nic/) directory, but
638 they generally appear to work without it. Therefore, you can boot the
639 kernel, check dmesg for messages about this missing firmware, and if
640 necessary download the firmware and put it in the specified directory in
641 <filename class="directory">/lib/firmware</filename> so that it will
642 be found on subsequent boots. Note that with current kernels this
643 works whether or not the driver is compiled in or built as a module,
644 there is no need to build this firmware into the kernel.
645 Here is an example where the R8169 driver has been compiled in but the
646 firmware was not made available. Once the firmware had been provided,
647 there was no mention of it on later boots.
648 </para>
649
650<screen><literal>dmesg | grep firmware | grep r8169
651[ 7.018028] r8169 0000:01:00.0: Direct firmware load for rtl_nic/rtl8168g-2.fw failed with error -2
652[ 7.018036] r8169 0000:01:00.0 eth0: unable to load firmware patch rtl_nic/rtl8168g-2.fw (-2)</literal></screen>
653
654 </sect2>
655
656 <sect2 id="other-firmware">
657 <title>Firmware for Other Devices</title>
658
659 <para>
660 Identifying the correct firmware will typically require you to install
661 <xref linkend='pciutils'/>, and then use <userinput>lspci</userinput>
662 to identify the device. You should then search online to check which
663 module it uses, which firmware, and where to obtain the firmware &mdash;
664 not all of it is in linux-firmware.
665 </para>
666
667 <para>
668 If possible, you should begin by using a wired connection when you first
669 boot your LFS system. To use a wireless connection you will need to
670 use a network tools such as <xref linkend='wireless_tools'/> and <xref
671 linkend='wpa_supplicant'/>.
672 </para>
673
674 <para>
675 Different countries have different regulations on the radio spectrum
676 usage of wireless devices. You can install a firmware to make the
677 wireless devices obey local spectrum regulations, so you won't be
678 inquired by local authority or find your wireless NIC jamming the
679 frequencies of other devices (for example, remote controllers).
680 The regulatory database firmware can be downloaded from
681 <ulink url = 'https://kernel.org/pub/software/network/wireless-regdb/'/>.
682 To install it, simply extract <filename>regulatory.db</filename> and
683 <filename>regulatory.db.p7s</filename> from the tarball into
684 <filename class="directory">/lib/firmware</filename>.
685 The access point would send a country code to your wireless NIC,
686 and <xref linkend='wpa_supplicant'/> would tell the kernel to load
687 the regulation of this country from
688 <filename>regulatory.db</filename>, and enforce it.
689 </para>
690
691 <para>
692 Firmware may also be needed for other devices such as some SCSI
693 controllers, bluetooth adaptors, or TV recorders. The same principles
694 apply.
695 </para>
696
697 </sect2>
698
699</sect1>
Note: See TracBrowser for help on using the repository browser.