# SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2023-05-21 14:43-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. type: YAML Front Matter: description #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:1 #, no-wrap msgid "This chapter covers how to configure the FreeBSD Kernel. When to build a custom kernel, how to take a hardware inventory, how to customize a kernel configuration file, etc" msgstr "" #. type: YAML Front Matter: part #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:1 #, no-wrap msgid "Part II. Common Tasks" msgstr "" #. type: YAML Front Matter: title #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:1 #, no-wrap msgid "Chapter 9. Configuring the FreeBSD Kernel" msgstr "" #. type: Title = #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:14 #, no-wrap msgid "Configuring the FreeBSD Kernel" msgstr "" #. type: Title == #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:52 #, no-wrap msgid "Synopsis" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:57 msgid "" "The kernel is the core of the FreeBSD operating system. It is responsible " "for managing memory, enforcing security controls, networking, disk access, " "and much more. While much of FreeBSD is dynamically configurable, it is " "still occasionally necessary to configure and compile a custom kernel." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:59 msgid "After reading this chapter, you will know:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:61 msgid "When to build a custom kernel." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:62 msgid "How to take a hardware inventory." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:63 msgid "How to customize a kernel configuration file." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:64 msgid "" "How to use the kernel configuration file to create and build a new kernel." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:65 msgid "How to install the new kernel." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:66 msgid "How to troubleshoot if things go wrong." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:70 msgid "" "All of the commands listed in the examples in this chapter should be " "executed as `root`." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:73 #, no-wrap msgid "Why Build a Custom Kernel?" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:77 msgid "" "Traditionally, FreeBSD used a monolithic kernel. The kernel was one large " "program, supported a fixed list of devices, and in order to change the " "kernel's behavior, one had to compile and then reboot into a new kernel." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:81 msgid "" "Today, most of the functionality in the FreeBSD kernel is contained in " "modules which can be dynamically loaded and unloaded from the kernel as " "necessary. This allows the running kernel to adapt immediately to new " "hardware and for new functionality to be brought into the kernel. This is " "known as a modular kernel." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:85 msgid "" "Occasionally, it is still necessary to perform static kernel configuration. " "Sometimes the needed functionality is so tied to the kernel that it can not " "be made dynamically loadable. Some security environments prevent the " "loading and unloading of kernel modules and require that only needed " "functionality is statically compiled into the kernel." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:89 msgid "" "Building a custom kernel is often a rite of passage for advanced BSD users. " "This process, while time consuming, can provide benefits to the FreeBSD " "system. Unlike the `GENERIC` kernel, which must support a wide range of " "hardware, a custom kernel can be stripped down to only provide support for " "that computer's hardware." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:91 msgid "This has a number of benefits, such as:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:93 msgid "" "Faster boot time. Since the kernel will only probe the hardware on the " "system, the time it takes the system to boot can decrease." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:94 msgid "" "Lower memory usage. A custom kernel often uses less memory than the " "`GENERIC` kernel by omitting unused features and device drivers. This is " "important because the kernel code remains resident in physical memory at all " "times, preventing that memory from being used by applications. For this " "reason, a custom kernel is useful on a system with a small amount of RAM." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:95 msgid "" "Additional hardware support. A custom kernel can add support for devices " "which are not present in the `GENERIC` kernel." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:100 msgid "" "Before building a custom kernel, consider the reason for doing so. If there " "is a need for specific hardware support, it may already exist as a module." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:104 msgid "" "Kernel modules exist in [.filename]#/boot/kernel# and may be dynamically " "loaded into the running kernel using man:kldload[8]. Most kernel drivers " "have a loadable module and manual page." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:106 msgid "" "For example, the man:ath[4] wireless network driver has the following " "information in its manual page:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:111 #, no-wrap msgid "" "Alternatively, to load the driver as a module at boot time, place the\n" "following line in man:loader.conf[5]:\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:114 #, no-wrap msgid "" " if_ath_load=\"YES\"\n" " if_ath_pci_load=\"YES\"\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:117 msgid "" "Adding `if_ath_load=\"YES\"` and `if_ath_pci_load=\"YES\"` to [.filename]#/" "boot/loader.conf# will load these modules dynamically at boot time." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:120 msgid "" "In some cases, there is no associated module in [.filename]#/boot/kernel#. " "This is mostly true for certain subsystems." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:122 #, no-wrap msgid "Finding the System Hardware" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:127 msgid "" "Before editing the kernel configuration file, it is recommended to perform " "an inventory of the machine's hardware. On a dual-boot system, the " "inventory can be created from the other operating system. For example, " "Microsoft(R)'s Device Manager contains information about installed devices." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:131 msgid "" "If FreeBSD is the only installed operating system, use man:dmesg[8] to " "determine the hardware that was found and listed during the boot probe. " "Most device drivers on FreeBSD have a manual page which lists the hardware " "supported by that driver. For example, the following lines indicate that " "the man:psm[4] driver found a mouse:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:138 #, no-wrap msgid "" "psm0: irq 12 on atkbdc0\n" "psm0: [GIANT-LOCKED]\n" "psm0: [ITHREAD]\n" "psm0: model Generic PS/2 mouse, device ID 0\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:141 msgid "" "Since this hardware exists, this driver should not be removed from a custom " "kernel configuration file." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:143 msgid "" "If the output of `dmesg` does not display the results of the boot probe " "output, instead read the contents of [.filename]#/var/run/dmesg.boot#." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:146 msgid "" "Another tool for finding hardware is man:pciconf[8], which provides more " "verbose output. For example:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:150 #, no-wrap msgid "% pciconf -lv\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:153 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:174 msgid "The output should be similar to the following:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:161 #, no-wrap msgid "" "ath0@pci0:3:0:0: class=0x020000 card=0x058a1014 chip=0x1014168c rev=0x01 hdr=0x00\n" " vendor = 'Atheros Communications Inc.'\n" " device = 'AR5212 Atheros AR5212 802.11abg wireless'\n" " class = network\n" " subclass = ethernet\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:164 msgid "" "This output shows that the `ath` driver located a wireless Ethernet device." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:167 msgid "" "The `-k` flag of man:man[1] can be used to provide useful information. For " "example, it can be used to display a list of manual pages which contain a " "particular device brand or name:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:171 #, no-wrap msgid "# man -k Atheros\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:179 #, no-wrap msgid "" "ath(4) - Atheros IEEE 802.11 wireless network driver\n" "ath_hal(4) - Atheros Hardware Access Layer (HAL)\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:182 msgid "" "Once the hardware inventory list is created, refer to it to ensure that " "drivers for installed hardware are not removed as the custom kernel " "configuration is edited." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:184 #, no-wrap msgid "The Configuration File" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:187 msgid "" "In order to create a custom kernel configuration file and build a custom " "kernel, the full FreeBSD source tree must first be installed." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:190 msgid "" "If [.filename]#/usr/src/# does not exist or it is empty, source has not been " "installed. Source can be installed with Git using the instructions in " "crossref:mirrors[git,“Using Git”]." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:195 msgid "" "Once source is installed, review the contents of [.filename]#/usr/src/sys#. " "This directory contains a number of subdirectories, including those which " "represent the FreeBSD supported architectures. Everything inside a " "particular architecture's directory deals with that architecture only and " "the rest of the code is machine independent code common to all platforms. " "Each supported architecture has a [.filename]#conf# subdirectory which " "contains the [.filename]#GENERIC# kernel configuration file for that " "architecture." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:201 msgid "" "Do not make edits to [.filename]#GENERIC#. Instead, copy the file to a " "different name and make edits to the copy. The convention is to use a name " "with all capital letters. When maintaining multiple FreeBSD machines with " "different hardware, it is a good idea to name it after the machine's " "hostname. This example creates a copy, named [.filename]#MYKERNEL#, of the " "[.filename]#GENERIC# configuration file for the `amd64` architecture:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:206 #, no-wrap msgid "" "# cd /usr/src/sys/amd64/conf\n" "# cp GENERIC MYKERNEL\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:209 msgid "" "The [.filename]#MYKERNEL# file can now be customized with any text editor." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:216 msgid "" "The format of the kernel configuration file is simple. Each line contains a " "keyword that represents a device or subsystem, an argument, and a brief " "description. Any text after a `+#+` is considered a comment and ignored. " "To remove kernel support for a device or subsystem, put a `+#+` at the " "beginning of the line representing that device or subsystem. Do not add or " "remove a `+#+` for any line that you do not understand. More information " "about the configuration kernel file can be found in man:config[5]." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:222 msgid "" "It is easy to remove support for a device or option and end up with a broken " "kernel. For example, if the man:ata[4] driver is removed from the kernel " "configuration file, a system using `ATA` disk drivers may not boot. When in " "doubt, just leave support in the kernel." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:226 msgid "" "In addition to the brief descriptions provided in this file, additional " "descriptions are contained in [.filename]#NOTES#, which can be found in the " "same directory as [.filename]#GENERIC# for that architecture. For " "architecture independent options, refer to [.filename]#/usr/src/sys/conf/" "NOTES#." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:231 msgid "" "When finished customizing the kernel configuration file, save a backup copy " "to a location outside of [.filename]#/usr/src#. Alternately, keep the " "kernel configuration file elsewhere and create a symbolic link to the file:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:238 #, no-wrap msgid "" "# cd /usr/src/sys/amd64/conf\n" "# mkdir /root/kernels\n" "# cp GENERIC /root/kernels/MYKERNEL\n" "# ln -s /root/kernels/MYKERNEL\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:245 msgid "" "An `include` directive is available for use in configuration files. This " "allows another configuration file to be included in the current one, making " "it easy to maintain small changes relative to an existing file. If only a " "small number of additional options or drivers are required, this allows a " "delta to be maintained with respect to [.filename]#GENERIC#, as seen in this " "example:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:250 #, no-wrap msgid "" "include GENERIC\n" "ident MYKERNEL\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:255 #, no-wrap msgid "" "options IPFIREWALL\n" "options DUMMYNET\n" "options IPFIREWALL_DEFAULT_TO_ACCEPT\n" "options IPDIVERT\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:259 msgid "" "Using this method, the local configuration file expresses local differences " "from a [.filename]#GENERIC# kernel. As upgrades are performed, new features " "added to [.filename]#GENERIC# will also be added to the local kernel unless " "they are specifically prevented using `nooptions` or `nodevice`." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:261 msgid "" "A comprehensive list of configuration directives and their descriptions may " "be found in man:config[5]." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:263 #, no-wrap msgid "Building and Installing a Custom Kernel" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:266 msgid "" "Once the edits to the custom configuration file have been saved, the source " "code for the kernel can be compiled using the following steps:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:268 msgid "Move to [.filename]#/usr/src#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:272 #, no-wrap msgid "# cd /usr/src\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:275 msgid "" "Compile the new kernel by specifying the name of the custom kernel " "configuration file:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:279 #, no-wrap msgid "# make buildkernel KERNCONF=MYKERNEL\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:282 msgid "" "Install the new kernel associated with the specified kernel configuration " "file. This command will copy the new kernel to [.filename]#/boot/kernel/" "kernel# and save the old kernel to [.filename]#/boot/kernel.old/kernel#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:286 #, no-wrap msgid "# make installkernel KERNCONF=MYKERNEL\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:289 msgid "" "Shutdown the system and reboot into the new kernel. If something goes wrong, " "refer to <>." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:295 msgid "" "By default, when a custom kernel is compiled, all kernel modules are " "rebuilt. To update a kernel faster or to build only custom modules, edit [." "filename]#/etc/make.conf# before starting to build the kernel. For example, " "this variable specifies the list of modules to build instead of using the " "default of building all modules:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:299 #, no-wrap msgid "MODULES_OVERRIDE=\tlinux ipfw\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:302 msgid "" "Alternately, this variable lists which modules to exclude from the build " "process:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:306 #, no-wrap msgid "WITHOUT_MODULES=\tlinux acpi sound\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:309 msgid "" "This variable instructs the build to skip kernel modules and compile only " "the kernel itself:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:313 #, no-wrap msgid "NO_MODULES=\tyes\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:320 msgid "" "The Ports Framework includes drivers and other modules that depend on kernel " "interfaces, such as package:graphics/drm-kmod[] or package:emulators/" "virtualbox-ose-kmod[]. With the `PORTS_MODULES` variable every time the " "kernel is built, the ports containing kernel modules are re-built against " "the updated sources. This ensures the kernel module stays in-sync with the " "kernel itself. The kernel and ports trees should be updated together for " "maximum compatibility. `PORTS_MODULES` can be added to [.filename]#/etc/" "make.conf# file to ensure all kernels you build rebuild this module." msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:324 #, no-wrap msgid "PORTS_MODULES=\tdrm-kmod virtualbox-ose-kmod\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:328 msgid "" "Additional variables are available. Refer to man:make.conf[5] for details." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:331 #, no-wrap msgid "If Something Goes Wrong" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:334 msgid "" "There are four categories of trouble that can occur when building a custom " "kernel:" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:335 #, no-wrap msgid "`config` fails" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:338 msgid "" "If man:config[5] fails, it will print the line number that is incorrect." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:340 msgid "" "As an example, for the following message, make sure that line 32 is typed " "correctly by comparing it to [.filename]#GENERIC# or [.filename]#NOTES#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:344 #, no-wrap msgid "config: /usr/src/sys/amd64/conf/GENERIC:32: syntax error\n" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:346 #, no-wrap msgid "`make` fails" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:349 msgid "" "If man:make[1] fails, it is usually due to an error in the kernel " "configuration file which is not severe enough for `config` to catch." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:351 msgid "" "Review the configuration, and if the problem is not apparent, send an email " "to the {freebsd-questions} which contains the kernel configuration file." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:353 #, no-wrap msgid "The kernel does not boot" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:356 msgid "" "If the new kernel does not boot or fails to recognize devices, do not panic! " "Fortunately, FreeBSD has an excellent mechanism for recovering from " "incompatible kernels." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:361 msgid "" "Simply choose the kernel to boot from at the FreeBSD boot loader. This can " "be accessed when the system boot menu appears by selecting the \"Kernel:\" " "option, which initially displays \"Kernel: default/kernel\". Each time the " "option is selected, another choice appears, for example \"kernel.old\". " "When the desired kernel is listed, press return to boot." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:365 msgid "" "After booting with a good kernel, check over the configuration file and try " "to build it again. One helpful resource is [.filename]#/var/log/messages# " "which records the kernel messages from every successful boot. Also, man:" "dmesg[8] will print the kernel messages from the current boot." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:371 msgid "" "When troubleshooting a kernel make sure to keep a copy of a kernel that is " "known to work, such as [.filename]#GENERIC#. This is important because " "every time a new kernel is installed, [.filename]#kernel.old# is overwritten " "with the last installed kernel, which may or may not be bootable. As soon " "as possible, move the working kernel by renaming the directory containing " "the good kernel:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/kernelconfig/_index.adoc:376 #, no-wrap msgid "" "# mv /boot/kernel /boot/kernel.bad\n" "# mv /boot/kernel.good /boot/kernel\n" msgstr ""