Handy kernel development scripts.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.gitignore
LICENSE
README.md
kerndev-build
kerndev-check
kerndev-check-all
kerndev-config
kerndev-create
kerndev-create-foreign
kerndev-create-foreign.chroot.sh
kerndev-create.chroot.sh
kerndev-debug
kerndev-defaults.sh
kerndev-functions.sh
kerndev-install
kerndev-module-headers
kerndev-nat-launch-subnet.sh
kerndev-nat-launch.sh
kerndev-qemu-tap-helper.sh
kerndev-rebuild
kerndev-run
kerndev-shared.sh
kerndev-update
kerndev-whose

README.md

Kernel Development Scripts

These are my kernel development scripts. Some are specific to my setup, others are more generic. I'm working on making them more generic over time.

Generally I assume the distro I'm using (Arch Linux.) Additionally you will need to install appropriate packages, again at some point I will try to document the required packages.

The scripts have been expanded to include some rudimentary support for the aarch64 architecture. To use this functionality, run kerndev-create aarch64 (or kerndev-create-aarch64) and kerndev-run aarch64.

Acknowledgements

The qemu networking code is based on Jakub Klinkovský's scripts, qemu-launcher.sh is a good starting point for this. His code in turn uses xyne's work.

The following scripts use this 3rd-party code:-

  • kerndev-qemu-tap-helper.sh
  • kerndev-nat-launch.sh
  • kerndev-nat-launch-subnet.sh

Scripts

NOTE: These scripts are interdependent and assume that the they are all on the $PATH.

NOTE: By convention, files that end in .sh are not designed to be user-runnable, but are instead ran from other scripts.

Maintaining

  • kerndev-update - Updates a list of linux trees in specific directories and on specific branches. This is configured to my personal setup, so you will need to edit this script to fit your set up. The list of directories and branches are clearly separated from the actual code that updates so this is a quick task.

Generating

  • kerndev-create - Creates a qemu kernel development environment. The image is an Arch Linux system.
  • kerndev-build - Configures and builds the kernel, optionally placing header and module files into the dev env image. It accepts a single optional argument which, if provided, specifies a cross-compile target architecture.
  • kerndev-config - Sets kernel configuration options for the development environment.
  • kerndev-rebuild - Same as kerndev-build but runs make mrproper first.
  • kerndev-install - Installs header and module files into the dev env image. This is invoked by kerndev-build unless explicitly disabled.
  • kerndev-module-headers - Generates a stripped version of the kernel source for building external modules.

Running

  • kerndev-run - Runs the kernel development environment with virtio networking.
  • kerndev-debug - Connects gdb to a running dev env. Debugging config options are enabled by kerndev-build by default. When you run kerndev-debug it runs gdb which automatically connects to the qemu instance.

IMPORTANT: gdb has a big issue with the CPU changing architecture on startup, so you ought to run kerndev-run before kerndev-debug. If you encounter Remote 'g' packet reply is too long errors you have triggered this issue and specifying arch afterwards doesn't seem to fix anything. If you need to debug early boot code, you'll need to investigate how to work around this issue :(

Code

  • kerndev-check - Runs checkpatch.pl against the specified files, ignoring line length.
  • kerndev-check-all - Runs checkpatch.pl against the specified files.