IMPORTANT: I recently discovered https://github.com/arighi/virtme-ng which provides a lot more functionality than these scripts do, I recommend using this over the 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
.
WARNING: This does things as sudo, messes with dnsmasq settings and I generally take no responsibility if this nukes your system. I've never had issues arising from it but caveat emptor.
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
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.
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.
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 askerndev-build
but runsmake mrproper
first.kerndev-install
- Installs header and module files into the dev env image. This is invoked bykerndev-build
unless explicitly disabled.kerndev-module-headers
- Generates a stripped version of the kernel source for building external modules.
kerndev-run
- Runs the kernel development environment with virtio networking.kerndev-debug
- Connectsgdb
to a running dev env. Debugging config options are enabled bykerndev-build
by default. When you runkerndev-debug
it runsgdb
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 :(
kerndev-check
- Runscheckpatch.pl
against the specified files, ignoring line length.kerndev-check-all
- Runscheckpatch.pl
against the specified files.
bridge-utils
dnsmasq
arch-install-scripts
qemu-system-*