source: postlfs/config/firmware.xml@ 3d0e2ff

10.0 10.1 11.0 11.1 11.2 11.3 12.0 12.1 8.3 8.4 9.0 9.1 basic bdubbs/svn elogind kea ken/TL2024 ken/inkscape-core-mods ken/tuningfonts lazarus lxqt perl-modules plabs/newcss plabs/python-mods python3.11 qt5new rahul/power-profiles-daemon renodr/vulkan-addition trunk upgradedb xry111/intltool xry111/llvm18 xry111/soup3 xry111/test-20220226 xry111/xf86-video-removal
Last change on this file since 3d0e2ff was 3d0e2ff, checked in by Ken Moffat <ken@…>, 6 years ago

Update intel microcode to 20180312.

git-svn-id: svn://svn.linuxfromscratch.org/BLFS/trunk/BOOK@19951 af4574ff-66df-0310-9fd7-8a98e5e911e0

  • Property mode set to 100644
File size: 22.3 KB
RevLine 
[3ae81e1]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>
[d027410]12 <othername>$LastChangedBy$</othername>
13 <date>$Date$</date>
[3ae81e1]14 </sect1info>
15
16 <title>About Firmware</title>
17
18 <indexterm zone="postlfs-firmware">
19 <primary sortas="e-lib-firmware">/lib/firmware</primary>
20 </indexterm>
21
22 <para> On some recent PCs it can be necessary, or desirable, to load firmware
[aaa73cfd]23 to make them work at their best. There is a directory, <filename
[3ae81e1]24 class="directory">/lib/firmware</filename>, where the kernel or kernel
[f3429309]25 drivers look for firmware images.</para>
26
[3ae81e1]27 <para>Preparing firmware for multiple different machines, as a distro would
28 do, is outside the scope of this book.</para>
29
30 <para>Currently, most firmware can be found at a <userinput>git</userinput>
31 repository: <ulink
32 url="http://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git/tree/"/>.
33 For convenience, the LFS Project has created a mirror, updated daily, where
[cc8ccd9]34 these firmware files can be accessed via <userinput>wget</userinput> or a web
[3ae81e1]35 browser at <ulink
[a29486e4]36 url="&sources-anduin-http;/linux-firmware/"/>.</para>
[f3429309]37
[fc03210]38 <para>To get the firmware, either point a browser to one of the above
[3ae81e1]39 repositories and then download the item(s) which you need, or install
40 <userinput>git</userinput> and clone that repository.</para>
[f3429309]41
[3ae81e1]42 <para>For some other firmware, particularly for Intel microcode and certain
43 wifi devices, the needed firmware is not available in the above repository.
44 Some of this will be addressed below, but a search of the Internet for needed
45 firmware is sometimes necessary.</para>
46
47 <para>Firmware files are conventionally referred to as blobs because you cannot
48 determine what they will do. Note that firmware is distributed under various
49 different licenses which do not permit disassembly or reverse-engineering.</para>
50
51 <para>Firmware for PCs falls into four categories:</para>
52
53 <itemizedlist spacing="compact">
54 <listitem>
55 <para>Updates to the CPU to work around errata, usually referred to as
56 microcode.</para>
57 </listitem>
58 <listitem>
[f2d5c26a]59 <para>Firmware for video controllers. On x86 machines this seems to mostly
[553cb25]60 apply to ATI devices (Radeon and AMDGPU chips) and Nvidia
61 Maxwell and Pascal cards which all require firmware to be able to use KMS
[3ae81e1]62 (kernel modesetting - the preferred option) as well as for Xorg. For
63 earlier radeon chips (before the R600), the firmware is still in the
64 kernel.</para>
65 </listitem>
66 <listitem>
67 <para>Firmware updates for wired network ports. Mostly they work even
68 without the updates, but one must assume that they will work better with
69 the updated firmware.</para>
70 </listitem>
71 <listitem>
72 <para>Firmware for other devices, such as wifi. These devices are not
73 required for the PC to boot, but need the firmware before these devices
74 can be used.</para>
75 </listitem>
76 </itemizedlist>
77
[f3429309]78 <note><para>Although not needed to load a firmware blob, the following
79 tools may be useful for determining, obtaining, or preparing the needed
[3ae81e1]80 firmware in order to load it into the system:
81 <xref linkend="cpio"/>,
82 <xref linkend="git"/>,
83 <xref linkend="pciutils"/>, and
84 <xref linkend="wget"/></para></note>
85
86 <para condition="html" role="usernotes">User Notes:
87 <ulink url="&blfs-wiki;/aboutfirmware"/></para>
88
89 <sect2 id="cpu-microcode">
90 <title>Microcode updates for CPUs</title>
91
92 <para>In general, microcode can be loaded by the BIOS or UEFI, and it might
93 be updated by upgrading to a newer version of those. On linux, you can also
94 load the microcode from the kernel if you are using an AMD family 10h or
[f885719]95 later processor (first introduced late 2007), or an Intel processor from
[3ae81e1]96 1998 and later (Pentium4, Core, etc), if updated microcode has been
97 released. These updates only last until the machine is powered off, so they
98 need to be applied on every boot.</para>
[f3429309]99
[0576c595]100 <para>Intel provide frequent updates of their microcode. It is not uncommon
101 to find a newer version of microcode for an Intel processor even two years
102 after its release. New versions of AMD firmware are less common.</para>
103
104 <para>There used to be two ways of loading the microcode, described as 'early'
105 and 'late'. Early loading happens before userspace has been started, late
106 loading happens after userspace has started. Not surprisingly, early loading
107 was preferred, (see e.g. an explanatory comment in a kernel commit noted at
[3ae81e1]108 <ulink url="https://lwn.net/Articles/530346/">x86/microcode: Early load
109 microcode </ulink> on LWN.) Indeed, it is needed to work around one
[f885719]110 particular erratum in early Intel Haswell processors which had TSX enabled.
[3ae81e1]111 (See <ulink
112 url="http://www.anandtech.com/show/8376/intel-disables-tsx-instructions-erratum-found-in-haswell-haswelleep-broadwellyi/">
113 Intel Disables TSX Instructions: Erratum Found in Haswell, Haswell-E/EP,
114 Broadwell-Y</ulink>.) Without this update glibc can do the wrong thing in
[0576c595]115 uncommon situations. </para>
[f3429309]116
[0576c595]117 <para>As a result, early loading is now expected, although for the moment
[f2d5c26a]118 (4.11 kernels) it is still possible to manually force late loading of
[0576c595]119 microcode for testing. You will need to reconfigure your kernel for either
120 method. The instructions here will create a kernel
121 <filename>.config</filename> to suite early loading, before forcing late
122 loading to see if there is any microcode. If there is, the instructions
123 then show you how to create an initrd for early loading.</para>
[f3429309]124
[3ae81e1]125 <para>To confirm what processor(s) you have (if more than one, they will be
[fc03210]126 identical) look in /proc/cpuinfo.</para>
[3ae81e1]127
128 <sect3 id="intel-microcode">
129 <title>Intel Microcode for the CPU</title>
[ba78ebe2]130
[f2d5c26a]131 <para>The first step is to get the most recent version of the Intel
[1ad29630]132 microcode. This must be done by navigating to
[3d0e2ff]133 <ulink url='https://downloadcenter.intel.com/download/27591/Linux-Processor-Microcode-Data-File'/>
[ba78ebe2]134 and following the instructions there. As of this writing the most recent
[3d0e2ff]135 version of the microcode is <filename>microcode-20180312.tgz</filename>.
[f2d5c26a]136 Extract this file in the normal way to create an <filename>intel-ucode</filename>
[3d0e2ff]137 directory, containing various blobs with names in the form XX-YY-ZZ.
138 This tarball does not contain a top-level directory, two files
139 (microcode.dat which is the old-style of updates, still used by some
140 linux distros, and releasenote) will be extracted into the current
141 directory.</para>
[ba78ebe2]142
[553cb25]143 <note><para>The above URL may not be the latest page. If it is not,
[3d0e2ff]144 a line at the top of the page will direct you to the latest page.
[7dff3ca]145 </para></note>
146
[ba78ebe2]147 <para>Now you need to determine your processor's identity to see if there
148 is any microcode for it. Determine the decimal values of the cpu family,
[f2d5c26a]149 model and stepping by running the following command (it will also report
150 the current microcode version):</para>
[3ae81e1]151
152<screen><userinput>head -n7 /proc/cpuinfo</userinput></screen>
153
[ba78ebe2]154 <para>Convert the cpu family, model and stepping to pairs of hexadecimal
[0576c595]155 digits. For a Haswell i7-4790 (described as Intel(R) Core(TM) i7-4790
156 CPU) the relevant values are cpu family 6, model 60, stepping 3 so in
157 this case the required identification is 06-3c-03. A look at the blobs
[3ae81e1]158 will show that there is one for this CPU (although it might
159 have already been applied by the BIOS). If there is a blob for your
160 system then test if it will be applied by copying it (replace &lt;XX-YY-ZZ&gt;
[fc03210]161 by the identifier for your machine) to where the kernel can find it:</para>
[3ae81e1]162
163<screen><userinput>mkdir -pv /lib/firmware/intel-ucode
[ba78ebe2]164cp -v intel-ucode/&lt;XX-YY-ZZ&gt; /lib/firmware/intel-ucode</userinput></screen>
[3ae81e1]165
[f885719]166 <para>Now that the Intel microcode has been prepared, use the following
[0576c595]167 options when you configure the kernel to load Intel
[3ae81e1]168 microcode:</para>
169
[0576c595]170<screen><literal>General Setup ---&gt;
171 [y] Initial RAM filesystem and RAM disk (initramfs/initrd) support [CONFIG_BLK_DEV_INITRD]
172Processor type and features ---&gt;
173 [y] CPU microcode loading support [CONFIG_MICROCODE]
174 [y] Intel microcode loading support [CONFIG_MICROCODE_INTEL]</literal></screen>
175
176 <para>After you have successfully booted the new system, force late loading by
177 using the command:</para>
178
179<screen><userinput>echo 1 > /sys/devices/system/cpu/microcode/reload</userinput></screen>
180
181 <para>Then use the following command to see if anything was loaded:</para>
182
183<screen><userinput>dmesg | grep -e 'microcode' -e 'Linux version' -e 'Command line'</userinput></screen>
184
185 <para>This example from the Haswell i7 which was released in Q2 2014 and is
[c2c08bac]186 not affected by the TSX errata shows it has been updated from revision 0x19
[3d0e2ff]187 in the BIOS/UEFI (which this version of the kernel now complains about) to
188 revision 0x24. Unlike in older kernels, the individual CPUs are not separately
[1c1bdba]189 reported:</para>
190
191<screen><literal>[ 0.000000] Linux version 4.15.3 (ken@plexi) (gcc version 7.3.0 (GCC))
192 #2 SMP PREEMPT Fri Feb 23 03:13:53 GMT 2018
193[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.15.3-sda6 root=/dev/sda6 ro
194[ 0.000000] [Firmware Bug]: TSC_DEADLINE disabled due to Errata;
195 please update microcode to version: 0x22 (or later)
196[ 0.482712] microcode: sig=0x306c3, pf=0x2, revision=0x19
197[ 0.482937] microcode: Microcode Update Driver: v2.2.
[3d0e2ff]198[12624.259297] microcode: updated to revision 0x24, date = 2018-01-21</literal></screen>
[3ae81e1]199
200 <para>If the microcode was not updated, there is no new microcode for
201 this system's processor. If it did get updated, you can now proceed to <xref
[f3429309]202 linkend='early-microcode'/>.</para>
[3ae81e1]203
204 </sect3>
205
206 <sect3 id="and-microcode">
207 <title>AMD Microcode for the CPU</title>
208
209 <para>Begin by downloading a container of firmware for your CPU family
210 from <ulink
[a29486e4]211 url='&sources-anduin-http;/linux-firmware/amd-ucode/'/>.
[3ae81e1]212 The family is always specified in hex. Families 10h to 14h (16 to 20)
213 are in microcode_amd.bin. Families 15h and 16h have their own containers.
214 Create the required directory and put the firmware you downloaded into
215 it as the <systemitem class="username">root</systemitem> user:</para>
216
217<screen><userinput>mkdir -pv /lib/firmware/amd-ucode
218cp -v microcode_amd* /lib/firmware/amd-ucode</userinput></screen>
219
[32bc8e4c]220 <para>When you configure the kernel, use the following options
221 to load AMD microcode:</para>
[0576c595]222
223<screen><literal>General Setup ---&gt;
224 [y] Initial RAM filesystem and RAM disk (initramfs/initrd) support [CONFIG_BLK_DEV_INITRD]
225Processor type and features ---&gt;
226 [y] CPU microcode loading support [CONFIG_MICROCODE]
227 [y] AMD microcode loading support [CONFIG_MICROCODE_AMD]</literal></screen>
228
229 <para>After you have successfully booted the new system, force late loading by
230 using the command:</para>
231
232<screen><userinput>echo 1 > /sys/devices/system/cpu/microcode/reload</userinput></screen>
[3ae81e1]233
[0576c595]234 <para>Then use the following command to see if anything was loaded:</para>
[3ae81e1]235
[0576c595]236<screen><userinput>dmesg | grep -e 'microcode' -e 'Linux version' -e 'Command line'</userinput></screen>
237 <para>This example from an old Athlon(tm) II X2 shows it has been updated.
238 For the moment, all CPUs are still reported in the microcode details on AMD
239 machines:</para>
[3ae81e1]240
[c6d338e]241<screen><literal>[ 0.000000] Linux version 4.15.3 (ken@testserver) (gcc version 7.3.0 (GCC))
242 #1 SMP Sun Feb 18 02:08:12 GMT 2018
243[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.15.3-sda5 root=/dev/sda5 ro
244[ 0.307619] microcode: CPU0: patch_level=0x010000b6
245[ 0.307671] microcode: CPU1: patch_level=0x010000b6
246[ 0.307743] microcode: Microcode Update Driver: v2.2.
247[ 187.928891] microcode: CPU0: new patch_level=0x010000c8
248[ 187.928899] microcode: CPU1: new patch_level=0x010000c8</literal></screen>
[3ae81e1]249
250 <para>If the microcode was not updated, there is no new microcode for
251 this system's processor. If it did get updated, you can now proceed to <xref
[f3429309]252 linkend='early-microcode'/>.</para>
[3ae81e1]253
254 </sect3>
255
256 <sect3 id="early-microcode">
257 <title>Early loading of microcode</title>
258
259 <para>If you have established that updated microcode is available for
260 your system, it is time to prepare it for early loading. This requires
[0576c595]261 an additional package, <xref linkend='cpio'/> and the creation of an
262 initrd which will need to be added to grub.cfg.</para>
[3ae81e1]263
264 <para>It does not matter where you prepare the initrd, and once it is
265 working you can apply the same initrd to later LFS systems or newer
266 kernels on this same machine, at least until any newer microcode is
[f3429309]267 released. Use the following commands:</para>
[3ae81e1]268
269<screen><userinput>mkdir -p initrd/kernel/x86/microcode
270cd initrd</userinput></screen>
271
272 <para>For an AMD machine, use the following command (replace
273 &lt;MYCONTAINER&gt; with the name of the container for your CPU's
274 family):</para>
275
[af8a78d]276<screen><userinput>cp -v /lib/firmware/amd-ucode/&lt;MYCONTAINER&gt; kernel/x86/microcode/AuthenticAMD.bin</userinput></screen>
[3ae81e1]277
278 <para>Or for an Intel machine copy the appropriate blob using this command:</para>
279
280<screen><userinput>cp -v /lib/firmware/intel-ucode/&lt;XX-YY-ZZ&gt; kernel/x86/microcode/GenuineIntel.bin</userinput></screen>
281
282 <para>Now prepare the initrd:</para>
283
284<screen><userinput>find . | cpio -o -H newc &gt; /boot/microcode.img</userinput></screen>
285
[0576c595]286 <para>You now need to add a new entry to /boot/grub/grub.cfg and
[3ae81e1]287 here you should add a new line after the linux line within the stanza.
288 If /boot is a separate mountpoint: </para>
289
290<screen><userinput>initrd /microcode.img</userinput></screen>
291
292 <para>or this if it is not:</para>
293
294<screen><userinput>initrd /boot/microcode.img</userinput></screen>
295
[a7c5f47]296 <para>If you are already booting with an initrd (see <xref
297 linkend="initramfs"/>) you must specify the microcode initrd first, using
298 a line such as <userinput>initrd /microcode.img
299 /other-initrd.img</userinput> (adapt that as above if /boot is not a
300 separate mountpoint).</para>
301
[0576c595]302 <para>You can now reboot with the added initrd, and then use the same
303 command to check that the early load worked.</para>
[3ae81e1]304
[0576c595]305<screen><userinput>dmesg | grep -e 'microcode' -e 'Linux version' -e 'Command line'</userinput></screen>
306
307 <para>The places and times where early loading happens are very different
[f2d5c26a]308 in AMD and Intel machines. First, an Intel example from an updated
[0576c595]309 kernel, showing that the first notification comes before the kernel version
310 is mentioned:</para>
311
[3d0e2ff]312<screen><literal>[ 0.000000] microcode: microcode updated early to revision 0x24, date = 2018-01-21
[1c1bdba]313[ 0.000000] Linux version 4.15.3 (ken@plexi) (gcc version 7.3.0 (GCC))
314 #3 SMP PREEMPT Fri Feb 23 05:06:50 GMT 2018
315[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.15.3-sda6 root=/dev/sda6 ro
[3d0e2ff]316[ 0.484409] microcode: sig=0x306c3, pf=0x2, revision=0x24
317[ 0.484575] microcode: Microcode Update Driver: v2.2.</literal></screen>
[0576c595]318
[c6d338e]319 <para>An AMD example:</para>
[0576c595]320
[c6d338e]321<screen><literal>[ 0.000000] Linux version 4.15.3 (ken@testserver) (gcc version 7.3.0 (GCC))
322 #2 SMP Sun Feb 18 02:32:03 GMT 2018
323[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.15.3-sda5 root=/dev/sda5 ro
324[ 0.307619] microcode: microcode updated early to new patch_level=0x010000c8
325[ 0.307678] microcode: CPU0: patch_level=0x010000c8
326[ 0.307723] microcode: CPU1: patch_level=0x010000c8
327[ 0.307795] microcode: Microcode Update Driver: v2.2.</literal></screen>
[3ae81e1]328
329 </sect3>
330
331 </sect2>
332
[1cc5345]333 <sect2 id="video-firmware">
334 <title>Firmware for Video Cards</title>
335
336 <sect3 id="ati-video-firmware">
[3ae81e1]337 <title>Firmware for ATI video chips (R600 and later)</title>
[f3429309]338
[3ae81e1]339 <para>These instructions do NOT apply to old radeons before the R600
340 family. For those, the firmware is in the kernel's <filename
341 class='directory'>/lib/firmware/</filename> directory. Nor do they apply if
342 you intend to avoid a graphical setup such as Xorg and are content to use
343 the default 80x25 display rather than a framebuffer. </para>
344
345 <para> Early radeon devices only needed a single 2K blob of firmware.
346 Recent devices need several different blobs, and some of them are much
347 bigger. The total size of the radeon firmware directory is over 500K &mdash; on a
348 large modern system you can probably spare the space, but it is still
349 redundant to install all the unused files each time you build a system.</para>
350
351 <para>A better approach is to install <xref linkend='pciutils'/> and then
352 use <userinput>lspci</userinput> to identify which VGA controller is
353 installed.</para>
354
355 <para>With that information, check the RadeonFeature page of the Xorg wiki
356 for <ulink url="http://wiki.x.org/wiki/RadeonFeature/#index5h2">Decoder
357 ring for engineering vs marketing names</ulink> to identify the family (you
358 may need to know this for the Xorg driver in BLFS &mdash; Southern Islands and
359 Sea Islands use the radeonsi driver) and the specific model.</para>
360
[f3429309]361 <para>Now that you know which controller you are using, consult the
[3ae81e1]362 <ulink url="https://wiki.gentoo.org/wiki/Radeon#Firmware">Radeon</ulink> page
363 of the Gentoo wiki which has a table listing the required firmware blobs
364 for the various chipsets. Note that Southern Islands and Sea Islands chips
365 use different firmware for kernel 3.17 and later compared to earlier
366 kernels. Identify and download the required blobs then install them:</para>
367
368<screen><userinput>mkdir -pv /lib/firmware/radeon
369cp -v &lt;YOUR_BLOBS&gt; /lib/firmware/radeon</userinput></screen>
370
371 <para>There are actually two ways of installing this firmware. BLFS, in the
372 'Kernel Configuration for additional firmware' section part of the <xref
373 linkend="xorg-ati-driver"/> section gives an example of compiling the
374 firmware into the kernel - that is slightly faster to load, but uses more
375 kernel memory. Here we will use the alternative method of making the radeon
376 driver a module. In your kernel config set the following: </para>
377
378<screen><literal>Device Drivers ---&gt;
379 Graphics support ---&gt;
380 Direct Rendering Manager ---&gt;
[1cc5345]381 &lt;*&gt; Direct Rendering Manager (XFree86 ... support) [CONFIG_DRM]
382 &lt;m&gt; ATI Radeon [CONFIG_DRM_RADEON]</literal></screen>
[3ae81e1]383
384 <para>Loading several large blobs from /lib/firmware takes a noticeable
385 time, during which the screen will be blank. If you do not enable the
386 penguin framebuffer logo, or change the console size by using a bigger
387 font, that probably does not matter. If desired, you can slightly
388 reduce the time if you follow the alternate method of specifying 'y' for
389 CONFIG_DRM_RADEON covered in BLFS at the link above &mdash; you must specify each
390 needed radeon blob if you do that.</para>
391
[1cc5345]392 </sect3>
393
394 <sect3 id="nvidia-video-firmware">
395 <title>Firmware for Nvidia video chips</title>
396
397 <para>Some Nvidia graphics chips need firmware updates to take advantage
398 of all the card's capability. These are generally the GeForce 8, 9, 9300,
399 and 200-900 series chips. For more exact information, see <ulink
400 url="https://nouveau.freedesktop.org/wiki/VideoAcceleration/#firmware">
401 https://nouveau.freedesktop.org/wiki/VideoAcceleration/#firmware</ulink>.</para>
402
403 <para>First, the kernel Nvidia driver must be activated:</para>
404
405<screen><literal>Device Drivers ---&gt;
406 Graphics support ---&gt;
407 Direct Rendering Manager ---&gt;
408 &lt;*&gt; Direct Rendering Manager (XFree86 ... support) [CONFIG_DRM]
409 &lt;*/m&gt; Nouveau (NVIDIA) cards [CONFIG_DRM_NOUVEAU]</literal></screen>
410
411 <para>The steps to install the Nvidia firmware are:</para>
412
413<screen><userinput>wget https://raw.github.com/imirkin/re-vp2/master/extract_firmware.py
414wget http://us.download.nvidia.com/XFree86/Linux-x86/325.15/NVIDIA-Linux-x86-325.15.run
415sh NVIDIA-Linux-x86-325.15.run --extract-only
416python extract_firmware.py
417mkdir -p /lib/firmware/nouveau
418cp -d nv* vuc-* /lib/firmware/nouveau/</userinput></screen>
419
420 </sect3>
[3ae81e1]421 </sect2>
422
423 <sect2 id="nic-firmware">
424 <title>Firmware for Network Interfaces</title>
425
426 <para>The kernel likes to load firmware for some network drivers,
427 particularly those from Realtek (the /lib/linux-firmware/rtl_nic/) directory,
428 but they generally appear to work without it. Therefore, you can boot the
429 kernel, check dmesg for messages about this missing firmware, and if
430 necessary download the firmware and put it in the specified directory in
431 /lib/firmware so that it will be found on subsequent boots. Note that with
432 current kernels this works whether or not the driver is compiled in or
433 built as a module, there is no need to build this firmware into the kernel.
434 Here is an example where the R8169 driver has been compiled in but the
435 firmware was not made available. Once the firmware had been provided, there
436 was no mention of it on later boots. </para>
437
438<screen><literal>dmesg | grep firmware | grep r8169
439[ 7.018028] r8169 0000:01:00.0: Direct firmware load for rtl_nic/rtl8168g-2.fw failed with error -2
440[ 7.018036] r8169 0000:01:00.0 eth0: unable to load firmware patch rtl_nic/rtl8168g-2.fw (-2)</literal></screen>
441
442 </sect2>
443
444 <sect2 id="other-firmware">
445 <title>Firmware for Other Devices</title>
446
447 <para> Identifying the correct firmware will typically require you to
448 install <xref linkend='pciutils'/>, and then use
449 <userinput>lspci</userinput> to identify the device. You should then search
450 online to check which module it uses, which firmware, and where to obtain
451 the firmware &mdash; not all of it is in linux-firmware.</para>
[f3429309]452
[3ae81e1]453 <para>If possible, you should begin by using a wired connection when you
454 first boot your LFS system. To use a wireless connection you will need to
455 use a network tools such as <xref linkend='wireless_tools'/> and <xref
456 linkend='wpa_supplicant'/>.</para>
[f3429309]457
[3ae81e1]458 <para>Firmware may also be needed for other devices such as some SCSI
459 controllers, bluetooth adaptors, or TV recorders. The same principles
460 apply.</para>
461
462 </sect2>
463
464</sect1>
Note: See TracBrowser for help on using the repository browser.