kisscommunity

kisscommunity.bvnf.space site sources
Log | Files | Refs | Submodules | README

commit 5c9b806d0f115c8abc78348363be2aa05f6ffac4
parent a02f6b247ff3bd24cc66b9bd4dd91b6d1dc6e06c
Author: aabacchus <ben@bvnf.space>
Date:   Thu,  9 Jun 2022 01:33:26 +0100

kernel/config: convert

Diffstat:
Awiki/kernel/config/index.md | 163+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dwiki/kernel/config/index.txt | 169-------------------------------------------------------------------------------
2 files changed, 163 insertions(+), 169 deletions(-)

diff --git a/wiki/kernel/config/index.md b/wiki/kernel/config/index.md @@ -0,0 +1,163 @@ +KERNEL CONFIGURATION GUIDE +========================== + +Configuring the Linux kernel is arguably the hardest step in the installation +process. The kernel is humongous and figuring out what to enable in the +seemingly endless option list can be a daunting task. + +The most important factor for success is how well one knows their hardware. +Spend a little time doing some research prior to configuring the kernel. Knowing +what is inside one's system is of immense value in all contexts. + +The physical realm however, is only part of the equation. Configuration extends +to general features, file-systems, networking protocols, cryptography, security, +processor features and more. + +This Wiki page will document kernel options, their requirement level +(conditional, recommended or mandatory), a brief description and a rationale if +necessary. Information about pre-built hardware as a whole will not be covered. + + +## [%[0.0]] Index + +* [1.0](#1.0) Getting a config +* [2.0](#2.0) Modifying a config +* [3.0](#3.0) Busybox compatibility +* [4.0](#4.0) Never lose your .config ever again +* [5.0](#5.0) Removing the perl requirement + + +## [%[1.0]] Getting a config + +The first step in this process is creating a .config file in the Linux source +tree. It is essentially just a text file containing KEY=value pairs (along with +comments), each of which control something in the linux build process. + +An important subset of the options control "drivers"; sections of code that give +the kernel the capability to interact with filesystems, protocols and hardware +components. These options typically have three possible values: "n" to not +compile the driver, "y" to compile it into the kernel binary and "m" to compile +the driver as a module (.ko files stored in /usr/lib/modules). Modules can be +loaded/unloaded dynamically by the kernel as needed. + +A fairly generic and compatible base configuration for your architecture can be +created by running the following command. This handles a large portion of the +work required during the configuration stage. + + +------------------------------------------------------------------------------+ + | | + | $ make defconfig | + | | + +------------------------------------------------------------------------------+ + +There are countless flows of configuring the Linux kernel, and there are fun +things to try scattered all over the internet. Good luck! + + +## [%[2.0]] Modifying a config + +There are several ways to modify an existing config file that are more +convenient than editing each of them by hand, most of them very well +documented. They arrange all of the config options in neat menus and submenus +and provide descriptions for each of them, allowing the Linux kernel to be +comprehended by mere mortals. + + +------------------------------------------------------------------------------+ + | Terminal based configuration tools (requires ncurses) | + +------------------------------------------------------------------------------+ + | | + | $ make menuconfig | + | $ make nconfig | + | | + +------------------------------------------------------------------------------+ + | Graphical configuration tools (requires a working Xorg server and QT/GTK) | + +------------------------------------------------------------------------------+ + | | + | $ make xconfig # Requires qt5. | + | $ make gconfig # Requires gtk+3. | + | | + +------------------------------------------------------------------------------+ + +Another option you may find very useful to easily trim down general (default, +distro, etc.) configuration files is: + + +------------------------------------------------------------------------------+ + | | + | $ make localyesconfig | + | | + +------------------------------------------------------------------------------+ + +This modifies the current .config to only compile whatever drivers are loaded in +the host kernel's current state. Running this after connecting all the hardware +you will be using is a pretty quick way to come up with a pretty lean +configuration. + + +## [%[3.0]] Package compatibility + +Various parts of the Linux build system use non-standard options with core +utilities, this causes a build failure when using busybox. Thankfully, this non- +standard usage depends on unimportant and rarely used kernel features. + +When these options are disabled (is the case by default unless 'allyesconfig' is +used), the kernel builds just fine. + + +------------------------------------------------------------------------------+ + | | + | The following options are mandatory (when using busybox) (=n). | + | | + | CONFIG_IKHEADERS This option enables access to the in-kernel | + | headers that are generated during the build | + | process. These can be used to build eBPF tracing, | + | or similar programs. | + | | + +------------------------------------------------------------------------------+ + +Because gmp, mpc, and mpfr are bundled with our gcc instead of being built as +standalone packages, the headers are missing. This results in build failures +when building GCC Plugins. Either install gmp & mpc separately from gcc, or +disable `CONFIG_HAVE_GCC_PLUGINS` in the kernel config. + + +------------------------------------------------------------------------------+ + | | + | The following options are mandatory (when using busybox) (=n). | + | | + | CONFIG_HAVE_GCC_PLUGINS This option enables loadable modules that provide | + | plugins for GCC which are useful for runtime | + | instrumentation and static analysis. | + | | + +------------------------------------------------------------------------------+ + + +## [%[4.0]] Never lose your .config ever again + +The kernel can be configured to store its configuration file to later make it +accessible via /proc/config.gz. Storing the .config in the kernel ensures that +you will never lose your config so long as you have its kernel. + + +------------------------------------------------------------------------------+ + | | + | The following options are recommended (=y). | + | | + | CONFIG_IKCONFIG Store the .config in the kernel. | + | CONFIG_IKCONFIG_PROC Make the .config accessible as /proc/config.gz | + | | + +------------------------------------------------------------------------------+ + + +## [%[5.0]] Removing the perl requirement + +Perl is needed by the `build_OID_registry` script which will be executed during +the compilation process in most systems. This makes perl a mandatory dependency +to build the kernel. + +A patch can be applied which adds a POSIX shell implementation of the perl +script. This fully removes the perl requirement. + +@/[patches/kernel-no-perl.patch](/kernel/patches/kernel-no-perl.patch) (Written by $/[E5ten](https://github.com/E5ten)) + + +------------------------------------------------------------------------------+ + | | + | TIP: All links like this one are also available via 'kiss help'! | + | | + +------------------------------------------------------------------------------+ diff --git a/wiki/kernel/config/index.txt b/wiki/kernel/config/index.txt @@ -1,169 +0,0 @@ -KERNEL CONFIGURATION GUIDE -________________________________________________________________________________ - -Configuring the Linux kernel is arguably the hardest step in the installation -process. The kernel is humongous and figuring out what to enable in the -seemingly endless option list can be a daunting task. - -The most important factor for success is how well one knows their hardware. -Spend a little time doing some research prior to configuring the kernel. Knowing -what is inside one's system is of immense value in all contexts. - -The physical realm however, is only part of the equation. Configuration extends -to general features, file-systems, networking protocols, cryptography, security, -processor features and more. - -This Wiki page will document kernel options, their requirement level -(conditional, recommended or mandatory), a brief description and a rationale if -necessary. Information about pre-built hardware as a whole will not be covered. - - -[0.0] Index -________________________________________________________________________________ - -- Getting a config [1.0] -- Modifying a config [2.0] -- Busybox compatibility [3.0] -- Never lose your .config ever again [4.0] -- Removing the perl requirement [5.0] - - -[1.0] Getting a config -________________________________________________________________________________ - -The first step in this process is creating a .config file in the Linux source -tree. It is essentially just a text file containing KEY=value pairs (along with -comments), each of which control something in the linux build process. - -An important subset of the options control "drivers"; sections of code that give -the kernel the capability to interact with filesystems, protocols and hardware -components. These options typically have three possible values: "n" to not -compile the driver, "y" to compile it into the kernel binary and "m" to compile -the driver as a module (.ko files stored in /usr/lib/modules). Modules can be -loaded/unloaded dynamically by the kernel as needed. - -A fairly generic and compatible base configuration for your architecture can be -created by running the following command. This handles a large portion of the -work required during the configuration stage. - -+------------------------------------------------------------------------------+ -| | -| $ make defconfig | -| | -+------------------------------------------------------------------------------+ - -There are countless flows of configuring the Linux kernel, and there are fun -things to try scattered all over the internet. Good luck! - - -[2.0] Modifying a config -________________________________________________________________________________ - -There are several ways to modify an existing config file that are more -convenient than editing each of them by hand, most of them very well -documented. They arrange all of the config options in neat menus and submenus -and provide descriptions for each of them, allowing the Linux kernel to be -comprehended by mere mortals. - -+------------------------------------------------------------------------------+ -| Terminal based configuration tools (requires ncurses) | -+------------------------------------------------------------------------------+ -| | -| $ make menuconfig | -| $ make nconfig | -| | -+------------------------------------------------------------------------------+ -| Graphical configuration tools (requires a working Xorg server and QT/GTK) | -+------------------------------------------------------------------------------+ -| | -| $ make xconfig # Requires qt5. | -| $ make gconfig # Requires gtk+3. | -| | -+------------------------------------------------------------------------------+ - -Another option you may find very useful to easily trim down general (default, -distro, etc.) configuration files is: - -+------------------------------------------------------------------------------+ -| | -| $ make localyesconfig | -| | -+------------------------------------------------------------------------------+ - -This modifies the current .config to only compile whatever drivers are loaded in -the host kernel's current state. Running this after connecting all the hardware -you will be using is a pretty quick way to come up with a pretty lean -configuration. - - -[3.0] Package compatibility -________________________________________________________________________________ - -Various parts of the Linux build system use non-standard options with core -utilities, this causes a build failure when using busybox. Thankfully, this non- -standard usage depends on unimportant and rarely used kernel features. - -When these options are disabled (is the case by default unless 'allyesconfig' is -used), the kernel builds just fine. - -+------------------------------------------------------------------------------+ -| | -| The following options are mandatory (when using busybox) (=n). | -| | -| CONFIG_IKHEADERS This option enables access to the in-kernel | -| headers that are generated during the build | -| process. These can be used to build eBPF tracing, | -| or similar programs. | -| | -+------------------------------------------------------------------------------+ - -Because gmp, mpc, and mpfr are bundled with our gcc instead of being built as -standalone packages, the headers are missing. This results in build failures -when building GCC Plugins. Either install gmp & mpc separately from gcc, or -disable CONFIG_HAVE_GCC_PLUGINS in the kernel config. - -+------------------------------------------------------------------------------+ -| | -| The following options are mandatory (when using busybox) (=n). | -| | -| CONFIG_HAVE_GCC_PLUGINS This option enables loadable modules that provide | -| plugins for GCC which are useful for runtime | -| instrumentation and static analysis. | -| | -+------------------------------------------------------------------------------+ - - -[4.0] Never lose your .config ever again -________________________________________________________________________________ - -The kernel can be configured to store its configuration file to later make it -accessible via /proc/config.gz. Storing the .config in the kernel ensures that -you will never lose your config so long as you have its kernel. - -+------------------------------------------------------------------------------+ -| | -| The following options are recommended (=y). | -| | -| CONFIG_IKCONFIG Store the .config in the kernel. | -| CONFIG_IKCONFIG_PROC Make the .config accessible as /proc/config.gz | -| | -+------------------------------------------------------------------------------+ - - -[5.0] Removing the perl requirement -________________________________________________________________________________ - -Perl is needed by the build_OID_registry script which will be executed during -the compilation process in most systems. This makes perl a mandatory dependency -to build the kernel. - -A patch can be applied which adds a POSIX shell implementation of the perl -script. This fully removes the perl requirement. - -@/patches/kernel-no-perl.patch (Written by $/E5ten) - -+------------------------------------------------------------------------------+ -| | -| TIP: All links like this one are also available via 'kiss help'! | -| | -+------------------------------------------------------------------------------+