Skip to content

Some handy tools for kernel building and installation on a range of platforms.

Notifications You must be signed in to change notification settings

sbates130272/kernel-tools

Repository files navigation

kernel-tools: A collection of useful Linux kernel tooling

This repo contains a few scripts I find useful for kernel hacking. Feel free to use and abuse these as you see fit.

Installation

I normally have a top-level folder called kernel which I place this repo into. I then have a number of sub-folders:

  • src: The Linux Kernel tree(s). A good way to initialize this folder is to use the ./scripts/init-update script (see below for details).
  • useful-configs: A folder for some good kernel configs. For example this includes a really small (but valid) config, a QEMU specific config and an Ubuntu 18.04 like config.
  • configs: A folder for all the other configs I use, I usually don't repo this or tie it to a separate private repo.
  • debs: A folder of handy output .debs (I almost always work on Debian packages and not RPMs). Again I don't repo this. -config-scripts: A folder of handy flavors of kernel configurations. Useful for building a kernel with certain attributes that I desire.

Useful Scripts

This script can be used to initialize a Linux kernel git repo with Linus', Greg's and the Microsoft WSL kernel source trees. It can also be used to fetch updates from these remotes.

This script can be used to fetch the kernel config from a remote machine and then use this as a base to build a new kernel and install it on that machine. This is useful for running on VMs but it only tested for Ubuntu-based systems.

build-kernel-debrpm

build-kernel-debrpm is a shell script that builds a kernel debian package or RHEL/CentOS RPM files for installation of a linux kernel. See the notes in the file for more information. Note this script lives in the scripts folder.

An example run of this script that would build a p2pdma enabled kernel based on version 4 of the patchsets would be:

REMOTE=https://github.com/sbates130272/linux-p2pmem \
  REMOTE_BRANCH=pci-p2p-v4 \
  CONFIG=<config-file> \
  ./build-kernel-debrpm

And an example that builds a monolithic kernel based on the default config (with all modules converted to "yes") for v4.14.30 would be:

REMOTE= git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git \
  REMOTE_BRANCH=v4.14.30 \
  MONO=yes \
  ./build-kernel-debrpm

And an example that builds a non-monolithic kernel based on the default config (with all modules converted to "yes") for v4.14.30 for arm64 on a non-arm64 host system would be:

REMOTE= git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git \
  REMOTE_BRANCH=v4.14.30 \
  ARCH=arm64 \
  CROSS_COMPILE=aarch64-linux-gnu- \
  ./build-kernel-debrpm

Note all files associated with the unique generation of this kernel (the .config and the (if present) are included in the output tarball along with a .build-info file that contains the information needed to reproduce the .debs or .rpms.

build-latest-p2pdma-kernel

A helper script around build-kernel-debrpm that should always point to the latest and greatest p2pdma kernel. Run this to generate a p2pdma kernel unless you know what you are doing and want to use build-kernel-debrpm. Only supports x86_64 right now.

Patches for build-latest-p2pdma-kernel

build-latest-p2pdma-kernel uses three patches (located in the patches folder) to address some issues with p2pdma kernels. Namely:

  • acs_disable: Add a kernel configuration parameter (acs_disable) that turns off PCIe ACS everywhere. This can be useful for testing p2pdma. To enable this mode add pci=acs_disable to your kernel command line parameters.

  • p2pmem-pci: Adds a device driver for p2pmem exposed by a device driver. Based on this repository. We use this to expose p2pmem to userspace applications.

  • p2pdma patches: A couple of changes were made in p2pdma.c in the v5.4 kernel that broke out of tree drivers for p2pmem. These patches fix this. They are not needed for pre-v5.4 kernels.

Note that the current version of the patches sub-folder this repository only supports v5.6.x series kernel source due to changes in drivers/pci/probe.c. You will need to generate your own patches to address other kernels. We plan to address this issue soon!

docker

A Dockerfile exists that can generate the enviromnent needed to run build-latest-p2pdma-kernel. This can make the generation of the .deb for this kernel simpler for some users. To generate the kernel Debian packages this way proceed as follows from the top-level folder of this repo. Note that since we always pull from the HEAD of the repository we need to run docker with -no-cache. This slows down the build time but avoids incorrect builds.

cd docker
docker build --no-cache -t kernel-tools:latest .

once the image has run to completion you can obtain the tarball via the following (from either the docker folder or the top-level folder for this repo).

docker create --name kernel-tools kernel-tools:latest
docker cp kernel-tools:/kernel/build-kernel-deb.docker.tar.gz .
docker rm kernel-tools

You can then install the .deb using the same approach as a native build using build-latest-p2pdma-kernel.

arch-tools

The arch-tools sub-folder contains a few useful tools for building Linux kernels and kernel modules for non-amd64 based systems. This includes some platform-specific tools and some generic ISA tools.

One of the most useful of these tools is the build-arm64 script which can build a ARM64 kernel and modules using a cross-compiler approach. You should call this script from the top-level of a kernel source tree. See the header of the script for more information. There is also a build-riscv script which can do something similar for riscv32 and riscv64 ISA.

About

Some handy tools for kernel building and installation on a range of platforms.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •