- Saved searches
- Use saved searches to filter your results more quickly
- License
- krivenko/kernel-build.sh
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
- Building Linux Kernel
- Step 1: Download the Source Code
- Step 2: Extract the Source Code
- Step 3: Install Required Packages
- Step 4: Configure Kernel
- Step 5: Build the Kernel
- Step 6: Update the Bootloader (Optional)
- Step 7: Reboot and Verify Kernel Version
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Easy-to-use Bash script to build/install Linux kernel on Gentoo-based systems
License
krivenko/kernel-build.sh
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Easy-to-use Bash script to build/install Linux kernel on Gentoo-based systems
Copyright (C) 2017 I. Krivenko
kernel-build.sh saveconfig kernel-build.sh loadconfig [kernel_version] kernel-build.sh configure kernel-build.sh build kernel-build.sh install kernel-build.sh oldconfig kernel-build.sh minorupdate
Configuration variables are contained in the header of the script.
- Copy kernel configuration file between $/linux ( /usr/src/linux by default) and $ ( /etc/kernel by default). loadconfig called without arguments tries to guess the best configuration file to load.
- Call make menuconfig / make xconfig depending on $DISPLAY environment variable being set ( configure command).
- Call make oldconfig ( oldconfig command).
- Build kernel and modules ( build command).
- Install kernel/modules, run emerge -av1 @module-rebuild and update EFI boot record ( install command). EFI manipulation requires sys-boot/efibootmgr to be installed.
- Run a sequence of steps to upgrade from kernel version x.y.z1 to x.y.z2 ( minorupdate command).
Warning: initrd is not supported.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the «Software»), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED «AS IS», WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
About
Easy-to-use Bash script to build/install Linux kernel on Gentoo-based systems
How to Build Linux Kernel From Scratch
The Linux Kernel is the foundation of all the Linux distributions. The kernel is responsible for communication between hardware and software and the allocation of available resources.
All Linux distributions are based on a predefined kernel. But, if you want to disable certain options and drivers or try experimental patches, you need to compile your own Linux kernel.
In this step-by-step guide, you will learn how to build and compile a Linux kernel from scratch.
- A system running Linux
- Access to the terminal/command line
- A user account with sudo/root privileges
- 12GB of available space on the hard drive
Building Linux Kernel
The process of building a Linux kernel can be performed in seven easy steps. However, the procedure may require a significant amount of time to complete, depending on the system speed.
Follow the steps below to build the latest Linux kernel.
Note: If the latest kernel version on the official website does not match the one mentioned in the steps below, replace the version number in the commands with the current latest version.
Step 1: Download the Source Code
1. Visit the official kernel website and download the latest kernel version. The downloaded file contains a compressed source code.
2. Open the terminal and use the wget command to download the Linux kernel source code:
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.0.7.tar.xz
The output shows the “saved” message when the download completes.
Note: Learn what to do when you get wget: command not found error.
Step 2: Extract the Source Code
When the file is ready, run the tar command to extract the source code:
The output displays the extracted kernel source code:
Step 3: Install Required Packages
Install additional packages before building a kernel. To do so, run this command:
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
The command we used above installs the following packages:
Package | Package description |
git | Tracks and makes a record of all changes during development in the source code. It also allows reverting the changes. |
fakeroot | Creates the fake root environment. |
build-essential | Installs development tools such as C, C++, gcc, and g++. |
ncurses-dev | Provides API for the text-based terminals. |
xz-utils | Provides fast file compression and decompression. |
libssl-dev | Supports SSL and TSL that encrypt data and make the internet connection secure. |
bc (Basic Calculator) | Supports the interactive execution of statements. |
flex (Fast Lexical Analyzer Generator) | Generates lexical analyzers that convert characters into tokens. |
libelf-dev | Issues a shared library for managing ELF files (executable files, core dumps and object code) |
bison | Converts grammar description to a C program. |
Step 4: Configure Kernel
The Linux kernel source code comes with the default configuration. However, you can adjust it to your needs. To do so, follow the steps below:
1. Navigate to the linux-6.0.7 directory using the cd command:
2. Copy the existing configuration file using the cp command:
cp -v /boot/config-$(uname -r) .config
3. To make changes to the configuration file, run the make command:
The command launches several scripts that open the configuration menu:
4. The configuration menu includes options such as firmware, file system, network, and memory settings. Use the arrows to make a selection or choose Help to learn more about the options. When you finish making the changes, select Save, and then exit the menu.
Note: Changing settings for some options can lead to a non-functional kernel. If you are unsure what to change, leave the default settings.
Step 5: Build the Kernel
1. Start building the kernel by running the following command:
The process of building and compiling the Linux kernel takes some time to complete.
The terminal lists all Linux kernel components: memory management, hardware device drivers, filesystem drivers, network drivers, and process management.
If you are compiling the kernel on Ubuntu, you may receive the following error that interrupts the building process:
No rule to make target 'debian/canonical-certs.pem
Disable the conflicting security certificates by executing the two commands below:
scripts/config --disable SYSTEM_TRUSTED_KEYS
scripts/config --disable SYSTEM_REVOCATION_KEYS
The commands return no output. Start the building process again with make , and press Enter repeatedly to confirm the default options for the generation of new certificates.
2. Install the required modules with this command:
sudo make modules_install
3. Finally, install the kernel by typing:
The output shows done when finished:
Step 6: Update the Bootloader (Optional)
The GRUB bootloader is the first program that runs when the system powers on.
The make install command performs this process automatically, but you can also do it manually.
1. Update the initramfs to the installed kernel version:
sudo update-initramfs -c -k 6.0.7
2. Update the GRUB bootloader with this command:
The terminal prints out the process and confirmation message:
Step 7: Reboot and Verify Kernel Version
When you complete the steps above, reboot the machine.
When the system boots up, verify the kernel version using the uname command:
The terminal prints out the current Linux kernel version.
In this step-by-step guide, you learned how to build a Linux kernel from scratch and install the required packages.
If you follow the instructions carefully, the process will complete successfully on your Linux machine.
The Linux kernel has a modular design. Functionality is extendible with modules or drivers. Learn how to use the modprobe command to add or remove modules on Linux.
Goran combines his leadership skills and passion for research, writing, and technology as a Technical Writing Team Lead at phoenixNAP. Working with multiple departments and on various projects, he has developed an extraordinary understanding of cloud and virtualization technology trends and best practices.
There are several methods to remove old or unused kernels. It’s also considered good system hygiene practice.
The Linux kernel is the underlying software architecture of each Linux distribution. It provides and defines.