Step 1 – Obtaining a Linux kernel source tree
In this section, we will see two broad ways in which you can obtain a Linux kernel source tree:
- By downloading and extracting a specific kernel source tree from the Linux kernel public repository: https://www.kernel.org.
- By cloning Linus Torvalds’ source tree (or others’) – for example, the
linux-next
Git tree.
How do you decide which approach to use? For most developers working on a project or product, the decision has already been made – the project uses a very specific Linux kernel version. You will thus download that particular kernel source tree, quite possibly apply project-specific patches to it as required, and use it.
For folks whose intention is to contribute or upstream code to the mainline kernel, the second approach – cloning the Git tree – is the way to go. Of course, there’s more to it; we described some details in the Exploring the types of kernel source trees section.
In the following section, we demonstrate both approaches to obtaining a kernel source tree. First, we describe the approach where a particular kernel source tree (not a Git tree) is downloaded from the kernel repository. We choose the 6.1.25 LTS Linux kernel for this purpose. So, for all practical purposes for this book, this is the approach to use. In the second approach, we clone a Git tree.
Downloading a specific kernel tree
Firstly, where is the kernel source code? The short answer is that it’s on the public kernel repository server visible at https://www.kernel.org. The home page of this site displays the latest stable Linux kernel version, as well as the latest longterm
and linux-next
releases. The following screenshot shows the site as of 25 April 2023. It shows dates in the format yyyy-mm-dd
:
Figure 2.5: The kernel.org site (as of 25 April 2023) with the 6.1 LTS kernel highlighted
A quick reminder: we also provide a PDF file that has the full-color images of the screenshots/diagrams used in this book. You can download it here: https://packt.link/gbp/9781803232225.
There are many ways to download a compressed kernel source file from this server and/or its mirrors. Let’s look at two of them:
- An interactive, and perhaps the simplest way, is to visit the preceding website and simply click on the appropriate
tarball
link within your web client. The browser will download the image file in.tar.xz
format to your system. - You can also download any kernel source tree in compressed form by navigating to https://mirrors.edge.kernel.org/pub/linux/kernel/ and selecting the major version; practically speaking, for the major # 6 kernels, the URL is https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/; browse or search within this page for the kernel you want. For example, check out the following screenshot:
Figure 2.6: Partial screenshot from kernel.org highlighting the (6.1.25 LTS) kernel we’ll download and work with
The tar.gz
and tar.xz
files have identical content; it’s just the compression type that differs. You can see that it’s typically quicker to download the .tar.xz
files as they’re smaller.
- Alternatively, you can download the kernel source tree from the command line using the
wget
utility. We can also use the powerfulcurl
utility to do so. For example, to download the stable 6.1.25 LTS kernel source compressed file, we type the following in one line:wget –https-only -O ~/Downloads/linux-6.1.25.tar.xz https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.1.25.tar.xz
This will securely download the 6.1.25 compressed kernel source tree to your computer’s ~/Downloads
folder. So, go ahead and do this, get the 6.1.25 (LTS) kernel source code onto your system!
Cloning a Git tree
For developers working on and looking to contribute code upstream, you must work on the very latest version of the Linux kernel code base. Well, there are fine gradations of what exactly constitutes the latest version within the kernel community. As mentioned earlier, the linux-next
tree, and some specific branch or tag within it, is the one to work on for this purpose.
In this book, though, we do not intend to delve into the gory details of setting up a linux-next
tree. This process is already very well documented, see the Further reading section of this chapter for detailed links. The detailed page on how exactly you should clone a linux-next
tree is here: Working with linux-next, https://www.kernel.org/doc/man-pages/linux-next.html, and, as mentioned there, the linux-next tree, http://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git, is the holding area for patches aimed at the next kernel merge window. If you’re doing bleeding-edge kernel development, you likely want to work from that tree rather than Linus Torvalds’ mainline tree or a source tree from the general kernel repository at https://www.kernel.org.
For our purposes, cloning the mainline Linux Git repository (in effect, Linus Torvalds’ Git tree) is more than sufficient. Do so like this:
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
Note that cloning a complete Linux kernel tree is a time-, network-, and disk-consuming operation! Ensure you have sufficient disk space free (at least a few gigabytes worth).
Performing git clone --depth n <...>
, where n
is an integer value, can be useful to limit the depth of history (commits) and thus keep the download/disk usage lower. As the man page on git-clone
mentions for the --depth
option: “Create a shallow clone with a history truncated to a specified number of commits.” Also, FYI, to undo the “shallow fetch” and fetch everything, just do a git pull --unshallow
.
The git clone
command can take a while to finish. Further, you can specify that you want the latest stable version of the kernel Git tree by running git clone
like shown below; for now, and only if you intend to work on this mainline Git tree, we’ll just bite the bullet and clone the stable kernel Git tree with all its storied history (again, type this on one line):
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
Now switch to the directory it got extracted to:
cd linux-stable
Again, if you intend to work on this Git tree, please skip the Step 2 – extracting the kernel source tree section as the git clone
operation will, in any case, extract the source tree. Instead, continue with the Step 3 – configuring the Linux kernel section that follows it. This does imply, though, that the kernel source tree version you’re using will be much different from the 6.1.25 one that we use in this book. Thus, I’d suggest you treat this portion as a demo of how to obtain the latest stable Git tree via git
, and leave it at that.
Finally, yet another way to download a given kernel is provided by the kernel maintainers who offer a script to safely download a given Linux kernel source tree, verifying its PGP signature. The script is available here: https://git.kernel.org/pub/scm/linux/kernel/git/mricon/korg-helpers.git/tree/get-verified-tarball.