Skip to content

Latest commit

 

History

History
102 lines (76 loc) · 3.89 KB

README.md

File metadata and controls

102 lines (76 loc) · 3.89 KB

Kernel Development Scripts

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.

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.

Required packages

bridge-utils
dnsmasq
arch-install-scripts
qemu-system-*